Excel.Interop: Autoformat aus bzw. Format=Text

Hallo,

ich steuere Excel über Com-Interop aus einer .Net-Applikation und füge Daten ein:

range.set_Value(Excel.XlRangeValueDataType.xlRangeValueDefault, val)
(val ist ein string, range ist eine Zelle im Excel-Sheet)

Eigentlich funkt alles wunderbar nur greift Excels Autoformat in die Daten ein wenn sie eine besondere Form haben und formatiert diese zB. als Datum.
zB. Eingabe „17.02“ wird zu „17.02.2004“.

Ich müsste also im Voraus das Format der Zelle bzw. des Bereiches oder ganzes Sheets oder Workbooks auf „nur Text“ stellen.
Wie das per GUI geht weiss ich - allerdings brauch ich das über Interop.

Workarounds mit „’“ bzw. " " vor den jeweiligen Wert stellen sind leider nicht praktikabel, da die Daten in der Excel-Datei vom User weiterverwendet werden müssen…

Hat jemand eine Idee?

~luki

Keine Ahnung, aber …

Workarounds mit „’“ bzw. " " vor den jeweiligen Wert stellen
sind leider nicht praktikabel, da die Daten in der Excel-Datei
vom User weiterverwendet werden müssen…

Hm, bist Du sicher? Also ich weiss, dass das „’“ vor einem Zellwert zumindest dann ignoriert wird, wenn ich den Zellwert mit VBA auslese. Gehe ich allerdings direkt in Excel in die Zelle rein, erscheint es natürlich.

Kristian

versteh nur das Haus wo die Bahnhofsuhr dranhängt
Hi Luki,
ausserhalb Excel kann ich da nicht helfen, aber würde mich sehr interessieren was du da machen willst.
Wie sieht denn das mit dem com.interop aus einer .net, kannste mal da einen beispielcode posten?
Und innerhalb dieses Codes rufst bzw sprichst excel an mit:
range.set_Value(Excel.XlRangeValueDataType.xlRangeValueDefault,val)
*hmmh* sagt mir nix.
Nützt dir es wenn ich dir sage wie du eine Exceldatei beim Start/Aufrufen, für alle Felder auf Text stellst beim Format?
Blick da grad nicht durch, mit net und interop.
Gruß
Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke für das Interesse.
Ich befürchte aber ich hab mein Problem schlecht erklärt.

@Kristian Zarse:
Das Problem ist dass ich am Ende das Excel-Sheet dem User präsentiere und der stellt weiss Gott was damit an. Also sollte der Zelleninhalt auf keinen Fall irgendwie kompromittiert werden…

@Reinhard:
du hast mein Problem sogar richtig verstanden: in der Tat möchte ich alle Zellen auf Text-Format stellen. Das schaff ich zwar von Hand in Excel aber nicht über Com-Interop.
Mittlerweile hab ichs übrigens gefunden: man stelle „NumberFormat“ der Zelle/des Bereichs auf „@“. Wenn man das fertige Excel-File dann betrachtet zeigt Excel als Format tatsächlich Text an.

Ich poste etwas Beispiel-Code falls es interessiert:

// create excel-application
Excel.Application excelApp = new Excel.Application();
// create a new workbook
Excel.Workbook excelWkB = excelApp.Workbooks.Add(System.Reflection.Missing.Value);
// add a sheet
excelWkB.Sheets.Add(System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
// delete all sheets except the 1st (usually a new Excel-Workbook has a few empty sheets)
while (excelWkB.Sheets.Count > 1)
((Excel.Worksheet) excelWkB.Sheets[2]).Delete();
// get the 1st sheet
Excel.Worksheet excelSht = (Excel.Worksheet) excelWkB.Sheets[1];

// get a range in excel
range = (Excel.Range) excelSht.get_Range(excelSht.Cells[1, 1], excelSht.Cells[1, 3]);
// format as text
range.NumberFormat = „@“;
// some data
string[] data = new string[3] {„CellA1“, „CellA2“, „CellA3“};
// set value of range
range.set_Value(Excel.XlRangeValueDataType.xlRangeValueDefault, data);
// show excel
excelApp.Visible = true;