Dann bitte ich Dich um mehr Informationen, wie Welche Fehlermeldungen erscheinen?
Ist die Word.au3 in Deinem Include-Verzeichnis?
Deine Zusatzfrage kann ich so nicht beurteilen, da in dem kleinen Beispiel keine schreibgeschützte / gesperrte Datei erzeugt wird.
Beiträge von qwert23
-
-
Du verwendest die WordEx.au3.
Word.au3 und Wordex.au3 können m.W. nicht gleichzeitig verwendet werden. -
Ich setze mal voraus, dass Du die #include <Word.au3> einbindest.
_DocSaveAs bedingt die Nennung des Dateinamen ohne Zusatz, wie .doc.
In die "ELSE" Abfrage kommt Dein Script nicht, da der Filter nur ".doc" zulässt. Bitte prüfe das mal nach.Der Ablauf ist dann:
1. mit _GUICtrlRichEdit_StreamToFile eine rtf Datei erzeugen (habe ich aus der Hilfedatei entnommen)
2. mit _WordCreate diese Datei in Word laden (kann auch im Hintergrund erfolgen...siehe Hilfe)
3. Inhalte sammeln mit _WordDocGetCollection
4. Datei mit neuem Dateinamen - ohne Endung - dafür mit Angabe des Zielformats (0) speichernZielformate im _WordDocSaveAs sind u.a.:
0 = .doc
3 = .txt
6 = .rtf
8 = .htm
11 = .xml
12 = .docx
17 = .pdfExemplarisch würdest Du die Speicherung in Word so erreichen:
Spoiler anzeigen
[autoit]
[/autoit]
#include <word.au3>
_GUICtrlRichEdit_StreamToFile($Edit1, @ScriptDir & "\gcre.rtf") ;this is what I tried
$oWord = _WordCreate(@ScriptDir & "\gcre.rtf")
$oDoc = _WordDocGetCollection ($oWord, 0)
$DocNeu = _WordDocSaveAs($oDoc,@ScriptDir & "\TestAlsDoc", 0) ; hier ist auch _WordDocSaveAs($oDoc,@ScriptDir & "\gcre",0) möglich
_WordDocClose($oDoc)Damit wirst Du Dein Script sicher anpassen können.
-
Ja, auch ich empfehle die ExcelEX UDF zu verwenden.
-
Fragst Du doppelt? [ offen ] Excel nach PDF konvertieren?
Wenn Du Deinen pdf-Standarddrucker bestimmst, dann würde Dir sicherlich zum Drucken bereits die Anweisung:
[autoit]$oExcel.ActiveWorkbook.PrintOut
[/autoit]weiterhelfen. Diese Anweisung druckt Deine gesamte Exceldatei aus. Die Parameter dazu findest Du bei Google / MSDN.
-
Der Inhalt des "Akkordion" ist teilweise so groß, dass Du noch scrollen müßtest damit alles lesbar ist. Somit ist es sicherlich der einfachste Weg die Koordinaten mit einem Mouseklick zu steuern.
Eine Idee wäre, allerdings kann hier nicht hilfreich sein, einen Screenshot der jeweiligen Seite zu erstellen und den jeweiligen Text auslesen. Mit GDI+ müsste das machbar sein. Ob damit die Koordinaten bestimmt werden können entzieht sich meinem Wissen.
Vielleicht hilft dieses Projekt: Multiple MouseGetPos mit GUI
oder PushTheButton, ermöglicht Mausklick auf sonst nicht erreichbare Grafiken UPDATE 1.36 -
In der Funktion _writeData() probiere mal diese Änderung:
Spoiler anzeigen
[autoit]$delanzahl = ($ende-1) - ($start+1)
[/autoit]
For $i = 1 to $delanzahl
_FileWriteToLine($file2, $start+1, "", 1) ;so sollte es funktionieren
MsgBox(0, "Test", @error & " " & $i & " " & _FileCountLines($file2))
Next -
Bitte erläutere mal kurz was mit dem "Akkordeon" gemeint ist. Ein Bild aus der Webseite wäre nett.
-
Ist es korrekt verstanden, dass Du von einer Webseite alle Unterseiten anzeigen möchtest und das in einem Zeitintervall?
Dann hier ein Vorschlag, der sicherlich noch perfektioniert werden kann. Es werden alle .html Links angesprochen.
Externe Links und E-Mailadressen bleiben unberücksichtigt.
Die Zeitsteuerung ist hier einfach via Msgbox und sleep umgesetzt.Spoiler anzeigen
[autoit]#include <IE.au3>
[/autoit] [autoit][/autoit] [autoit]Local $oIE = _IECreate("www.fue-seminare.de")
[/autoit] [autoit][/autoit] [autoit]
Local $oLinks = _IELinkGetCollection($oIE)
Local $iNumLinks = @extended
MsgBox(0, "Link Info", $iNumLinks & " Links gefunden",2)For $oLink In $oLinks
[/autoit]
If StringinStr($oLink.href,"html") Then
MsgBox(0, "Link Info", $oLink.href,1)
_IECreate($oLink.href)
sleep(3000)
WinClose(WinGetTitle("[active]"))
EndIf
Next -
War denn der Titel bereits im UrsprungPDF gesetzt?
Das Beispiel basiert darauf, dass bereits vorhandene Eigenschaften neu gesetzt werden.
Mit dem Eintrag in Zeile 26 fällst Du in der Funktion (If-Abfrage) raus. Deshalb kann hier nichts geschrieben werden.Um in selbiger Datei zu bleiben sind die Zeilen 72-76 anzupassen. Hier einfach den ursprünglichen Dateinamen verwenden und die Datei schreiben.
-
Mit Autoit gibt es hier ein Beispiel:
http://www.autoitscript.com/forum/topic/13…sting-pdf-file/Es werden im Beispiel ausschließlich vorhandene Eigenschaften bedient.
[autoit]
Um das zu ändern, ist die If-Abfrage in der FunktionFunc _PDF_SetProperties($sFile, $aOld, $aNew)
[/autoit]anzupassen.
Die Keywords werden mit \r\n in einzelne Zeilen aufgeteilt.
Hier das Beispiel:
Spoiler anzeigen
[autoit]; quelle: http://www.autoitscript.com/forum/topic/13…sting-pdf-file/
[/autoit] [autoit][/autoit] [autoit]#include <Array.au3>;just for display the arrays
[/autoit] [autoit][/autoit] [autoit]_Test()
[/autoit] [autoit][/autoit] [autoit]Func _Test()
[/autoit] [autoit][/autoit] [autoit]
Local $sFile = @ScriptDir & "\DeinPDFDokument.pdf"
Local $aOldData = _PDF_GetProperties($sFile)
_ArrayDisplay($aOldData)Local $aNewData[6][2] = [["Title", "New Title"],["Producer", "New Producer"],["Author", "New Author"],["Creator", "New Creator"],["Subject", "New Subject"],["Keywords", "New keywords"]]
[/autoit] [autoit][/autoit] [autoit]Local $sNewFile = _PDF_SetProperties($sFile, $aOldData, $aNewData)
[/autoit] [autoit][/autoit] [autoit]
Local $aCheck = _PDF_GetProperties($sNewFile)
_ArrayDisplay($aCheck)
EndFunc ;==>_TestFunc _PDF_GetProperties($sFile)
[/autoit] [autoit][/autoit] [autoit]
Local $a_Prop[6][2] = [["Title", ""],["Producer", ""],["Author", ""],["Creator", ""],["Subject", ""],["Keywords", ""]]
Local $hFile = FileOpen($sFile)
Local $sTxt = FileRead($hFile)
FileClose($hFile)
Local $title = StringRegExp($sTxt, "(?i)(/Title) {0,1}\((.*?)\)", 1)
If @error = 1 Then
$a_Prop[0][1] = "no match"
Else
$a_Prop[0][1] = $title[1]
EndIf
Local $producer = StringRegExp($sTxt, "(?i)(/Producer) {0,1}\((.*?)\)", 1)
If @error = 1 Then
$a_Prop[1][1] = "no match"
Else
$a_Prop[1][1] = $producer[1]
EndIf
Local $author = StringRegExp($sTxt, "(?i)(/Author) {0,1}\((.*?)\)", 1)
If @error = 1 Then
$a_Prop[2][1] = "no match"
Else
$a_Prop[2][1] = $author[1]
EndIf
Local $creator = StringRegExp($sTxt, "(?i)(/Creator) {0,1}\((.*?)\)", 1)
If @error = 1 Then
$a_Prop[3][1] = "no match"
Else
$a_Prop[3][1] = $creator[1]
EndIf
Local $subject = StringRegExp($sTxt, "(?i)(/Subject) {0,1}\((.*?)\)", 1)
If @error = 1 Then
$a_Prop[4][1] = "no match"
Else
$a_Prop[4][1] = $subject[1]
EndIf
Local $keywords = StringRegExp($sTxt, "(?i)(/Keywords) {0,1}\((.*?)\)", 1)
If @error = 1 Then
$a_Prop[5][1] = "no match"
Else
$a_Prop[5][1] = $keywords[1]
EndIf
Return $a_Prop
EndFunc ;==>_PDF_GetPropertiesFunc _PDF_SetProperties($sFile, $aOld, $aNew)
[/autoit]
Local $hFile = FileOpen($sFile)
Local $sTxt = FileRead($hFile)
FileClose($hFile)
For $i = 0 To UBound($aOld) - 1
If $aOld[$i][1] <> "no match" Or $aOld[$i][1] <> "" Then
$sTxt = StringRegExpReplace($sTxt, "(?i)(/" & $aOld[$i][0] & ") {0,1}\((.*?)\)", "/" & $aOld[$i][0] & " (" & $aNew[$i][1] &") ", 1)
EndIf
Next
Local $sFileName = StringRegExpReplace($sFile, ".*\\(.*).{4}", "$1")
Local $sNewFile = StringReplace($sFile, $sFileName, $sFileName & "_mod.pdf")
Local $hNew = FileOpen($sNewFile, 18)
FileWrite($hNew, $sTxt)
FileClose($hNew)
Return $sNewFile
EndFunc ;==>_PDF_SetPropertiesKommt das Deinen Vorstellungen nahe?
-
Dein Excelaufruf beinhaltet vieles und nichts...
Der Aufruf zur Übergabe von $Array lautet:
[autoit]_ExcelWriteSheetFromArray($oExcel, $Array, 1, 1, 0, 0)
[/autoit]
Alles weitere könnte auch mit ein paar Formeln in Excel formatiert werden. -
Das weiß ich aktuell nicht...
Als Lösungsvorschlag, wenn Acrobat Writer installiert ist, würde ich anschließend die gewünschten pdf Dateien neu zusammenstellen.
Dazu gibt es im engl. Forum Beispiel, wie dieses:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
Dim $filelist[1]global $sourcepath
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]; example merging files
[/autoit] [autoit][/autoit] [autoit]
$t = ObjCreate("acrobat.pdf")$var= FileSelectFolder("Select folder", "","",$sourcepath) & ""
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
MergeFiles($var,FileSaveDialog( "Select Filename", $var, "PDF Files (*.pdf)", 3))
; example endfunc GetRotation($Targetpath)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;----------------------------------------------------
; Get the Rotation of a Page (eg. page 1)
; Ex.: msgbox(0,"Rotation",GetRotation("c:\pdft\test.pdf" ))
;----------------------------------------------------
if not FileExists($Targetpath) then
return -1
endif
$SourcePDF = ObjCreate("AcroExch.PDDoc")
if not IsObj($SourcePDF) then
return -2
endif
$b = $SourcePDF.Open($Targetpath)
$rotation = $sourcePDF.AcquirePage(0).GetRotate
$SourcePDF.close
$sourcePDF=""
return $rotation ; in Degree
EndFuncfunc MergeFiles($SourcePath , $DestinationPath)
[/autoit] [autoit][/autoit] [autoit]if fileexists($DestinationPath) then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
FileDelete($DestinationPath)
endifgetfiles($sourcepath, "*.pdf") ; Search Files in Dir
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
if $filelist[0] < 2 then
Msgbox(32,"Info", "Ther are less than two files in folder")
exit
endiffor $n=2 to $filelist[0]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;msgbox(0,"Info" , $filelist[0] & " " & $filelist[$n])
ProgressOn("PDF Merge","Processing ...")
ProgressSet((($n-1)/$filelist[0]) * 100, $filelist[$n-1])
if $n=2 then
pdfmerge($sourcepath & $filelist[$n-1],$sourcepath & $filelist[$n], $DestinationPath)
else
pdfmerge($DestinationPath, $sourcepath & $filelist[$n], $DestinationPath)
endif
next
ProgressSet(100, $filelist[$filelist[0]])
sleep(800)
ProgressOff()
Endfuncfunc getfiles($dir, $filter) ; search files in dir
[/autoit] [autoit][/autoit] [autoit]
Global $filelist[1]$n=0
[/autoit] [autoit][/autoit] [autoit]
$search= FileFindFirstFile($dir & $filter)
; Check if the search was successful
If $search = -1 Then
MsgBox(0, "Error", "No files/directories matched the search pattern")
Exit
EndIfWhile 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$n=$n+1
$file = FileFindNextFile($search)
If @error Then ExitLoop
redim $filelist[$n+1]
$filelist[$n]= $file
$filelist [0] = $n
WEnd
; Close the search handle
FileClose($search)
EndFuncfunc PDFMerge($File1, $File2, $Fileout)
[/autoit] [autoit][/autoit] [autoit]
; ---------------------------------------
; File1 first file
; File2 second file (inserted after)
; Fileout is the saving name
;
; returns 1 on success
; returns -1 Error insert Pages
; returns -2 Error Object Create
;----------------------------------------
$SourcePDF = ObjCreate("AcroExch.PDDoc")
if not IsObj($SourcePDF) then
return -2
endif
$b = $SourcePDF.Open($file1)$TargetPDF = ObjCreate("AcroExch.PDDoc")
[/autoit] [autoit][/autoit] [autoit]
$b = $TargetPDF.Open($file2)$intSourcePgs = $SourcePDF.GetNumPages
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$intInsertPgs = $TargetPDF.GetNumPages
if not $SourcePDF.InsertPages($intSourcePgs-1, $TargetPDF, 0, $intInsertPgs, False) = -1 then
$SourcePDF.Close
$TargetPDF.Close
$SourcePDF=""
$TargetPDF=""
return -1
endif
$b = $SourcePDF.Save(1, $fileout)
$SourcePDF.Close
$TargetPDF.Close
$SourcePDF=""
$TargetPDF=""
return 1
endfuncfunc GetPagesCount($target); count pages
[/autoit]
$AcroPDDoc = ObjCreate("AcroExch.PDDoc")
if @error then return -1
$bPDF = $AcroPDDoc.Open($target)
if @error then return -2
$Pages= $AcroPDDoc.GetNumPages
$bPDF = $AcroPDDoc.Close
return $pages
endfuncSicherlich bist Du damit flexibler und kannst die Arbeitsblätter individuell zusammenstellen.
Das Script läßt sich dazu schnell anpassen, damit alles im Hintergrund erfolgt.
Kommt das Deinen Vorstellungen nahe? -
Mit
_ExcelSheetActivate($oExcel, "hier das Arbeitsblatt angeben")
das Arbeitsblatt aktivieren und erneut speichern. Bitte jeweils die Zieldatei neu bestimmen.
-
Die Zeile 17 war nicht korrekt. Habe nicht gesehen, dass mit c&p der "\" nicht korrekt übergeben wurde. $i wird in diesem Beispiel nicht benötigt und ist entfernt. Sorry!
-
Mit dem ExcelEX UDF ist das speichern als pdf auch direkt möglich.
Hier die modifizierte Funktion aus dem ExcelEX UDF:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit]
;===============================================================================
; Function Name: _ExcelSaveAsEX($oExcel, $Fileformat, $NewFilepath, $Close = True)
; Description: Speichert eine Exceldatei in einem bestimmten Format ab
; Parameter(s): $oExcel Ein Excelobject, wie es von _ExcelbookOpen oder _ExcelbookNew zurückgegeben wird
; $Fileformat Der Dateityp, in dem gespeichert werden soll (xlsx, xlsb, xlsm, xls, csv, txt, prn)
; $NewFilepath Speicherort und Dateiname der neuen Datei
; $Close = True Soll nach dem Speichern das Objekt geschlossen werden? (Standard = True)
; Return Value(s): Erfolg Gibt 1 zurück
; Fehler @error 1 - $oExcel ist kein Objekt
; 2 - $Fileformat ist keine bekannte Dateiendung oder Formatnummer
; Author(s): TheLuBu ([email='LuBu@veytal.com'][/email])
; Copyright: TheLuBu ([email='LuBu@veytal.com'][/email])
;===============================================================================
Func _ExcelSaveAsEX($oExcel, $Fileformat, $NewFilepath, $Close = True)
If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
Switch $Fileformat
Case 51, "xlsx", ".xlsx"
$Fileformat = 51
Case 50, "xlsb", ".xlsb"
$Fileformat = 50
Case 52, "xlsm", ".xlsm"
$Fileformat = 52
Case 6, "csv", ".csv"
$Fileformat = 6
Case -4158, "txt", ".txt"
$Fileformat = -4158
Case 36, "prn", ".prn"
$Fileformat = 36
Case 56, "xls", ".xls"
$Fileformat = 56
Case 57, "pdf", ".pdf" ; hinzugefügt
$Fileformat = 57 ; hinzugefügt
Case Else
Return SetError(2, 0, 0)
EndSwitch
With $oExcel
.Application.DisplayAlerts = False ; Schaltet Fehlermeldungen bei Excel aus
.ActiveWorkBook.SaveAs($NewFilepath, $Fileformat)
If $Close Then
.ActiveWorkbook.Close ; Schließt die Tabelle
.Quit ; Schließt das Workbook
EndIf
EndWith
Return 1
EndFunc ;==>_ExcelSaveAsEXHier noch ein Beispiel auf Basis der Hilfedatei:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <Excel.au3>
#include <excelex.au3>Local $sFilePath1 = @ScriptDir & "\Test1.xlsx" ; Diese Datei sollte bereits existieren
[/autoit] [autoit][/autoit] [autoit]
Local $oExcel = _ExcelBookOpen($sFilePath1); Fehler, die während des Öffnens der Datei auftreten, anzeigen
[/autoit] [autoit][/autoit] [autoit]
If @error = 1 Then
MsgBox(0, "Fehler!", "Das Excel-Objekt konnte nicht erstellt werden.")
Exit
ElseIf @error = 2 Then
MsgBox(0, "Fehler!", "Die Datei existiert nicht.")
Exit
EndIf$NewFilepath = @scriptdir&"\TestsaveExcel"
[/autoit] [autoit][/autoit] [autoit]
$fileformat = 57With $oExcel
[/autoit] [autoit][/autoit] [autoit]
.Application.DisplayAlerts = False ; Schaltet Fehlermeldungen bei Excel aus
.ActiveWorkBook.SaveAs($NewFilepath, $Fileformat)
EndWithmsgbox(0,"gespeichert",$i,1)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]Die Variable $fileformat erzeugt folgende Dateitypen aus Excel:
1 = xls
2 = slk
3 = txt
6 = csv
17 = xlt
50 = xlsb
51 = xlsx
52 = xlsm
53 = xltx
55 = xlam
57 = pdf
58 = XPs
60 = ods -
Kannst Du denn die neue csv-Datei per Doppelklick mit Excel öffnen?
-
Probiere doch mal diesen FileCopy:
[autoit]
[/autoit]
Filecopy ("c:\mytext.txt", "c:\mytext.csv",1)Ansonsten bleibt Dein FileCopy ohne Auswirkung auf Veränderungen in Deiner txt.
-
Meinst Du wie im Post #2 und #5 beschrieben?
[ offen ] Anzeigeproblem mit IE -
In Deinem Script die Fenster mit WinMove positionieren...