attix22
Goto Top

C Sharp Einfügen von Daten in Excel schlägt fehl

Hallo,

ich stehe vor einem kleinen Problem.

Ich habe ein kleines Programm, dass mir Daten aus einer MSSQL Datenbank holt und diese dann in ein bestehendes .XLSX File speichert.
Die Daten müssen in einem bestimmten Zellbereich gespeichert werden.

Allerdings bekomme ich hier immer eine Exception "Cannot expand named range.".

Hier ein INSERT Statment wie es mein Code produziert:
INSERT INTO [Testberechnung Steigung_v1$A5:J5] VALUES(5507738,20090102,0.5,0.5,0.4501,0.451,98404,'EGHT','8x8 Inc','NASDAQ');

Die Tabellenbezeichnung ist korrekt, sowie der ConnectionString.
Was ich zu der Fehlermeldung bis jetzt in Erfahrung gebracht habe hat mir nicht weitergeholfen.
Anscheinend können Zellbezüge oder in diesem Bereich hinterlegte Formeln diesen Fehler auslösen.
Allerdings klappt das Einfügen auch bei einem neu erstellten Excel File das quasi jungfäulich ist nicht.
Die bisher verwendete Tabelle hat dort auch keine Funktionen oder ähnliches hinterlegt.

Kennt jemand diese Problematik und weiß wie man diese umgeht?

Gruß
Attix22

PS:
Hier die Funktion die für das Einfügen der Daten zuständig ist: (Das Insert Statment von oben habe ich beim Debuggen dem String insertComplete entnommen)

        public static bool arrayToExcel(string arrayData, int Rowcount)
        {
            string connectionString = BuidExcelConnectionString(GlobalVarHelper.GlobalPath);
            // Neue OLEDB-Verbindung erzeugen
            OleDbConnection connection = new OleDbConnection(connectionString);

            //Aufbau des INSERT Statement
            string Query = "INSERT INTO [" + GlobalVarHelper.GlobalWorksheet + GlobalVarHelper.GlobalStartPoint + ":" + GlobalVarHelper.GlobalEndPoint + "]";  
            
            //Auslesen und vorbereiten der einzufügenden Werte
            string values = "VALUES(";  
            int valuecounter = 1;
            foreach (string s in arrayData)
            {
                //Stringwerte
                if (valuecounter > 7)
                {
                    values += "'"+s+"'" + ",";  
                    valuecounter++;
                }
                //Numerische Werte
                else
	            {
                    string z = s.Replace(",", ".");  
                    values += ""+z+"" + ",";  
                    valuecounter++;
	            }
            }
            values = values.Remove(values.Length - 1);
            values += ");";  

            //Zusammenbau des kompletten INSERT Strings
            string insertComplete = Query + " " + values;  

            //Ausführen des INSERT Statements
            try
            {
                connection.Open();
                OleDbCommand command = new OleDbCommand(insertComplete, connection);
                command.ExecuteNonQuery();
                connection.Close();
                GlobalVarHelper.GlobalStartPoint = GlobalVarHelper.GlobalStartPoint.Replace("$", "");  
                return true;
            }
            catch (Exception)
            {
                GlobalVarHelper.GlobalStartPoint = GlobalVarHelper.GlobalStartPoint.Replace("$", "");  
                return false;
                throw;
            }
        }

Content-ID: 179070

Url: https://administrator.de/contentid/179070

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

vorstieg
vorstieg 17.01.2012 um 16:58:48 Uhr
Goto Top
Hi

probiers mal mit

[Testberechnung Steigung_v1$A$5:$J$5]

mfg
Biber
Biber 17.01.2012 um 19:27:44 Uhr
Goto Top
--- wieder gelöscht ---

(war Unsinn)

Grüße
Biber
dog
dog 17.01.2012 um 20:12:26 Uhr
Goto Top
Was spricht gegen Excel.Interop?
Damit erspart man sich das ganze SQL-Query-Bauen...
attix22
attix22 18.01.2012 um 08:28:27 Uhr
Goto Top
Hi,

also @vorstieg: Das brachte leider auch keinen Erfolg, im Gegenteil, mit mehr als einem Dollarzeichen im Tebellenbereich krieg ich die Meldung das der Bereich nicht zu finden ist.
@Biber: Auch wenn Sie nur kurz online Stand, ich habe deine Anmerkung mal umgesetzt, allerdings mit gleichem Fehler
@dog: Excel.Interop wäre eine absolute Notlösung, da das testweise sehr sehr langsam ist

Trotzdem vielen Dank für eure Tipps.
Sonst noch jemand Ideen?

Update:

Da ich inzwischen mit der Interop Lösung gescheitert bin (Auf dem Zielrechner ist kein Office installiert), habe ich aus einem konfusen Gedanken heraus mal eine Named Range angelegt, die den gewünschten Bereich umfasst.
Und siehe da, ich bekomme keinerlei Exceptions mehr, allerdings werden auch keine Daten in die Felder eingetragen.
Kurzum, Fehlermeldung weg, Problem besteht weiterhin.