Tagchen,
ich bin leider noch nicht sonderlich erfahren in Python und bin daher gerade auf ein (für mich) recht hartnäckiges Problem gestossen.
Ich müsste bestehende HTML-Seiten in Word, also .doc konvertieren.
Hab nen paar Zeilen geschrieben in dem ich die Inhalte der HTML-Dateien nehme und einfach ganz plump mit:
file('doku.doc').write(neuerText)
in eine .doc-datei rein'klatsche'.
Alles schön und gut, aber wie kann ich denn mit Python Word quasi beeinflussen?
Also, dass ich sagen kann, wenn er beim Lesen der HTML-Datei auf <h2> oder so stösst, dann ne neue Seite anzufangen oder ähnliches.
Leider finde ich dazu im Web gar nix, hab mich schon bald weg-ge-google-t
Ich bin dankbar für jede Antwort!
crafty
html2doc mittels python
Am besten ist es, wenn Du Dich in VBA auskennst, denn dann lässt sich mit dem Python-Modul win32com so ziemlich alles in Office ansteuern. Z.B.:
Für alle möglichen Funktionen verweise ich auf die Word-VBA-Hilfe z.B. VBAWRD8.HLP bei Word 97 oder eine andere VBA-Doku. Die sind IMHO übrigens furchtbar, weil unlogisch und wirr. Viel Spaß damit! :-/ Für Excel und Powerpoint hab ich mir eine Layer-Klasse geschrieben um die von mir häufig benutzten Funktionen leichter handhaben zu können.
HTH
Edit: code in python-tags gesetzt
Code: Alles auswählen
from win32com.client import Dispatch
word = Dispatch('Word.Application') # erzeugt Word-Instanz
word.Visible = 1 # macht Word sichtbar
worddoc = word.Documents.Add() # öffnet ein neues Dokument
worddoc.Content.InsertAfter('\n\n dein Text hier \n') # fügt Deinen Text am Ende des Dokuments ein.
HTH
Edit: code in python-tags gesetzt
Zuletzt geändert von N317V am Dienstag 3. Mai 2005, 08:47, insgesamt 1-mal geändert.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Hi
mal dumm gefragt: Mein Word kann html importieren und sogar ziemlich gut und richtig darstellen. Sogar Style Sheets aus css-Dateien werden berücksichtigt. Wozu braucht es da Python?
Ansonsten schau mal in der Buchhandlung Deines Vertrauens, ob es da nicht ein Buch zum Thema VBA gibt, das Dein Problem abdeckt. VAB ist da wohl das Mittel der Wahl und die Bücher die es dazu gibt sind meist besser als die Dokus von MS. Aber Vorsicht: von Word 97 zum heutigen Word gibt es einen gewissen Sprung in der VBA Programmierung, insb. wenn Du nicht nur für amerikanische Nutzer schreiben willst (aber das nur, weil gerade 97 angesprochen wurde).
Gruß,
Christian
mal dumm gefragt: Mein Word kann html importieren und sogar ziemlich gut und richtig darstellen. Sogar Style Sheets aus css-Dateien werden berücksichtigt. Wozu braucht es da Python?
Ansonsten schau mal in der Buchhandlung Deines Vertrauens, ob es da nicht ein Buch zum Thema VBA gibt, das Dein Problem abdeckt. VAB ist da wohl das Mittel der Wahl und die Bücher die es dazu gibt sind meist besser als die Dokus von MS. Aber Vorsicht: von Word 97 zum heutigen Word gibt es einen gewissen Sprung in der VBA Programmierung, insb. wenn Du nicht nur für amerikanische Nutzer schreiben willst (aber das nur, weil gerade 97 angesprochen wurde).
Gruß,
Christian
Vielen Dank für die Antworten!
Das mit VBA hilft mir erstmal weiter.
Zu der Frage warum ich Python benötige oder das mit Python machen will.
Ich habe mehrere HTML-Seiten, die ich zu einem Word-Dok zusammenfügen muss und das auch in einer bestimmten Reihenfolge.
Da ansonsten bei demjenigten für den ich das mache alles mit Python zu tun hat, soll das ein Pythonskript werden. Dies wird dann einmal angestossen und dann sollen die entsprechenden HTML-Seiten zu einem Word-Dok (incl. Seitenumbrüche bei neuem Kapitel und Inhaltsverzeichnis usw.) zusammengefasst werden.
Also, danke für die Anregungen. Werde mich mal daran versuchen!
Gruß,
Heike
Das mit VBA hilft mir erstmal weiter.
Zu der Frage warum ich Python benötige oder das mit Python machen will.
Ich habe mehrere HTML-Seiten, die ich zu einem Word-Dok zusammenfügen muss und das auch in einer bestimmten Reihenfolge.
Da ansonsten bei demjenigten für den ich das mache alles mit Python zu tun hat, soll das ein Pythonskript werden. Dies wird dann einmal angestossen und dann sollen die entsprechenden HTML-Seiten zu einem Word-Dok (incl. Seitenumbrüche bei neuem Kapitel und Inhaltsverzeichnis usw.) zusammengefasst werden.
Also, danke für die Anregungen. Werde mich mal daran versuchen!
Gruß,
Heike
Und zack... da hab ich wieder eine Frage...
Was ich nun leider trotzdem nicht hinbekomme ist das aktive Dokument anzusprechen und darin etwas zu ändern, z.b. Seitenzahlen hinzufügen o.ä.
Ich hab versucht Teile des Makro-Codes von Word umzuarbeiten, sodass ich sie in Python nutzen kann, nur leider gelingt mir das ganz und gar nicht.
Im Makro selber steht z.b. "With ActiveDocument
.TablesOfContents.Add Range:=Selection.Range"
wie setze ich das jetzt in Python um? *verzweifel
Was ich nun leider trotzdem nicht hinbekomme ist das aktive Dokument anzusprechen und darin etwas zu ändern, z.b. Seitenzahlen hinzufügen o.ä.
Ich hab versucht Teile des Makro-Codes von Word umzuarbeiten, sodass ich sie in Python nutzen kann, nur leider gelingt mir das ganz und gar nicht.
Im Makro selber steht z.b. "With ActiveDocument
.TablesOfContents.Add Range:=Selection.Range"
wie setze ich das jetzt in Python um? *verzweifel
Mal so aus dem Ärmel geschüttelt und nur halbwegs getestet:Anonymous hat geschrieben: Im Makro selber steht z.b. "With ActiveDocument
.TablesOfContents.Add Range:=Selection.Range"
wie setze ich das jetzt in Python um? *verzweifel
Code: Alles auswählen
word.Documents(word.ActiveDocument()).TablesOfContents.Add(word.Selection.Range)
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Aus meinem alten Script:
Code: Alles auswählen
import win32com.client
def writetext(text):
"""Writes a text at the current cursor position into Word"""
word = win32com.client.Dispatch('Word.Application')
sel = word.Selection
sel.TypeText(text)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ich hätte da doch noch mal ne Frage.
Und zwar möchte ich noch ein paar Formatierungen durch das Laden einer Dokumentvorlage in das erstellte Dokument einbringen.
Der text des Makros lautet:
With ActiveDocument
.UpdateStylesOnOpen = True
.AttachedTemplate = "C:\s4m.dot"
End With
doch das zuweisen klappt bei mir nicht.
Müsste doch sowas sein wie
word.Documents(word.ActiveDocument()).AttachedTemplate = "C:\s4m.dot"
oder nicht?
Und zwar möchte ich noch ein paar Formatierungen durch das Laden einer Dokumentvorlage in das erstellte Dokument einbringen.
Der text des Makros lautet:
With ActiveDocument
.UpdateStylesOnOpen = True
.AttachedTemplate = "C:\s4m.dot"
End With
doch das zuweisen klappt bei mir nicht.
Müsste doch sowas sein wie
word.Documents(word.ActiveDocument()).AttachedTemplate = "C:\s4m.dot"
oder nicht?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich hatte es ja eher so gemacht:
Das ist aber ungetestet, ich habe auf dieser Kiste zum Glück kein Word.
Code: Alles auswählen
ActiveDocument = word.Documents(word.ActiveDocument())
ActiveDocument.UpdateStylesOnOpen = True
ActiveDocument.AttachedTemplate = r"C:\s4m.dot"
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Leider schmiert mir bei dieser ganzen Aktion fast jedes Mal Word direkt ab.
Außerdem wird die Seitennummerierung und das was sonst noch so in der Fußzeile der Formatvorlage vorhanden ist gar nicht übernommen.
Vielleicht noch ne Idee??
Außerdem wird die Seitennummerierung und das was sonst noch so in der Fußzeile der Formatvorlage vorhanden ist gar nicht übernommen.
Vielleicht noch ne Idee??
habe gerade gesehen, dass der Code des Makros noch etwas mehr beinhaltet und zwar:
trotzdem funktioniert es irgendwie nicht
Code: Alles auswählen
AddIns.Add FileName:="C:\s4manage.dot", Install:=True
With ActiveDocument
.UpdateStylesOnOpen = True
.AttachedTemplate = "C:\s4manage.dot"
End With
oder könnte mir evtl. jemand sagen wie ich diesen code
des word-makros 'übersetze'?? *verzweifel
Code: Alles auswählen
Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:="1"
äähm, ich möchte ja nicht nerven, aber hätte evtl. jemand bitte eine Idee wie man
das übersetzen kann?
Das wäre echt wichtig für mich...
Danke!
Code: Alles auswählen
With Selection.Find
.Text = _"<win32com.gen_py.Microsoft Word 10.0 Object Library.TableOfContents instance at 0x22080808>"
.Replacement.Text = ""
Das wäre echt wichtig für mich...
Danke!
Ich möchte ja echt nicht patzig sein, aber: hast Du eigentlich für Deine anderen Fragen Antworten gefunden? Da ich auch nur mit Office arbeite, wenn ich muss und eigentlich keine Ahnung von VB hab, kann ich die Antworten leider auch nicht so einfach aus dem Ärmel schütteln, sondern muss wohl wie Du per Versuch und Irrtum rumtüfteln.crafty hat geschrieben:äähm, ich möchte ja nicht nerven,
Code: Alles auswählen
With Selection.Find
.Text = _"<win32com.gen_py.Microsoft Word 10.0 Object Library.TableOfContents instance at 0x22080808>"
.Replacement.Text = ""
Code: Alles auswählen
Selection.Find.Text = _"<win32com.gen_py.Microsoft Word 10.0 Object Library.TableOfContents instance at 0x22080808>"
Selection.Find.Replacement.Text = ""
edit: typo im code beseitigt
Edit (Leonidas): Python Code in Python-Tags gesetzt.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Hier hast du mal was zum spielen (hat zumindest mit Word 2002 funktioniert):
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: latin-1 -*-
import win32com.client
def replacetext(replace, by):
"""Replaces a text by another.
Returns True if there was something replaced and False if not.
Needs _static_ dispatch"""
word = win32com.client.Dispatch('Word.Application')
sel = word.Selection
sel.Find.ClearFormatting()
sel.Find.Replacement.ClearFormatting()
sel.Find.Text = replace
sel.Find.Replacement.Text = by
sel.Find.Forward = True
sel.Find.Wrap = win32com.client.constants.wdFindContinue
#sel.Find.Wrap = 1
sel.Find.Format = False
sel.Find.MatchCase = False
sel.Find.MatchWholeWord = False
sel.Find.MatchSoundsLike = False
sel.Find.MatchAllWordForms = False
return sel.Find.Execute(Replace=win32com.client.constants.wdReplaceAll)
#return sel.Find.Execute(Replace=2)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Kennt evtl. zufälliger Weise jemand einen Trick, um den Cursor dazu zu bewegen an das Ende des Dokumentes zu gehen und dort zu bleiben?
Ich müsste am Ende eines bestehenden Dokumentes eine Datei einfügen.
Am Ende einer Datei Text einzufügen ist kein Problem. Auch kann ich in ein Dokument eine Datei einfügen, aber die wird am Anfang und nicht am Ende eingefügt.
Mal wieder besten Dank!
Ich müsste am Ende eines bestehenden Dokumentes eine Datei einfügen.
Am Ende einer Datei Text einzufügen ist kein Problem. Auch kann ich in ein Dokument eine Datei einfügen, aber die wird am Anfang und nicht am Ende eingefügt.
Mal wieder besten Dank!
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich vermute mal, dass das sel Objekt (aus meinem Vorherigen Beispiel) dir helfen kann, es dazu Methoden bereitstellt. EIne große Hilfe für sowas ist meiner Meinung nach vbawd10, ist manchmal echt nützlich..
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice