Hallo AspirinJunkie,
oh je, das habe ich befürchtet.
Deshalb vielen vielen Dank für Deine Erläuterungen und dem Script.
Herzlicher Gruß
Bernd
Hallo AspirinJunkie,
oh je, das habe ich befürchtet.
Deshalb vielen vielen Dank für Deine Erläuterungen und dem Script.
Herzlicher Gruß
Bernd
Hallo,
ich bitte mal um Unterstützung, da meine Kenntnisse in der Richtungswinkelberechnung nicht ausreichen.
Mein Ziel ist es, aus GPX-Tracks die Entfernung und die Richtung bis zum nächsten Trackpunkt zu berechnen.
Die Trackpunkte liegen nicht weit auseinander. Ich gehe von maximal 1 km aus, eher im Meterbereich. Also ohne Erdkrümmung-berücksichtigung etc..
Im Anhang habe ich eine Testdatei mit extrahierten GPX Koordinaten beigefügt. In diesem Zahlenformat werden GPX Tracks aufgezeichnet. Diese Werte stammen aus einer Aufzeichnung vom Garmin Oregon.
Ich möchte ermitteln, von der Zeile 1 zur Zeile 2 sind es wie viele Meter und in welcher Richtung liegt der nächste Punkt.
Dann von Zeile 2 zur Zeile 3 sind es wie viele Meter und in welcher Richtung liegt der nächste Punkt und so weiter....
Bei der Richtungsangabe, so haben ich gelesen, wird 0 Grad für Norden, 90 Grad für Osten, 180 Grad für Süden und 270 Grad für Westen verwendet. Das würde ich als Ausgabe so übernehmen mit allen Zwischenwerten.
So, hier mein kleiner Versuch, doch auf Grundlage der beiden verschiedenen "kopierten" Ansätze kommen völlig verschieden Werte heraus, die ich nicht nachvollziehen kann. Jetzt ist ein Sehender gefordert
Was ist falsch an der Berechnung? Oder besser, wie lautet die korrekte Berechnung?
Vielen vielen Dank schon mal im Voraus.
Herzlichen Glückwunsch zum Geburtstag.
Mögen all Deine Wünsche in Erfüllung gehen.
klasse, vielen Dank.
Ja, die MsgBox wird angezeigt, dann folgt diese Fehlermeldung:
C:\AutoIt3\Include\excel.au3 (1063) : ==> The requested action with this object has failed.:
Local $iTemp = $oExcel.ActiveWorkbook.Sheets.Count
Local $iTemp = $oExcel.ActiveWorkbook^ ERROR
Verkürze ich den Titel mit StringTrimRight (um den Zusatz " - Excel" zu entfernen) wird 0 und @error=1 zurückgegeben.
und dann?
In meinem Beispiel habe ich das so versucht. Was ist falsch daran?
Hallo water,
den Umstieg werde ich noch schaffen. Aktuell arbeitet mein Programm mit der "alten" Version. Ich habe nur den betreffenden Auszug dargestellt.
Eigentlich ist es mit _ExcelSheetList kein Problem, wenn der Pfad\Datei.xlsx bekannt ist. Durch WinList() kenne ich nur die Fenstertitel und Handle. Und hier beginnt mein Problem: Wie gebe ich _ExcelSheetList nun bekannt, das der Fenstertitel zum Ermitteln der Arbeitsblätter genutzt wird.
Hallo,
ich bitte um Unterstützung.
In dem folgenden Auszug wird über WinList() die aktuell geöffneten Excelfenster ermittelt. Anschließend sollen die Arbeitsblätter dieses Excelfensters ermittelt werden.
In diesem Moment weiß ich den Pfad der Datei nicht um diese über _ExcelBookOpen zu öffnen. Mit _ExcelBookAttach finde ich auch nicht die funktionierende Lösung.
Ziel ist es, dass die Arbeitsblätter der jeweiligen geöffneten Datei ausgelesen werden.
Vorbereitung: verschiedene Exceldateien öffnen
#include <Array.au3>
#include <Excel.au3>
Local $var = WinList()
[/autoit] [autoit][/autoit] [autoit]For $i = 1 To $var[0][0]
; Listet nur die sichtbaren Fenster auf, die einen Titel haben
If $var[$i][0] <> "" And IsVisible($var[$i][1]) And StringInStr($var[$i][0],"- Excel") Then
MsgBox(0, "Details", "Titel=" & $var[$i][0] & @LF & "Handle=" & $var[$i][1])
$oExcel = _ExcelBookAttach($var[$i][0],"Title")
$aArray = _ExcelSheetList($oExcel)
_ArrayDisplay($aArray,"alle sheets")
EndIf
Next
Func IsVisible($handle)
If BitAND(WinGetState($handle), 2) Then
Return 1
Else
Return 0
EndIf
EndFunc ;==>IsVisible
[/autoit]Ist das so verständlich?
Danke und Gruß
Hallo Dirkrid,
das Problem erschließt sich mir nicht. Kannst Du mehr Infos liefern?
Zunächst die Frage: Warum schreibst Du nicht die Rohdaten.csv direkt in die Ergebnis.csv und rufst diese dann mit Excel auf?
Probiere doch mal die Zellangaben "A:L",, dann sollte die Anzahl der Zeilennummern nicht mehr gefordert sein
Soweit ich weiss, sind die von Dir genannten Funktionen nicht in der Kopf- und Fußzeile anwendbar.
Deshalb auslesen, neu zusammensetzen, schreiben.
In Word greift manuelles "suchen/ersetzen" auch nicht in der Kopf- und Fußzeile.
StringReplace könnte ein Losungsansatz für Dich sein.
Zeige bitte ein Beispiel der Kopfzeile und wie soll diese dann nach der Änderung aussehen.
Suchen/ersetzen in der Kopf- und Fußzeile könntest Du durch auslesen, ersetzen, neu schreiben erreichen.
Dazu hatte Bugfix ein Beispiel zur Bearbeitung der Kopf-Fußzeile erstellt.
Beispiel ist in den ersten drei Zeilen auf die Fußzeile ausgelegt (hier auskommentiert). Dazu ist dann die Funktion nutzbar.
Im folgenden Beispiel wird die Kopf- und Fußzeile neu bestimmt.
;$dpfad= "C:\AutoIt3\WordEx\test.docx"
;$neuFuss="Diese ist eine neue Fusszeile"
;_WordDoc_FooterChange($dpfad,$neuFuss)
Local Const $wdHeaderFooterPrimary = 1
[/autoit] [autoit][/autoit] [autoit]$oWord = ObjCreate("Word.Application")
$oWord.Visible = False ; bleibt unsichtbar
$oWord.Documents.Open ('C:\AutoIt3\WordEx\test.docx') ; eine bestehende Datei aufrufen
; aktuelle Fußzeile auslesen
ConsoleWrite('Fußzeile aktuell:' & @CRLF & $oWord.ActiveDocument.Sections(1).Footers($wdHeaderFooterPrimary).Range.Text & @CRLF)
ConsoleWrite('Kopfzeile aktuell:' & @CRLF & $oWord.ActiveDocument.Sections(1).Headers($wdHeaderFooterPrimary).Range.Text & @CRLF)
; neue Fußzeile zuweisen
$sFooterNew = 'neue Fußzeile eingetragen'
$oWord.ActiveDocument.Sections(1).Footers($wdHeaderFooterPrimary).Range.Text = $sFooterNew
$sHeaderNew = 'neue Kopfzeile eingetragen'
$oWord.ActiveDocument.Sections(1).Headers($wdHeaderFooterPrimary).Range.Text = $sHeaderNew
$oWord.Application.DisplayAlerts = False
$oWord.ActiveDocument.Save
$oWord.Quit
;===============================================================================
; Function Name....: _WordDoc_FooterChange
; Description......: Ändert in einem Worddokument die Fußzeile
; Parameter(s).....: $sPath Pfad zum Word Dokument
; $sFooterNew Die neue Fußzeile
; optional $fVisible Wordfenster sichtbar, Standard=0 (Nein)
; optional $fSave Speichern der Änderung? Standard=1 (Ja)
; optional $fQuit Word beenden? Standard=0 (Nein), mit "1" wird auch $fSave=1 gesetzt
; Return Value(s)..: Erfolg Den alten Inhalt der Fußzeile
; Fehler @error = 1 - Dateipfad existiert nicht
; Note.............: Falls Word bereits geöffnet ist, wird in dieser Instanz gearbeitet, anderenfalls wird eine neue Instanz erstellt.
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _WordDoc_FooterChange($sPath, $sFooterNew, $fVisible=False, $fSave=1, $fQuit=0)
If not FileExists($sPath) Then Return SetError(1,0,0)
If $fQuit = 1 Then $fSave = 1
Local Const $wdHeaderFooterPrimary = 1
Local $sFooterOld, $oWord, $fCreated = 0
$oWord = ObjGet($sPath, "Word.Application")
If @error Then
$oWord = ObjCreate("Word.Application")
$fCreated = 1
EndIf
$oWord.Visible = $fVisible
If $fCreated Then $oWord.Documents.Open($sPath)
$sFooterOld = $oWord.ActiveDocument.Sections(1).Footers($wdHeaderFooterPrimary).Range.Text
$oWord.ActiveDocument.Sections(1).Footers($wdHeaderFooterPrimary).Range.Text = $sFooterNew
$oWord.Application.DisplayAlerts = False
If $fSave Then $oWord.ActiveDocument.Save
If $fQuit Then $oWord.Quit
Return $sFooterOld
EndFunc ;==>_WordDoc_FooterChange
Aus Deinem Ausschnitt läßt sich die Situation nicht nachstellen. Du solltest hier mehr Informationen posten.
Du versuchst in Deinem Codeausschnitt in eine vorhanden .doc zu schreiben.
$wasinfile = _GUICtrlRichEdit_StreamToFile($Edit1, $wohinexport)
$wohinexport kann nur eine .doc sein, lt. Deinem Beispiel. Es ist m.E. ein rtf Format.
Deshalb schaue Dir mein Beispiel an und Du wirst die Lösung haben.
Die Anweisung #include <word.au3> wird offensichtlich nicht erreicht.
Die gesamten Funktionen mit Word kannst Du Dir doch in diesem Beispiel sparen, da Du selbige Datei als rtf öffnest und als rtf speicherst.
Da ist erst einmal kein Unterschied.
Ursprünglich wolltest Du doch die Datei als .doc speichern, stimmts?
Dann gilt auch hier, SaveAs nur ohne Dateizusatz - in Deinem Falle ".rtf"
Name...........: _Word_DocSaveAs
; Description ...: Saves the specified Word document with a new name or format.
; Syntax.........: _Word_DocSaveAs($oDoc, $sFileName[, $iFileFormat = 0[, $bReadOnlyRecommended = False[, $bAddToRecentFiles = True[, $sPassword = ""[, $sWritePassword = ""]]]]])
; Parameters ....: $oDoc - Word document object
; $sFileName - Optional: The full path name for the document (default = Current folder and current file name).
; If the document has never been saved, the default name is used (for example, Doc1.doc);
; $iFileFormat - Optional: The format in which the document is saved. Can be any WdSaveFormat constant
; (default = $wdFormatDocument)
; $bReadOnlyRecommended - Optional: True to have Word suggest read-only status whenever the document is opened (default = False)
; $bAddToRecentFiles - Optional: True to add the document to the list of recently used files (default = True)
; $sPassword - Optional: A password string for opening the document (default = "")
; $sWritePassword - Optional: A password string for saving changes to the document (default = "")
; Return values .: Success - Returns 1
; Failure - Returns 0 and sets @error
; |1 - $oDoc is not an object
; |2 - Error saving the specified document. @extended is set to the error returned by method Documents.SaveAs
; Author ........: water (based on the Word UDF written by Bob Anthony)
; Modified ......:
; Remarks .......: If a document with the specified file name already exists, the document is overwritten without the user being prompted first.
; Related .......:
; Link ..........:
; Example .......: Yes
HIer: http://www.autoitscript.com/forum/topic/15…e-to-word-file/ fragst Du nach einer etwas anderen Aufgabenstellung. Was ist denn davon Deine Fragestellung?
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.
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) speichern
Zielformate im _WordDocSaveAs sind u.a.:
0 = .doc
3 = .txt
6 = .rtf
8 = .htm
11 = .xml
12 = .docx
17 = .pdf
Exemplarisch würdest Du die Speicherung in Word so erreichen:
#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.