Hallo!
Wende mich verzweifelt an diese Community um einen Fehler, der mich seit Tagen quält, zu lösen.
// Verbindungszeichenfolge erzeugen
string connectionString = BuildExcelConnectionString(fileName);
// Neue OLEDB-Verbindung erzeugen
connection = new OleDbConnection(connectionString);
connection.Open();
// SQL-Command
OleDbCommand oleDbCom = new OleDbCommand();
oleDbCom.Connection= connection;
oleDbCom.CommandText= "INSERT INTO [1$A:D] " + "([Art], [Code], [Summe von Zeit], [Summe von Brutto]) " + "VALUES (0, 'B024', 1.5, 107.145)";
oleDbCom.ExecuteNonQuery();
connection.Close()
Dies klappt auch problemlos, doch werden die Daten in die Excel-Tabelle nicht ordnungsgemäß formatiert. Jede Zelle erhält einen grünen Pfeil "Als Text gespeicherte Zahlen". Obwohl ich die Excel-Zellen vorher als Zahl formatiert habe.
Da ich aber mit den Daten in Excel später einmal rechnen werde, muss das Datenformat automatisch erkannt werden. Ein anderer Versuch, via DataSet (dort liegen die Daten ordnungsgemäß vor, z.B. als Dezimal und Doube, werden die beim Insert (selbst Parametergesteuert) nicht formatgerecht übernommen.
Wie bekomme ich Excel dazu, meine Daten als Zahl zu erkennen, bzw. wie gebe ich dem Insert-Query die Informationen mit, damit Excel sie erkennt.
Gruß
Martin
Hallo MartinK,
in folgendem KB-Artikel steht möglicherweise die Lösung: http://support.microsoft.com/kb/316934
Wenn Sie ADO.NET dazu verwenden, Datensätze in einer vorhandenen Arbeitsmappe hinzuzufügen oder zu aktualisieren, können Sie Zellen in der Arbeitsmappe formatieren, die für die neuen oder aktualisierten Datensätze verwendet wird. Wenn Sie einen vorhandenen Datensatz (eine Zeile) in einer Arbeitsmappe aktualisieren, wird die Zellenformatierung beibehalten. Wenn Sie einen neuen Datensatz (Zeile) in einer Arbeitsmappe einfügen, übernimmt der neue Datensatz die Formatierung der vorhergehenden Zeile.
Danke Rainbird für die schnelle Antwort,
zwischenzeitlich habe ich die Anwendung auf Interop umgestellt, verdammt langsam - jedoch volle Kontrolle.
Es gibt noch ein Frage, die sich aus der Arbeit mit Excel Interop ergibt. Ich erstell und fülle 10 Tabellenblätter ( 101, 102, 103 ...) in einer Exceldatei, eine davon (Sheet: 000) ist eine bereits vorhandene Übersicht, die via Links (=SUMME('101'!C$1:C$65536) auf die einzelnen Blätter verweist. Wollte das Excel die Verweise aktualisiert, nur klappt das nicht mit:
Excel._Worksheet oSheetsOV = (Excel._Worksheet)oWB.Sheets.get_Item("000");
oSheetsOV.Activate();
oSheetsOV.Application.AskToUpdateLinks = true;
Vielleicht kann mir da einer helfen.
Hast Du schon mal den Excel Makro-Recorder ausprobiert?