Ich habe einige Word-Dokumente mit ein oder auch mehreren Word-Tabellen erhalten. Die Inhalte muss ich in Datendateien exportieren, die in .NET-Programmen weiter zu verarbeiten sind. Beim Export dürfen keine Infos verloren gehen (außer die Textelemente, die nicht zu den Tabellen gehören). Ich habe an das CSV-Format (Comma Separated Values) gedacht, bin mir aber nicht sicher, ob das wirklich sinnvoll ist. Die Zellinhalte sind z.T. recht groß. In den Zellen sind zum Teil Texte, zum Teil numerische Werte enthalten. Die Tabellen selbst variieren im Aufbau. Ein Umkopieren in spezielle Datenbanken soll zudem nicht erfolgen. Zu den Tabellen müssen auch die Spaltenbeschriftungen und ggfs. die Tabellenmunterschriften (diese nutzen aber kein bestimmtes Format) mit übernommen werden. Die Umsetzung soll mit VBA oder auch VSTO erfolgen. Wer hat eine Idee für eine schnelle Lösung? Danke im Voraus!
Dann 'using wrd=Microsoft.Office.Interop.Word;" wrd wird als Präfix für Word genommen;
public void ReadTable() { wrd.Application _wrdApp = new wrd.Application();
_wrdApp.Visible = true;
object missing = System.Reflection.Missing.Value;
_wrdDoc = _wrdApp.Documents.Open("DeinDokument", missing); var sb = new StringBuilder();
if (_wrdDoc.Tables.Count > 0) { var rCount = _wrdDoc.Tables[1].Rows.Count; var cCount = _wrdDoc.Tables[1].Columns.Count;
for (int i = 1; i < rCount +1; i++) { for (int y = 1; y < cCount +1; y++) { sb.Append(_wrdDoc.Tables[1].Cell(i,y).Range.Text + ";"); } } sb.Append("/"); }
var result = sb.ToString();
//_wrdDoc.Close(SaveChanges:false); }
So geht es ohne, dass die Columns und Rows festgelegt sind. Ich denke den String kannst du selber händeln. Sollten mehr als eine Tabelle im Dokument sein musst du noch eine Forschlaufe für die Tabellen machen. Bitte bachte das in Word die Indexirung nicht mit 0 sondern mit 1 beginnt.
Das sieht schon ganz gut aus! bNur eine Frage habe ich noch: Ist die Zeichenkettenlänge beim StringBuilder-Objekt auf eine bestimmte maximale Länge beschränkt?
Die Zeile _wrdDoc = _wrdApp.Documents.Open(_docPat, missing);
muss so ausehen:
_wrdDoc = _wrdApp.Documents.Open("DeinDokumnnt", missing);