Hallo, ich bin noch nicht ganz firm mit .Net, muss aber schon loslegen. Bei der Wahl 'Selbstdrucken' oder 'Word macht's', würde ich gerne letzteres nehmen, aber das hakt letztlich doch noch. Vllt. kann mir da jmd. helfen?
Ich versuche über einen Wordtext, der als Vorlage dient, Rechnungen zu generieren. Im Prinzip klappt das, aber es gibt ein paar Dinge, die ich gerne verbessern möchte bzw. die ich nicht verstehe.
1. es dauert ewig, bis das 'Vorlage'-Dokument bereit steht (bei 100 Rechnungen dauert der Vorgang ca. eine Stunde)
2. die Vorlage enthält 2 Seiten, wobei die zweite Seite die sog. Folgeseite ist, d.h. ab da gibt es z.B. einen Seitenzähler im Dokumenten-Fuß. Der Cursor geht auch nicht auf die zweite Seite, d.h. Leerzeichen, Entercode usw. wurden gelöscht. Dennoch hat jede Rechnung hinterher statt zwei vier Seiten, wobei die Seiten drei und vier leer sind (nur Kopf und Fuß)
3. Gibt es eine Möglichkeit, Word anzuweisen, die zweite Seite nur dann mitzuspeichern, wenn sie auch befüllt wurde? Da ich die Tabelle 2 beliebig groß werden lasse, obliegt es ja Word für neue Seiten zu sorgen
4. Wenn etwas schief läuft, ist die Vorlage verändert und gespeichert! Wie geht das denn?
5. Irgendwie sind die Kopien alle 'geöffnet', d.h. es gibt dann '~$'-Dateien. Vermutlich muss ich die Vorlage vor dem Speichern schließen?!?
Ich versuche über einen Wordtext, der als Vorlage dient, Rechnungen zu generieren. Im Prinzip klappt das, aber es gibt ein paar Dinge, die ich gerne verbessern möchte bzw. die ich nicht verstehe.
1. es dauert ewig, bis das 'Vorlage'-Dokument bereit steht (bei 100 Rechnungen dauert der Vorgang ca. eine Stunde)
2. die Vorlage enthält 2 Seiten, wobei die zweite Seite die sog. Folgeseite ist, d.h. ab da gibt es z.B. einen Seitenzähler im Dokumenten-Fuß. Der Cursor geht auch nicht auf die zweite Seite, d.h. Leerzeichen, Entercode usw. wurden gelöscht. Dennoch hat jede Rechnung hinterher statt zwei vier Seiten, wobei die Seiten drei und vier leer sind (nur Kopf und Fuß)
3. Gibt es eine Möglichkeit, Word anzuweisen, die zweite Seite nur dann mitzuspeichern, wenn sie auch befüllt wurde? Da ich die Tabelle 2 beliebig groß werden lasse, obliegt es ja Word für neue Seiten zu sorgen
4. Wenn etwas schief läuft, ist die Vorlage verändert und gespeichert! Wie geht das denn?
5. Irgendwie sind die Kopien alle 'geöffnet', d.h. es gibt dann '~$'-Dateien. Vermutlich muss ich die Vorlage vor dem Speichern schließen?!?
VB.NET-Quellcode
- Private Sub WordTest()
- Dim wd As New Microsoft.Office.Interop.Word.Application
- Dim docVorlage As Microsoft.Office.Interop.Word.Document
- Dim ind1 As Integer
- Dim ind2 As Integer
- '
- wd.Visible = False
- 'Mache fünf Dokumente
- For ind2 = 1 To 5
- docVorlage = wd.Documents.Open("C:\Formulare\INVOICE.DOCX")
- Dim doc As Microsoft.Office.Interop.Word.Document = docVorlage
- doc.Activate()
- Try
- doc.Bookmarks("DELIVERY_ADDRESS").Range.Text = "Herrn" & vbCrLf & "Emil Schlawiner" & vbCrLf & "Lerchenweg 3" & vbCrLf & vbCrLf & "40000 Düsseldorf"
- 'Tabelle 1 oben rechts
- Dim Tw As Microsoft.Office.Interop.Word.Table = doc.Tables(1)
- Tw.Cell(1, 1).Range.Text = "Ust-Id"
- Tw.Cell(1, 2).Range.Text = "DE XXX XXX XXX"
- '
- Tw.Cell(3, 1).Range.Text = "Bei Zahlung angeben:"
- 'Funzt net
- Tw.Cell(3, 1).Range.Font.Bold = True
- '
- Tw.Cell(4, 1).Range.Text = "Rechnungs-Nr."
- Tw.Cell(4, 2).Range.Text = "123456789"
- Tw.Cell(5, 1).Range.Text = "Datum"
- Tw.Cell(5, 2).Range.Text = "12.12.2021"
- '
- doc.Bookmarks("TYPE_LABEL").Range.Text = "RECHNUNG"
- '
- 'Jetzt Positionen in zweite Tabelle eintragen
- Dim Tw2 As Microsoft.Office.Interop.Word.Table = doc.Tables(2)
- Dim Tr2 As Microsoft.Office.Interop.Word.Row
- '
- Tw2.Cell(1, 1).Range.Text = "Artikel"
- Tw2.Cell(1, 2).Range.Text = "Bezeichnung"
- Tw2.Cell(1, 3).Range.Text = "Menge"
- Tw2.Cell(1, 4).Range.Text = "Preis"
- Tw2.Cell(1, 6).Range.Text = "Rabatt"
- 'Fülle Tabelle 2 mit 16 Zeilen, genug, um in die Folgeseite hineinzureichen
- For ind1 = 0 To 15
- Tr2 = Tw2.Rows.Add()
- ' Jetzt die Zellen eintragen
- Tr2.Cells(1).Range.Text = "123456789"
- Tr2.Cells(2).Range.Text = "Sehr langer Beschreibungstext." & vbCrLf & "Autowrap in Word eingestellt, Enter können aber auch vorkommen"
- Tr2.Cells(3).Range.Text = "2,0"
- Tr2.Cells(4).Range.Text = "200,00"
- Tr2.Cells(5).Range.Text = "400,00"
- Tr2.Cells(6).Range.Text = "10"
- 'Tr2.Cells(7).Range.Text = "360,00"
- Next
- doc.SaveAs("c:\temp\wdtest\invoice-neu" & ind2 & ".docx")
- Catch ex As Exception
- MessageBox.Show(ex.ToString)
- docVorlage = Nothing
- Exit For
- End Try
- docVorlage = Nothing
- Next ip2
- wd = Nothing
- End Sub