Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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";

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.

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

  • 3 Monate später...

Hi,

ich weiß zwar nicht, ob das Thema noch aktuell ist, aber einen Geschwindigkeitsgewinn kann man mittels Backgroundworker realisieren.

Einfach mal Googlen oder hier MSDN Backgroundworker

Grüße Daniel

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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.