| 

.NET C# Java Javascript Exception

5
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!
News:
15.11.2013
Helmut V. 41 2
1 Antwort
2
Hallo Helmut
Leider ist mein Code in C#.

Zuerst Microsoft.Word in den Verweisen beifügen.

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.

Ich hoffe das kleine Beispiel hilft dir weiter.

Gruss Alex
16.11.2013
Maendler 214 1 7
Sorry, ich habe beim kopeiren ein Fehler gemacht.

Die Zeile _wrdDoc = _wrdApp.Documents.Open(_docPat, missing);

muss so ausehen:
_wrdDoc = _wrdApp.Documents.Open("DeinDokumnnt", missing);
Maendler 16.11.2013
1
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?
Helmut V. 18.11.2013
Ich habe mal ein StrinBulder mit 500 Mio zeichen initialisiert. Das wird wohl für deine Ansprüche genügen.
Maendler 18.11.2013

Stelle deine .net-Frage jetzt!