Hallo,
ich möchte ein Word-Dokument bearbeiten in C# (Etiketten Ausdruck) und da muss ich die "Hausnummer 15" ersetzen mit der Eingabe vom textbox.
Im Word ist die "Hausnummer 15" aber mit einem Styleref hinterlegt und die anderen Etiketten sollten dann automatisch die Hausnummer 15 übernehmen. Das funktioniert ja aktuell wenn ich es im Word bearbeiten möchte.
Jetzt möchte ich aber eine GUI Basteln, wo eine Start- und Endnummer gibt und diese dann fortlaufend verändert und diese dann ausgedruckt wird. zB 16-18
zB Hausnummer 16 = 10 Seiten
Hausnummer 17 = 10 Seiten
Hausnummer 18 = 10 Seiten
Diese soll er dann zum Drucker senden.
Aktuell findet er die "Hausnummer 15" und ersetzt sie aber mit "2". Zwar ersetzt er alle anderen Etiketten, was ja richtig ist.
Die Variabel replaceText übernimmt den Wert Hausnummer 16, nur wird diese im Word Dokument nicht übernommen und es erscheint eine 2 in den Etiketten.
Wo passiert hier der fehler?
Im weiteren hab ich noch eine "Feldfunktion" im Word, wo ein Kalender hinterlegt wird und ich wähle dort das Wunschdatum aus und die restlichen Etiketten werden auf das Wunschdatum geändert, wenn ich es drucken möchte.
Diese möchte ich auch gerne in der GUI integrieren und er soll das Datum dann ändern
ich möchte ein Word-Dokument bearbeiten in C# (Etiketten Ausdruck) und da muss ich die "Hausnummer 15" ersetzen mit der Eingabe vom textbox.
Im Word ist die "Hausnummer 15" aber mit einem Styleref hinterlegt und die anderen Etiketten sollten dann automatisch die Hausnummer 15 übernehmen. Das funktioniert ja aktuell wenn ich es im Word bearbeiten möchte.
Jetzt möchte ich aber eine GUI Basteln, wo eine Start- und Endnummer gibt und diese dann fortlaufend verändert und diese dann ausgedruckt wird. zB 16-18
zB Hausnummer 16 = 10 Seiten
Hausnummer 17 = 10 Seiten
Hausnummer 18 = 10 Seiten
Diese soll er dann zum Drucker senden.
Code:
using Word = Microsoft.Office.Interop.Word;
private void btnDrucken_Click(object sender, EventArgs e)
{
string filePath = @"C:\Users\Ausdruck.docx";
string searchString = "Hausnummer 15";
string replaceString = txtbxStart.Text;
ReplaceTextInWordDocument(filePath, searchString, replaceString);
}
public static void ReplaceTextInWordDocument(string filePath, string searchText, string replaceText)
{
Word.Application wordApp = null;
Word.Document doc = null;
try
{
// 1. Word Anwendung starten
wordApp = new Word.Application();
wordApp.Visible = false; // Optional: Anwendungsfenster nicht anzeigen
// 2. Dokument öffnen
object file = filePath;
object nul = Type.Missing;
doc = wordApp.Documents.Open(ref file, ref nul, ref nul,
ref nul, ref nul, ref nul, ref nul, ref nul,
ref nul, ref nul, ref nul, ref nul, ref nul,
ref nul, ref nul, ref nul);
// 3. Suchen und Ersetzen
Word.Find findObject = wordApp.Selection.Find;
findObject.ClearFormatting();
findObject.Text = searchText;
findObject.Replacement.ClearFormatting();
findObject.Replacement.Text = replaceText;
object replaceAll = Word.WdReplace.wdReplaceAll;
findObject.Execute(ref nul, ref nul, ref nul, ref nul, ref nul,
ref nul, ref nul, ref nul, ref nul, ref replaceAll,
ref nul, ref nul, ref nul, ref nul, ref nul);
// 4. Dokument speichern und schließen
object saveChanges = Word.WdSaveOptions.wdSaveChanges;
doc.Close(ref saveChanges, ref nul, ref nul);
wordApp.Quit(ref saveChanges, ref nul, ref nul);
MessageBox.Show("Erleidgt");
}
catch (Exception ex)
{
MessageBox.Show("Fehler");
//Console.WriteLine($"Fehler: {ex.Message}");
}
finally
{
// Ressourcen freigeben
if (doc != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
doc = null;
}
if (wordApp != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp);
wordApp = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
}
Aktuell findet er die "Hausnummer 15" und ersetzt sie aber mit "2". Zwar ersetzt er alle anderen Etiketten, was ja richtig ist.
Die Variabel replaceText übernimmt den Wert Hausnummer 16, nur wird diese im Word Dokument nicht übernommen und es erscheint eine 2 in den Etiketten.
Wo passiert hier der fehler?
Im weiteren hab ich noch eine "Feldfunktion" im Word, wo ein Kalender hinterlegt wird und ich wähle dort das Wunschdatum aus und die restlichen Etiketten werden auf das Wunschdatum geändert, wenn ich es drucken möchte.
Diese möchte ich auch gerne in der GUI integrieren und er soll das Datum dann ändern