Seite 1 von 1

Commateplus - Worddatei als Txt anspeichern

Verfasst: 05.04.2013 13:55
von dysti
Hallo,
den Code von Kiffi:
http://forums.purebasic.com/english/vie ... f78ae5e2af
habe ich heruntergeladen.
Er speichert eine Worddatei als "TXT" ab.
Nun kann man im Worddialog ja angeben: Zeilenumbrüche einfügen

Wie kann ich diese Option Commate übergeben?

Wie kann ich den Wordtext markieren und in die Zwischenablage kopieren oder gleich in das Editorgadget?

Re: Commateplus - Worddatei als Txt anspeichern

Verfasst: 06.04.2013 16:10
von dysti
Hallo,
wenn man sich das Makro von Word anschaut, sieht man die Zusätze:
ActiveDocument.SaveAs2 FileName:="testdoc.txt", FileFormat:=wdFormatText, _
LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
False, Encoding:=1252, InsertLineBreaks:=True, AllowSubstitutions:=False, _
LineEnding:=wdCRLF, CompatibilityMode:=0
Dieser Zusatz müßte hinzugefügt werden:
InsertLineBreaks:=True
Nun weiß ich absolut nicht wie. Habe schon vieles probiert, aber kein Erfolg.
Ich hoffe, das ihr mir das weiterhelfen könnt.

Hier ist mal der Code, es ist der Code von Kiffi:

Code: Alles auswählen

;/////////////////////////////////////////////////////////////////////////////////
;***COMate***  COM automation through iDispatch.
;*===========
;*
;*Convert a Word document to HTML by Kiffi. http://www.purebasic.fr/english/viewtopic.php?t=35719
;*
;*Modified to convert to text format by netmaestro in answer to a forum question
;/////////////////////////////////////////////////////////////////////////////////

IncludePath "H:\puresource\comateplus\" 
XIncludeFile "COMatePLUS.pbi"

#wdFormatTEXT         =  2
#wdFormatHTML         =  8 
#wdFormatFilteredHTML = 10 
  
Procedure GetFormatTEXT(WordApplication.COMateObject) 
  
  ; inspired by Joost Schwider 
  ; http://vb-tec.de/wordhtml.htm 
  
  Protected FileConverter.COMateObject 
  Protected FileConverters.COMateEnumObject 
  Protected SaveFormat 
  
  Debug WordApplication\GetIntegerProperty("Version") 
  
  If WordApplication\GetIntegerProperty("Version") > 8 
    SaveFormat = #wdFormatTEXT
  Else 
    
    FileConverters = WordApplication\CreateEnumeration("FileConverters") 
    
    If FileConverters 
      
      FileConverter = FileConverters\GetNextObject() 
      While FileConverter 
        If FileConverter\GetStringProperty("ClassName") = "TEXT" 
          
          SaveFormat = FileConverter\GetIntegerProperty("SaveFormat") 
          
          FileConverter\Release() 
          Break 
          
        EndIf 
        FileConverter\Release() 
        FileConverter = FileConverters\GetNextObject() 
      Wend 
      FileConverters\Release() 
    EndIf 
    
  EndIf 
  
  ProcedureReturn SaveFormat 
  
EndProcedure 

Procedure ShowErrorIfAny() 
  
  If COMate_GetLastErrorCode() 
    Debug COMate_GetLastErrorDescription() 
  EndIf 
  
EndProcedure 
            
Procedure Doc2Text(Infile.s, OutFile.s) 
  
  Protected ReturnValue 
  Protected WordApplication.COMateObject 
  
  ReturnValue = #False 
  
  If FileSize(Infile) = -1 
    Debug "file not found" 
  Else 
    
    WordApplication = COMate_CreateObject("Word.Application") 
    
    If WordApplication 
      
      If WordApplication\Invoke("Documents\Open('" + Infile + "')") = #S_OK 
        
        ;WordApplication\Invoke("Selection.WholeStory")
          WordApplication\Invoke("ActiveDocument\Selection.Copy")
        If WordApplication\Invoke("ActiveDocument\SaveAs('" + OutFile + "', " + Str(GetFormatTEXT(WordApplication)) + " As Long)") = #S_OK 
        
          
          ReturnValue = #True 
        Else 
          Debug "!ActiveDocument\SaveAs" 
          Debug ShowErrorIfAny() 
        EndIf
        
        
        
        WordApplication\Invoke("Quit(0)") 
      Else 
        Debug "!Documents\Open" 
      EndIf 
      
      WordApplication\Release() 
      
    Else 
      
      Debug "!WordApplication" 
      Debug ShowErrorIfAny() 
      
    EndIf 
    
  EndIf 
  
  ProcedureReturn ReturnValue 
  
EndProcedure 


;Test.
Define Infile.s  = "C:\temp\Testdoc.doc" 
Define OutFile.s = "C:\temp\fromTest1Doc.txt" 

If Doc2Text(Infile, OutFile) = #True  
  RunProgram(OutFile) 
EndIf

Text.s = GetClipboardText()
Debug Text


Re: Commateplus - Worddatei als Txt anspeichern

Verfasst: 06.04.2013 17:30
von Kiffi
was meinst Du mit "Zeilenumbrüche einfügen"? Bei mir werden Zeilenumbrüche so wie im DOC angegeben exportiert.

Grüße ... Kiffi

Re: Commateplus - Worddatei als Txt anspeichern

Verfasst: 06.04.2013 19:11
von dysti
Hallo Kiffi,
wenn man in Word eine Datei als "*.txt" abspeichert, erfolgt nach Abfrage des Dateinamens ein weiterer Dialog.
Hier kann man die Codierung, z.B. Windows oder MS-DOS, auswählen.
Da drunter befindet sind die Option "Zeilenumbrüche einfügen". Sie entspricht dem VBA-Parameter "InsertLineBreaks:=True".
Was macht diese Option?
Sie wandelt die weichen Zeilenumbrüche von Word in harte Zeilenumbrüche um.

In deinem Code oben wird die Textdatei nur die harten Zeilenumbrüche berücksichtigt.

Wenn man eine Textdatei ohne diese Option in ein Editorgadget lädt, fällt die Textformatierung weg und man hat
sehr lange Textzeilen, die über den rechten Rand hinaus gehen.

Mit der Option wird der Text genauso mit den Zeilenumbrüche wie in Word angezeigt.

Ich hoffe, du kannst mit dieser Erklärung etwas anfangen?
Wichtig ist, ob man den Parameter überhaupt übergeben kann?

....und danke schon mal im voraus.

Re: Commateplus - Worddatei als Txt anspeichern

Verfasst: 06.04.2013 19:43
von Kiffi
ah, ok, jetzt habe ich's verstanden :-)

Code: Alles auswählen

[...]
If WordApplication\Invoke("ActiveDocument\SaveAs('" + OutFile + "', " + Str(GetFormatTEXT(WordApplication)) + " As Long, #Opt, #Opt, #Opt, #Opt, #Opt, #Opt, #Opt, #Opt, #Opt, #Opt , #True)") = #S_OK
[...]
Grüße ... Kiffi

Re: Commateplus - Worddatei als Txt anspeichern

Verfasst: 07.04.2013 13:37
von dysti
Einfach super Kiffi. :bounce:
Jetzt weiß man endlich, wie man die Parameter übergibt.
Danke.