SoftMaker.de

Deutschsprachiges Diskussionsforum
Aktuelle Zeit: 24.05.2013 07:38:40

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 55 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Dateiübergabe an Textmaker
BeitragVerfasst: 25.07.2009 09:27:12 
Offline

Registriert: 09.03.2009 17:32:30
Beiträge: 470
Wozu Ferien ganz gut sein können: Mein Sohn (17) hat mir in Python ein Skript geschrieben, welches die Konvertierung und die Abfrage übernimmt.
Falls jemand vor dem gleichen Problem steht, darf er sich folgendes Skript anpassen:
Zitat:
import time, subprocess, os

path = "C:\Dokumente und Einstellungen\Peter\Eigene Dateien\Temp\XXST"
pathbasicmaker = "C:\Programme\SoftMaker Office 2008\BasicMaker"
pathbas = "C:\Dokumente und Einstellungen\Peter\Eigene Dateien\Temp\DOSTM.bas"

while True:
try:
file1 = open(path, "r")
string = file1.read().decode("cp850").encode("latin1")
file1.close()

file2 = open(path + ".new", "w")
file2.write(string)
file2.close()

os.remove(path)
subprocess.call([pathbasicmaker, "/s", pathbas])
except IOError:
pass
time.sleep(0.5)

nun wird das BasicMakerSkript aufgerufen:
Zitat:
Dim tm as Object
Dim x as Object
Dim i as Integer
Dim Answer as integer

' Mit TextMaker verbinden; TextMaker starten, wenn er noch nicht läuft
Set tm = CreateObject("TextMaker.Application")

' TextMaker sichtbar machen
tm.Visible = TRUE

' TextMaker-Programmfenster maximieren
tm.WindowState = tmWindowStateMaximize

' Fokus auf TextMaker, damit SendKeys auf jeden Fall ans richtige Fenster geht
tm.Activate


tm.Documents.add "C:\Dokumente und Einstellungen\Peter\Eigene Dateien\SoftMaker\Templates\Testbrief.tmv"

Open "C:\Dokumente und Einstellungen\Peter\Eigene Dateien\Temp\XXST.new" for Input As #1
Do While Not EOF(1)
Line Input #1, FileData ' Zeile einlesen

tm.ActiveDocument.Selection.TypeText FileData
tm.ActiveDocument.Selection.TypeParagraph
Loop
tm.ActiveDocument.saved = True
Close #1

Die Formatierung (Also Schriftart, Schriftgröße und Schriftgewicht) habe ich mittels der Vorlage gelöst. Absatzmarke entsprechend formatiert und abgespeichert. Manches ist wirklich einfach, wenn man weiß, wie es geht. Falls irgendjemand noch Verbesserungen vorschlagen kann, wäre ich für jeden Hinweis dankbar.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Dateiübergabe an Textmaker
BeitragVerfasst: 25.07.2009 09:43:38 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.02.2007 08:37:26
Beiträge: 2940
Warum so kompliziert erst noch ein Python-Script aufrufen? Das kann doch direkt der BM in einem Arbeitsschritt erledigen...


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Dateiübergabe an Textmaker
BeitragVerfasst: 25.07.2009 10:09:16 
Offline

Registriert: 09.03.2009 17:32:30
Beiträge: 470
pbk hat geschrieben:
Warum so kompliziert erst noch ein Python-Script aufrufen? Das kann doch direkt der BM in einem Arbeitsschritt erledigen...

1. weil ich in der Hilfe nicht den Abschnitt gefunden habe, wie die Konvertierung eingebunden werden kann.
2. weil ich in der Hilfe nicht den Abschnitt gefunden habe, wie die Stelle, wo die aus dem Fakturierungsprogramm abgelegte Datei, permanent abgefragt wird.
3. weil eventuell noch eine Zuordnung der Mandantenausgabe des Fakturierungsprogamms vorgesehen werden müsste. (Siehe Zeile 19 in der Datei xxst).
Für mich ist es nicht kompliziert, da das Pythonscript in das Autostartmenü eingetragen wird und im Hintergrund läuft. Ich bekomme den Prozess überhaupt nicht mit. Da ich es bisher nur teste, kopiere ich die xxst Datei in das entprechende Verzeichnis und sofort startet TM und präsentiert mir das Ergebnis.

Aber lass mich ruhig an deinem Wissen teilhaben, damit ich BasicMaker noch besser einsetzen kann. Also wo finde ich das mit der Konvertierung?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Dateiübergabe an Textmaker
BeitragVerfasst: 26.07.2009 11:07:59 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.02.2007 08:37:26
Beiträge: 2940
PeterQ hat geschrieben:
1. weil ich in der Hilfe nicht den Abschnitt gefunden habe, wie die Konvertierung eingebunden werden kann.

Da muss nichts eingebunden werden. Es gibt keine fertige Funktion zur Umwandlung, allerdings ist das bei etwas so simplen wie einer Codepage-Umwandlung mit einem simplen Zeichenvergleich realisierbar. Einfach in einer Tabelle nachschlagen lassen und dann ersetzen, fertig.
Der BM stellt einige Grundfunktionen zur Verfügung und ist keine vollständige Programmierumgebung (das will und kann er auch gar nicht sein). Wenn es um komplexere Lösungen geht, dann bietet es sich natürlich an, die komplette OLE-Automatisierung mit einer vollwertigen Programmiersprache zu realisieren. Ob Python jetzt auch OLE kann, weiss und glaube ich nicht. Aber mit bspw. RealBasic, VisualBasic, Visual C, Ruby, ... geht das natürlich alles, weil zum Teil entsprechende String-Funktionen vorhanden sind.

PeterQ hat geschrieben:
2. weil ich in der Hilfe nicht den Abschnitt gefunden habe, wie die Stelle, wo die aus dem Fakturierungsprogramm abgelegte Datei, permanent abgefragt wird.

Das ist doch nur eine simple Schleifenfunktion. Etwas anderes passiert da ja nicht. Es wird regelmäßig nachgeschaut ob die Datei vorhanden ist oder nicht. Ist sie das, rennt das Script los. Das ist für den BM keine wirkliche Herausforderung ;-)

PeterQ hat geschrieben:
3. weil eventuell noch eine Zuordnung der Mandantenausgabe des Fakturierungsprogamms vorgesehen werden müsste. (Siehe Zeile 19 in der Datei xxst).

Ins Blaue hinein würde ich sagen, dass auch das realisierbar wäre.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Dateiübergabe an Textmaker
BeitragVerfasst: 26.07.2009 14:57:38 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.04.2008 23:02:12
Beiträge: 1463
Wie ich bereits mehrmals ausführte:

Die Umwandlung des Zeichensatzes ist kein Problem, TM kann das.

Beim "Open"-Kommando muss nur angegeben werden: "tmFormatPlainTextDOS".

Man sollte also nicht nach einer Elefantenherde suchen, wenn es die Hausmaus auch tut.

Ich habe jetzt keine Zeit, mich eingehender mit dem Skript zu beschäftigen; ggf. müsste man einen Zwischenschritt einlegen und das Dokument nochmals abspeichern mit dem Parameter "tmFormatPlainTextANSI" (ANSI = Windows Standard ASCII-Belegung). Danach diese Datei nochmals laden wie gewohnt und das bestehende Skript fortsetzen.
Also keine Schleife, keine komplizierte eigene Ersetzungstabelle, nur ein Zwischenschritt.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Dateiübergabe an Textmaker
BeitragVerfasst: 26.07.2009 15:08:49 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.02.2007 08:37:26
Beiträge: 2940
Panosis hat geschrieben:
Beim "Open"-Kommando muss nur angegeben werden: "tmFormatPlainTextDOS".

Jaaa, wenn das gerade auf den vorhandenen Zeichendatz passt. Wirds exotisch, dann gehts nimmer.

Panosis hat geschrieben:
Man sollte also nicht nach einer Elefantenherde suchen, wenn es die Hausmaus auch tut.

Da liegst Du natürlich richtig. Ich muss zugeben, dass ich die Codepagenummer im Python-Script schlicht überlesen habe. Daher meine allgemeinere Lösung des Problems.

Panosis hat geschrieben:
Also keine Schleife

Doch, die braucht er auch weiterhin, denn es muss ja automatisch das TM-Dokument erzeugt werden, sobald die Faktura ihre Exportdatei in das Verzeichnis abgekippt hat.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Dateiübergabe an Textmaker
BeitragVerfasst: 27.07.2009 20:26:00 
Offline

Registriert: 09.03.2009 17:32:30
Beiträge: 470
Panosis hat geschrieben:
Die Umwandlung des Zeichensatzes ist kein Problem, TM kann das.Beim "Open"-Kommando muss nur angegeben werden: "tmFormatPlainTextDOS"...... ggf. müsste man einen Zwischenschritt einlegen und das Dokument nochmals abspeichern mit dem Parameter "tmFormatPlainTextANSI" (ANSI = Windows Standard ASCII-Belegung).
Leider bekomme ich die Speicherabfrage nicht weg. Und dann wird in der Abfrage immer noch der Dateityp tmd vorgeschlagen, obwohl in der Hilfe das Beispiel steht:
Zitat:
' Das aktuelle Dokument unter dem angegebenen Namen im RTF-Format speichern
tm.ActiveDocument.SaveAs "c:\doks\test.rtf", tmFormatRTF
Daher gehe ich davon aus, dass es gleich richtig als *.rtf (in meinem Fall *.txt) abspeichert. Macht es aber nicht.

Es gibt zwar die Möglichkeit
Zitat:
smoSaveChanges = 2 ' Ohne Rückfrage speichern
, aber dort bekomme ich das "tmFormatPlainTextAnsi" nicht eingebaut.

Es ist bestimmt alles sehr einfach .... wenn man weiß, wie es geht.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Dateiübergabe an Textmaker
BeitragVerfasst: 28.07.2009 16:59:20 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.04.2008 23:02:12
Beiträge: 1463
Nur kurz zur Antwort:

Man muss über die TM-Objekte gehen, vgl. dazu das Konversions-Skript, das ich heute im BM-Forum eingestellt habe.
Bei tm.ActiveDocument.SaveAs gibt es keinen Parameter zum Unterdrücken der Speicherabfrage, diese ist dort nicht nötig, sondern bei tm.ActiveDocument.Close.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Dateiübergabe an Textmaker
BeitragVerfasst: 29.07.2009 12:55:41 
Offline

Registriert: 09.03.2009 17:32:30
Beiträge: 470
Es hat mir keine Ruhe gelassen und ich habe noch etwas am Skript herumgebastelt und meines Erachtens nach eine bessere Lösung noch gefunden. Allerdings muss ich noch die Abfrageschleife lösen, wenn es ganz ohne Python auskommen soll.
Hier mein Skript:
Zitat:
Dim tm as Object
Dim x as Object
Dim i as Integer
Dim Answer as integer

' Mit TextMaker verbinden; TextMaker starten, wenn er noch nicht läuft
Set tm = CreateObject("TextMaker.Application")

' TextMaker sichtbar machen
tm.Visible = TRUE

' TextMaker-Programmfenster maximieren
tm.WindowState = tmWindowStateMaximize

' Fokus auf TextMaker, damit SendKeys auf jeden Fall ans richtige Fenster geht
tm.Activate

' Die entsprechende Datei öffnen mit Pfadangabe in "", 3 leere Parameter, Format
tm.Documents.Open "C:\Dokumente und Einstellungen\Peter\Eigene Dateien\Temp\XXST", Empty, Empty, Empty, tmFormatPlainTextDOS

' Alles markieren
tm.ActiveDocument.Select

' Markiertes formatieren
tm.ActiveDocument.Selection.Font.Name = "Bitstream Vera Sans Mono"
tm.ActiveDocument.Selection.Font.Size = "8,5"
tm.ActiveDocument.Selection.Font.Bold = True

' Markiertes in die Zwischenablage kopieren
tm.ActiveDocument.Selection.Copy

' ohne zu speichern, Dokument schließen
tm.ActiveDocument.Close smoDoNotSaveChanges

' Ursprungsdatei löschen
Kill "C:\Dokumente und Einstellungen\Peter\Eigene Dateien\Temp\XXST"

' TM-Vorlage öffnen
tm.Documents.add "C:\Dokumente und Einstellungen\Peter\Eigene Dateien\SoftMaker\Templates\Testbrief.tmv"

' Inhalt aus der Zwischenablage einfügen
tm.ActiveDocument.Selection.Paste

' unverändertes Dokument ohne Nachfrage schließen zu können
tm.ActiveDocument.saved = True


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Dateiübergabe an Textmaker
BeitragVerfasst: 29.07.2009 13:45:18 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.04.2008 23:02:12
Beiträge: 1463
Ich habe mal kurz versucht, etwas zu basteln.
Im Grunde ist es einfach: Man schaltet eine Endlosschleife vor, die die Existenz der Ausgabedatei prüft. Das mache ich mittels abfrage der Dateilänge. Ist diese grösser als Null, dann existiert die Datei auch. Dann springt das Programm mittels Unterprogramm-Aufruf in den Hauptteil des Skripts, den ich dementsprechend als Sub definiert habe. Existiert die Datei nicht, kann sie logischerweise keine Länge haben, also gibt es einen Fehler oder Null. Fehlermeldungen werden mit der On Error-Anweisung unterdrückt. Nach Ablauf der Hauptroutine erfolgt ein Rücksprung in die Endlosschleife.
Sollte eigentlich so gehen, konnte ich aber nicht selbst prüfen, weil ich die entsprechenden Dateien nicht zur Verfügung habe.

Code:
DO
x=0
On Error Resume Next
x=FileLen("C:\Dokumente und Einstellungen\Peter\Eigene Dateien\Temp\XXST")
IF x>0 Then Bearbeiten
LOOP

SUB Bearbeiten

Dim tm as Object
Dim x as Object
Dim i as Integer
Dim Answer as integer

' Mit TextMaker verbinden; TextMaker starten, wenn er noch nicht läuft
Set tm = CreateObject("TextMaker.Application")

' TextMaker sichtbar machen
tm.Visible = TRUE

' TextMaker-Programmfenster maximieren
tm.WindowState = tmWindowStateMaximize

' Fokus auf TextMaker, damit SendKeys auf jeden Fall ans richtige Fenster geht
tm.Activate

' Die entsprechende Datei öffnen mit Pfadangabe in "", 3 leere Parameter, Format
tm.Documents.Open "C:\Dokumente und Einstellungen\Peter\Eigene Dateien\Temp\XXST", Empty, Empty, Empty, tmFormatPlainTextDOS

' Alles markieren
tm.ActiveDocument.Select

' Markiertes formatieren
tm.ActiveDocument.Selection.Font.Name = "Bitstream Vera Sans Mono"
tm.ActiveDocument.Selection.Font.Size = "8,5"
tm.ActiveDocument.Selection.Font.Bold = True

' Markiertes in die Zwischenablage kopieren
tm.ActiveDocument.Selection.Copy

' ohne zu speichern, Dokument schließen
tm.ActiveDocument.Close smoDoNotSaveChanges

' Ursprungsdatei löschen
Kill "C:\Dokumente und Einstellungen\Peter\Eigene Dateien\Temp\XXST"

' TM-Vorlage öffnen
tm.Documents.add "C:\Dokumente und Einstellungen\Peter\Eigene Dateien\SoftMaker\Templates\Testbrief.tmv"

' Inhalt aus der Zwischenablage einfügen
tm.ActiveDocument.Selection.Paste

' unverändertes Dokument ohne Nachfrage schließen zu können
tm.ActiveDocument.saved = True

End Sub


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Dateiübergabe an Textmaker
BeitragVerfasst: 29.07.2009 18:09:05 
Offline

Registriert: 09.03.2009 17:32:30
Beiträge: 470
Habe gerade die Änderung an dem Skript versucht. Leider tat sich nichts.
Mein Vorgehen am privaten Rechner: Die Datei xxst in den tmp-Ordner kopieren. Theoretisch müsste doch dann das Skript automatisch loslegen oder? Oder muss das Skript irgendwie anders noch aktiviert werden?

Ich bin auf der Suche nach der Funktion "Suchen und Ersetzen" in der Hilfe nicht weitergekommen. Unter welchen Begriff läuft diese Funktion? mit replace konnte ich nicht viel anfangen, da es nur als Eigenschaft daherkommt.

Und ich habe noch eine weitere Frage: Wie kann ich die letzten 3 Zeilen selektieren?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Dateiübergabe an Textmaker
BeitragVerfasst: 29.07.2009 22:06:17 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.04.2008 23:02:12
Beiträge: 1463
Starten muss man es schon, sonst tut sich natürlich nichts.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Dateiübergabe an Textmaker
BeitragVerfasst: 30.07.2009 18:41:06 
Offline

Registriert: 09.03.2009 17:32:30
Beiträge: 470
Ist schon klar, dass das Skript gestartet sein muss. Beim gestrigen Versuch fror BasicMaker ein und in TM tat sich nur ein Ruckeln.
Habe es heute erneut versucht, und es reagierte. Übergabe an TM funktionierte. Woran es gestern lag - keine Ahnung. Allerdings ist BasicMaker wieder eingefroren, d.h. die Fenster in BM sind 100 % transparent geworden und es reagiert nicht mehr auf Maus und Tastatur. Einzig der Schließenbutton geht. Damit ist aber auch die Anwendung weg.

Gibt es die Möglichkeit, das BM-Skript im Hintergrund laufen lassen zu können? sozusagen als Prozess wie das bis jetzt genutzte Python-Skript? Das ruft ja auch Basicmaker auf, ohne dass das ganze Programm startet und läuft im Hintergrund ab. Ich habe es auch über ein .bat Datei versucht zu starten ("basicmaker /s C:\Dokumente und Einstellungen\Peter\Eigene Dateien\Temp\Test.b a s ") , aber das bringt auch das Skript nicht zum Laufen.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Dateiübergabe an Textmaker
BeitragVerfasst: 31.07.2009 07:45:43 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 23.02.2007 08:37:26
Beiträge: 2940
PeterQ hat geschrieben:
Habe es heute erneut versucht, und es reagierte. Übergabe an TM funktionierte. Woran es gestern lag - keine Ahnung. Allerdings ist BasicMaker wieder eingefroren, d.h. die Fenster in BM sind 100 % transparent geworden und es reagiert nicht mehr auf Maus und Tastatur. Einzig der Schließenbutton geht. Damit ist aber auch die Anwendung weg.

Ich glaube, das hier eher eine sich niemals beendende Schleife als Ursache herausstellen wird.

PeterQ hat geschrieben:
Gibt es die Möglichkeit, das BM-Skript im Hintergrund laufen lassen zu können? sozusagen als Prozess wie das bis jetzt genutzte Python-Skript? Das ruft ja auch Basicmaker auf, ohne dass das ganze Programm startet und läuft im Hintergrund ab.

Das Python-Script läuft genauso ab, wie das BasicMaker-Script. Dass man da kein extra Programm startet (wie den BM, bspw) liegt lediglich daran, dass Python lediglich einen Kommandozeilenaufruf zur Verfügung stellt. Darum läuft das Programm zwar (man erkennt es an dem Speicher-konsumierenden Python-Prozess) aber man sieht es nicht.

Mit basicmaker /s scriptname.bas sollte es automatisch ausgeführt werden.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Dateiübergabe an Textmaker
BeitragVerfasst: 31.07.2009 21:29:57 
Offline

Registriert: 09.03.2009 17:32:30
Beiträge: 470
Ich möchte doch noch etwas weiterkommen.

1. Wie kann ich ein bestimmtes Wort auswählen? Mit der Methode "tm.ActiveDocument.Select" kann ich nur den gesamten Inhalt auswählen. Ich möchte allerdings nur ein Wort auswählen.

2. Wie kann ich Absätze von hinten her zählen? Mit der Methode " tm.ActiveDocument.Selection.SetRange tm.ActiveDocument.Paragraphs.Item(2).Range.start, tm.ActiveDocument.Paragraphs.Item(2).Range.end" kann ich z.B. die zweite Zeile auswählen. Aber wie kann ich z.B. die vorletzte Zeile auslesen bei variabler Zeilenanzahl?

Enschuldigt meine Hartnäckigkeit und meine Anfängerfragen, aber mit der Hilfe komme ich manchmal nicht weiter. Da bin ich auf eure Unterstützung angewiesen.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 55 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de