Entwickler-Ecke
WinForms - C# - Formel in Zelle schreiben
ordu52 - Do 12.07.18 08:27
Titel: C# - Formel in Zelle schreiben
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| Excel.Application objExcel = new Excel.Application(); objExcel.Visible = true; Excel.Workbook objWorkbook = objExcel.Workbooks.Open(Pfad); Excel.Worksheet objWorksheet = objWorkbook.Worksheets["Tabelle1"]; Excel.Range objCell;
int intLetzteSpalte = objWorksheet.UsedRange.Cells.Columns.Count; intLetzteSpalte++;
int i = 2; objWorksheet.Cells[1, intLetzteSpalte] = "Betrag"; objCell = objWorksheet.Cells[i, 1]; while (objCell.Value != null) { objCell = objWorksheet.Cells[i, intLetzteSpalte]; [b][color=red]objCell.Formula = "=WENN(F2=0;10;20)";[/color][/b] i++; objCell = objWorksheet.Cells[i, 1]; }
objExcel.DisplayAlerts = false; objWorkbook.SaveAs("Pfad", CreateBackup: false); objExcel.DisplayAlerts = true; objWorkbook.Close(); objExcel.Quit(); MessageBox.Show("Vorgang wurde erfolgreich durchgeführt."); |
Hallo zusammen,
ich habe wieder mal eine Frage, wo ich leider nicht weiterkomme und auch dazu nichts im Netz gefunden habe. Ich programmiere gerade ein Programm, welches eine bereits vorhandene Excel-Arbeitsmappe öffnet und danach Formel in die Zellen schreibt.
Leider bekomme ich immer folgende Fehlermeldung, wenn ich die Zeile
objCell.Formula = "=WENN(F2=0;10;20)" schreibe:
Zitat: |
FM: System.Runtime.InteropServices.COMException: "Ausnahme von HRESULT: 0x800A03EC" |
Wenn ich aber das
"=WENN..." ersetze durch
"Test" funktioniert das Programm und läuft erfolgreich durch.
Kann mir bitte vielleicht jemand helfen?
Moderiert von
Th69: Code- durch C#-Tags ersetzt
Moderiert von
Th69: C#-Tags hinzugefügt
Moderiert von
Th69: Quote-Tags hinzugefügt
doublecross - Do 12.07.18 09:36
Hallo,
ich muss gestehen, ich habe so etwas nie gemacht und deshalb rate ich auch nur ins Blaue. Aber eine Egenschaft die ich bei Tabellenkalkulationen schon immer gruselig fand, ist das Funktionen übersetzt werden. Also dass die Funktion "WENN" und nicht "IF" heißt. Ich kann mir aber vorstellen, dass dise Übersetzung nicht greift, wenn du dass ganze per Schnittstelle bedienst, denn woher soll dein Programm wissen, dass es immer mit einem deutschen, französischen oder was weiß ich etwas Excel redet.
Daher würde ich drauf Tippen, dass du die Excel Funktion international, sprich englisch benennen musst. Als ersten Versuch würde ich also das "WENN" durch "IF" ersetzen und gucken was passiert.
ordu52 - Do 12.07.18 10:28
Hallo doublecross,
vielen Dank für deine Antwort. Allerdings hatte ich das bereits ausprobiert. Leider ohne Erfolg.
- Wenn ich objCell.Formula = "=IF(F2=19;10;20)"; schreibe, kommt eine FM (oben).
- Wenn ich objCell.FormulaLocal = "=IF(F2=19;10;20)"; schreibe, läuft das Programm erfolgreich durch, aber dann wird die While-Schleife nicht betrachtet und es werden alle Zellen in der Spalte mit der Formel befüllt.
- Wemn ich objCell.Formula = "Test"; schreibe, funktioniert das Programm ohne Probleme und auch die While-Schleife wird beachtet.
Ich denke auch, dass irgendetwas an der Formel nicht stimmt.
doublecross - Do 12.07.18 12:50
Ok, noch eine wilde Idee: Du weißt das ganze ja auf "Formular" zu, es sollte also klar sein, dass es sich um eine Formel handelt. Muss der String dann noch mit einem = beginnen?
Edit:
Was mit noch auffällt, auch wenn es wahrscheinlich nciht zu dem Problem führt: In deiner Schleife:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| while (objCell.Value != null) { objCell = objWorksheet.Cells[i, intLetzteSpalte]; objCell.Formula = "=WENN(F2=0;10;20)"; i++; objCell = objWorksheet.Cells[i, 1]; } |
weißt in der ersten und der letzten Zeile einen Wert auf objCell zu. Das scheint mir wenig effektiv, da der Wert den du in der letzten Zeile zuweist, im nächsten durchlauf wieder überschrieben wird.
Edit2: In allen
Beispielen [
https://www.add-in-express.com/creating-addins-blog/2013/10/15/excel-cell-values-formulas-formatting-csharp/#Setting_Excel_cell], die ich finde wird über range.Formular gearbeitet, nicht über cell.Formular. Kann es sein das das Cell Objekt hier zickig ist?
ordu52 - Mo 16.07.18 10:37
Hallo Ralf,
vielen Dank für deine Antwort.
Das Programm bricht sofort beimn ersten Mal zusammen.
Hast du vielleicht eine Idee?
ordu52 - Mo 16.07.18 15:02
Hallo Th69 super vielen Dank, das hat funktioniert. :)
Allerdings habe ich nur noch ein kleines Problem.
Aktuell sieht die Formel so aus und wenn ich Sie ausführe steht das richtige in den Zellen der Spalte.
C#-Quelltext
1:
| objCellXLSX.Formula = "=WENN(F" + i + "<0,E" + i + ",E" + i + "+(E" + i + "*F" + i + "/100))"; |
Mein Problem ist nur, dass wenn das Programm durch ist und ich Excel öffne. Steht in den Zellen der geschriebenen Spalte #Name?.
Erst wenn ich manuell in die Zelle klicke und auf Enter drücke, werden die berechneten Werte angezeigt in der Spalte.
Kannst du mir hierbei vielleicht helfen?
Moderiert von
Th69: C#-Tags hinzugefügt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!