Zum Inhalt springen

C# Datenbank in Word schreiben


sTumPf84

Empfohlene Beiträge

Hallo,

ich möchte ein paar Daten aus einer Datenbank auslesen und in ein Word-Dokument schreiben, das funktioniert auch bestens, jetz muss ich aber die Schriftart aller geraden und ungeraden Zeilen änden, d.h. oben soll ein Barcode stehen, und darunter die lesbare Bezeichnung(z.B in Ariel). Das ganze soll dann so angeordnet werden, dass ich das Dokument direkt ausdrucke (auf ein Label). Wie gesagt, das schreiben des Textes ist nicht das Problem, ich schaff es nicht bestimmte Zeilen direkt anzusprechen und zu verändern.

Hier mein Code:

Microsoft.Office.Interop.Word.ApplicationClass oMsWord = new Microsoft.Office.Interop.Word.ApplicationClass();

Microsoft.Office.Interop.Word.Documents oMsDocs = oMsWord.Documents;

object oMissingValue = System.Reflection.Missing.Value;

object oTemplateName = @"C:\Dokumente und Einstellungen\mslenk_022\Desktop\label.doc";

object oNewTemplate = false;

object oDocType = 0;

object oMakeDocVisible = true;

Microsoft.Office.Interop.Word._Document oNewMsWordDoc;

oNewMsWordDoc = oMsDocs.Add(ref oMissingValue, ref oNewTemplate, ref oDocType, ref oMakeDocVisible);

if (oNewMsWordDoc.ProtectionType != Microsoft.Office.Interop.Word.WdProtectionType.wdNoProtection)

oNewMsWordDoc.Unprotect(ref oMissingValue);

object oBmkCounty = "0";

string[][] Labels = createLabels();

object oBookmark, oRange;

for (int i = 0; i < Labels[0].Length - 3; i+=3)

{

oNewMsWordDoc.Bookmarks.Add("A" + i.ToString(), ref oMissingValue);

oBookmark = "A" + i.ToString();

oNewMsWordDoc.Bookmarks.get_Item(ref oBookmark).Range.Font.Name = "IDAutomationHC39M";

oNewMsWordDoc.Bookmarks.get_Item(ref oBookmark).Range.Text =

" " + Labels[0] + "\t" + Labels[0][i+1] + "\t" + Labels[0][i+2] + "\r\n";

oNewMsWordDoc.Bookmarks.Add("B" + i.ToString(), ref oMissingValue);

oBookmark = "B" + i.ToString();

oNewMsWordDoc.Bookmarks.get_Item(ref oBookmark).Range.Font.Name = "Arial";

oNewMsWordDoc.Bookmarks.get_Item(ref oBookmark).Range.Text =

"\t" + Labels[1] + "\t\t " + Labels[1][i + 1] + "\t\t " + Labels[1] + "\r\n";

}

object oFileFormat = WdSaveFormat.wdFormatDocument;

oNewMsWordDoc.SaveAs(ref oTemplateName, ref oFileFormat, ref oMissingValue, ref oMissingValue,

ref oMissingValue, ref oMissingValue, ref oMissingValue, ref oMissingValue, ref oMissingValue,

ref oMissingValue, ref oMissingValue, ref oMissingValue, ref oMissingValue, ref oMissingValue,

ref oMissingValue, ref oMissingValue);

object oSaveChanges = false;

oNewMsWordDoc.Close(ref oSaveChanges, ref oMissingValue, ref oMissingValue);

Marshal.ReleaseComObject(oNewMsWordDoc);

Marshal.ReleaseComObject(oMsDocs);

oMsWord.Quit(ref oSaveChanges, ref oMissingValue, ref oMissingValue);

Marshal.ReleaseComObject(oMsWord);

oMsWord = null;

grobe Erklärung: erst sollen die drei Barcodes in das Word-Dokument geschrieben werden, und danach die Bezeichnung darunter, und das solange bis alle Zeilen der Datenbanktabelle in das Dokument geschrieben wurden.

Danke im voraus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nur um eventuelle Missverständnisse auszuschliessen, ich brauch eigentlich nur eine Information wie ich den Rangeparameter für Bookmarks erstelle.

Ich weiß wieviele ASCII-Zeichen die Zeile hat, die ich in Word einfügen will, kann ich damit den Range-Parameter berechnen und wenn ja wie?

habe mir das folgendermaßen vorgestellt:

oNewMsWordDoc.Bookmark.Add(Name, ref oRange);

oBookmark = Name;

oNewMsWordDoc.Bookmark.get_Item(ref oBookmark).Range.Text = Text;

oNewMsWordDoc.Bookmark.get_Item(ref oBookmark).Range.Font.Name = "Ariel";

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hat sich erledigt, habs anders hinbekommen.

Falls es jemanden interressiert, hier der Code:

oNewMsWordDocument.Application.Selection.Font.Name = "IDAutomationHC39M";

oNewMsWordDocument.Application.Selection.TypeText(Barcode);

oNewMsWordDocument.Application.Selection.Font.Name = "Arial";

oNewMsWordDocument.Application.Selection.TypeText(Bezeichnung);

Allerdings brauch ich für die Ausführung sehr lange und die Datenbank wird noch wachsen.

Wenn also jemand eine Ahnung hat wie das ganze schneller funktioniert, bzw ich erst den Text als ganzes ins Dokument schreiben und danach bearbeiten kann, wäre ich für eine Info sehr dankbar.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo

ich hatte vor einiger Zeit ähnliches Problem habe es über eine Tabelle gelöst und in der Datenbank steht RTF- Text (Richtextbox)

Dim stText as String

stText = getFeldInhalt

stText = stText.Replace("`", "'")

stText = DataFormats.Rtf

.Item(Index1).Rows.Item(Index2).Cells.Item(Index3).Range.Text = stText

oder was auch geht

Dim stText as String

stText = getFeldInhalt

stText = stText.Replace("`", "'")

stText = DataFormats.Rtf

Clipboard.SetText(stText, TextDataFormat.Rtf)

-> Markiere eine Zeile in Word, da weiß ich leider den Code grad nicht

wdApplication.Selection.Paste()

Was jetzt aber schneller bzw. langsamer ist weiß ich nicht. Übrigens du hast scheinbar den selben Familiennamen wie ich *G

Gruß Hans-Jörg Stumpf

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Monate später...
... Wenn also jemand eine Ahnung hat wie das ganze schneller funktioniert, bzw ich erst den Text als ganzes ins Dokument schreiben und danach bearbeiten kann, wäre ich für eine Info sehr dankbar.

Ist doch aber genau die Idee. Im vordergrund lässt er was weiß ich laufen und im Hintergrund ruft er die DB ab und befüllt das Doc und wenn dies geschehen ist aktiviert er Word.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist doch aber genau die Idee. Im vordergrund lässt er was weiß ich laufen und im Hintergrund ruft er die DB ab und befüllt das Doc und wenn dies geschehen ist aktiviert er Word.

Warum nicht gleich asynchron?!

Word anzeigen.

Paar Zeilen aus der DB lesen.

In Word schreiben.

Paar Zeilen aus der DB lesen.

In Word schreiben.

Paar Zeilen aus der DB lesen.

In Word schreiben.

usw.

Der Pirat meinte sicher, dass die Geschwindigkeit konstant bleibt (dauert immer noch genauso lange [wenn nicht sogar länger]), nur das Programm wird nicht blockiert...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...