html2doc mittels python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
crafty
User
Beiträge: 12
Registriert: Freitag 29. April 2005, 12:56

html2doc mittels python

Beitragvon crafty » Freitag 29. April 2005, 13:39

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 :wink:

Ich bin dankbar für jede Antwort!

crafty :D
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

html2doc mittels python

Beitragvon N317V » Freitag 29. April 2005, 16:05

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.:

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.


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
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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Freitag 29. April 2005, 16:33

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
crafty
User
Beiträge: 12
Registriert: Freitag 29. April 2005, 12:56

Beitragvon crafty » Sonntag 1. Mai 2005, 20:45

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! :wink:

Gruß,

Heike
Gast

Beitragvon Gast » Montag 2. Mai 2005, 11:20

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
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Beitragvon N317V » Montag 2. Mai 2005, 12:19

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


Mal so aus dem Ärmel geschüttelt und nur halbwegs getestet:

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
crafty
User
Beiträge: 12
Registriert: Freitag 29. April 2005, 12:56

Beitragvon crafty » Montag 2. Mai 2005, 12:26

Super vielen Dank :!:

Jetzt hab ich auch ne Vorstellung davon wie ich mit dem Makro-Kram umzugehen habe.
Super cool :D
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 2. Mai 2005, 12:43

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 Modvoice
crafty
User
Beiträge: 12
Registriert: Freitag 29. April 2005, 12:56

nochmal ne frage

Beitragvon crafty » Montag 9. Mai 2005, 13:43

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?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 9. Mai 2005, 14:00

Ich hatte es ja eher so gemacht:

Code: Alles auswählen

ActiveDocument = word.Documents(word.ActiveDocument())
ActiveDocument.UpdateStylesOnOpen = True
ActiveDocument.AttachedTemplate = r"C:\s4m.dot"


Das ist aber ungetestet, ich habe auf dieser Kiste zum Glück kein Word.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
crafty
User
Beiträge: 12
Registriert: Freitag 29. April 2005, 12:56

Beitragvon crafty » Dienstag 10. Mai 2005, 10:24

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?? :(
crafty
User
Beiträge: 12
Registriert: Freitag 29. April 2005, 12:56

Beitragvon crafty » Dienstag 10. Mai 2005, 10:44

habe gerade gesehen, dass der Code des Makros noch etwas mehr beinhaltet und zwar:

Code: Alles auswählen

AddIns.Add FileName:="C:\s4manage.dot", Install:=True
   With ActiveDocument
      .UpdateStylesOnOpen = True
      .AttachedTemplate = "C:\s4manage.dot"
   End With


trotzdem funktioniert es irgendwie nicht :?:
crafty
User
Beiträge: 12
Registriert: Freitag 29. April 2005, 12:56

Beitragvon crafty » Dienstag 10. Mai 2005, 15:25

oder könnte mir evtl. jemand sagen wie ich diesen code

Code: Alles auswählen

Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:="1"

des word-makros 'übersetze'?? *verzweifel
crafty
User
Beiträge: 12
Registriert: Freitag 29. April 2005, 12:56

Beitragvon crafty » Donnerstag 12. Mai 2005, 12:44

äähm, ich möchte ja nicht nerven, aber hätte evtl. jemand bitte eine Idee wie man

Code: Alles auswählen

With Selection.Find
    .Text = _"<win32com.gen_py.Microsoft Word 10.0 Object Library.TableOfContents instance at 0x22080808>"
    .Replacement.Text = ""

das übersetzen kann?
Das wäre echt wichtig für mich...
Danke!
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Beitragvon N317V » Donnerstag 12. Mai 2005, 13:21

crafty hat geschrieben:äähm, ich möchte ja nicht nerven,


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.

Code: Alles auswählen

With Selection.Find
    .Text = _"<win32com.gen_py.Microsoft Word 10.0 Object Library.TableOfContents instance at 0x22080808>"
    .Replacement.Text = ""


So wie ich das sehe ist ja das with-Statement nur eine Abkürzung. Die ausführliche Version müsste also, etwa so aussehen:

Code: Alles auswählen

Selection.Find.Text = _"<win32com.gen_py.Microsoft Word 10.0 Object Library.TableOfContents instance at 0x22080808>"
Selection.Find.Replacement.Text = ""


Ja und genau so würd ich das auch übersetzten. Der Unterstrich vor dem String ist mir zwar vollkommen unklar und den würd ich jetzt in Python einfach mal weglassen. Ebenso rätselhaft ist für mich auch, warum Du ausgerechnet diesen String suchen willst und wie es kommt, dass Du dafür VBA-Code hast, aber ... *schulterzuck* ... {siehe meine Signatur}

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Google [Bot]