Laden...

Via C# Excel-Dateien erstellen und in diese Datei hineinschreiben

Erstellt von MDH vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.947 Views
M
MDH Themenstarter:in
11 Beiträge seit 2016
vor 7 Jahren
Via C# Excel-Dateien erstellen und in diese Datei hineinschreiben

Hallo liebes Forum,

vor kurzem hab ich ein kleines C#-Projekt gestartet, hier generiere ich per Enter-Taste eine in Abhängigkeit des Textes einer anderen im Designer generierten TextBox, TextBoxen und will von den Im Programmcode generierten TextBox, den Text in eine Excel Datei reinschreiben, wenn ich allerdings dies in den Programmcode schreibe, zeigt er mir einen Fehler an:
Die TextBox heißt in dem Fall TextName0.> Fehlermeldung:

The Name 'TextName0' does not exist in the current context.

Weiß jemand wie ich dies fixe.

Wäre über eine hilfreiche Antwort froh.

H
523 Beiträge seit 2008
vor 7 Jahren

Bestimmt, wenn Du uns mit etwas Quellcode versorgst 😉

M
MDH Themenstarter:in
11 Beiträge seit 2016
vor 7 Jahren
int anzahl = Convert.ToInt16(Anzahl.Text);
int anzahlArbeiten = Convert.ToInt16(AnzahlArbeiten.Text);

Excel.Application excelDatei = new Excel.Application();
excelDatei.Visible = true;
excelDatei.WindowState = Excel.XlWindowState.xlNormal;

Excel.Workbook excelWorkbook = excelDatei.Workbooks.Add();
Excel.Worksheet excelWorksheet = excelWorkbook.Worksheets["Klasse"];

excelWorksheet.Cells[1, 1] = "Name";

for (int i = 0; i < anzahl; i++)
{
    excelWorksheet.Cells[i + 2, 1] = TextName0.Text;
}

excelWorkbook.SaveAs("");
excelWorkbook.Close();
excelDatei.Quit();

Hier wird die Excel Datei erstell.

int y1 = 102;
for (int i = 0; i < anzahl; i++)
{
       const int x1 = 16;

       TextBox TextName = new TextBox();
       TextName.Location = new Point(
           x1, y1);
       TextName.Visible = true;
       this.Controls.Add(TextName);
       TextName.Name = "TextName" + i;

       y1 += 30;
}

Hier generiere ich die TextBoxen.
H
523 Beiträge seit 2008
vor 7 Jahren

Bei dynamisch generierten Controls kannst Du mittels des Namens auf das generierte Control innerhalb der Controls-Collection zugreifen:


for (int i = 0; i < anzahl; i++)
{
excelWorksheet.Cells[i + 2, 1] = this.Controls[TextName0.Name];
}

Siehe auch Control.ControlCollection.Item-Eigenschaft: (String)

D
985 Beiträge seit 2014
vor 7 Jahren

Wenn er auf TextName0.Name zugreifen könnte, dann könnte er auch direkt TextName0.Text verwenden 😁

Grundsätzlich frage ich mich aber, warum x TextBoxen erstellen, die alle untereinander stehen sollen - also so wie in Excel - dann wäre ein Grid mit einer Spalte irgendwie passender.

H
523 Beiträge seit 2008
vor 7 Jahren

Stimmt natürlich, richtig wäre es dann so:


for (int i = 0; i < anzahl; i++)
{
TextBox tb = (TextBox)this.Controls["TextName0"];
excelWorksheet.Cells[i + 2, 1] = tb.Text;
}

M
MDH Themenstarter:in
11 Beiträge seit 2016
vor 7 Jahren

Heißt das, dass ich eine neue je nachdem unsichtbare TextBox erstelle, die die alte sozusagen ersetzen soll?

M
MDH Themenstarter:in
11 Beiträge seit 2016
vor 7 Jahren

Also es funktioniert jetzt alles so wie es sein sollte, bloß hab ich jetzt das Problem, dass ich beim Testen den Fehler habe, dass der Pfad: C:\Program Files(x86)\ Microsoft SDKs\Windows\v7.0A\bin\signtool.exe nicht verfügbar ist. Ich bin diesem Pfad gefolgt und es war nicht da. Dieser Fehler kommt sowohl beim debuggen als auch beim Publish(auf die Festplatte, habe beides mal ausprobiert, keine Ahnung ob es intelligent ist oder nicht).

H
523 Beiträge seit 2008
vor 7 Jahren

Hast Du schonmal google bemüht um herauszufinden warum signtool.exe bei Dir nicht vorhanden ist? Der allererste Treffer sieht recht vielversprechend aus.