Laden...

[erledigt] Beliebige anzahl von zeichenketten in Zellen von Excel schreiben

Erstellt von schnubber vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.631 Views
S
schnubber Themenstarter:in
6 Beiträge seit 2012
vor 11 Jahren
[erledigt] Beliebige anzahl von zeichenketten in Zellen von Excel schreiben

Hallo Leute,
Habe mehr oder weniger selbst ein code gebastelt der auf einen klick auf einen Button eine excel datei öffnet und was reinschreibt.
Mein ziel ist es namen von dateien auszulesen und alle namen in zellen untereinander in excel einzutragen.
Das mit dem auslesen funktioniert ganz gut und die dateinamen kann ich mir per msgbox alle nacheinander ausgeben lassen.
und jetzt kommts:
Wenn ich sage : gib die variable in excel aus in dem bereich von A1 : C5 schreibt er mir in alle zellen immer nur den ersten dateinamen hin. So habe ich x- mal den selben namen in meiner generierten tabelle stehen.

Habe nachgedacht die namen an ein string array zu übergeben, doch das ist ja immer so eine sache weil ein array eine feste größe hat und es kann sein dass ich mehr dateien habe, dann komm es zu fehlern oder ich habe weniger dateien, da werden unnötig unbenutzte speicherplätze festgehalten.

Wie schaffe ich alle namen in irgendetwas zu speichern, was sich der anzahl der zeichenketten (dateinamen) automatisch anpasst? Sprich 18 plätze generiert wenn es 18 namen sind und 100 plätze generiert wenns 100 sind. In java nennt man das vector.
Habe was von List<t> und datatables gelesen doch das ist mir zu hoch um auf mein code anzuwenden.
Will alle dateinamen in spalte A ausgeben. Zeilenanzahl soll sich der menge der dateinamen automatisch anpassen. 1 Zeile pro dateiname. Ist sowas überhaupt möglich?
Mein code hier ist:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using Excel = Microsoft.Office.Interop.Excel;
using System.IO;

namespace array
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //Declare these two variables globally so you can access them from both       
        //Button1 and Button2.       

        private void button1_Click(object sender, System.EventArgs e)
        {
                    Excel.Application objApp;
        Excel._Workbook objBook;
            Excel.Workbooks objBooks;
            Excel.Sheets objSheets;
            Excel._Worksheet objSheet;
            Excel.Range range;

                // excel starten            
                objApp = new Excel.Application();
                objBooks = objApp.Workbooks;
                objBook = objBooks.Add(Missing.Value);
                objSheets = objBook.Worksheets;
                objSheet = (Excel._Worksheet)objSheets.get_Item(1);
                //Anfang definieren             
                range = objSheet.get_Range("A1", Missing.Value);
                range = range.get_Resize(20, 3);

                {
                    //array erzeugen.                
                    string[,] saRet = new string[20, 3];
                    //array füllen.                
                    for (long iRow = 0; iRow < 20; iRow++)
                    {
                        for (long iCol = 0; iCol < 3; iCol++)
                        {
//Pfad festlegen wo alle dateien sind
                            DirectoryInfo dirInfo = new DirectoryInfo(@"C:\Dokumente und Einstellungen\dp\Desktop\dateien");
//alles auslesen was jpg format hat
                            FileInfo[] files = dirInfo.GetFiles("*.jpg");
                            foreach (FileInfo fiOutput in files)
                            {
                                //dateinamen in der variablen speichern

                                saRet[iRow, iCol] = fiOutput.Name;                    
                                
                                //Inhalt setzen  
                                range.set_Value(Missing.Value, saRet);
                            }
                        }
                    }
                                
                   
                    
                    objApp.Cells[1, 1] = "Kunde";    // Zelle a1
                    objApp.Cells[1, 2 ] = "Kundennummer";   // Zelle b1
                    objApp.Cells[1, 3] = "Preis in €";    // Zelle c1
                }
                //Excel sichtbar machen             
                objApp.Visible = true;
                objApp.UserControl = true;
         }
     }
} 

6.862 Beiträge seit 2003
vor 11 Jahren

Hallo,

lies doch einfach erst die Dateinamen aus, und tu sie dann nach Excel. Wenn du sie erst einliest, hast du die Anzahl und musst nicht von festen Werten wie deinen 20 ausgehen.

Baka wa shinanakya naoranai.

Mein XING Profil.

S
schnubber Themenstarter:in
6 Beiträge seit 2012
vor 11 Jahren

lies doch einfach erst die Dateinamen aus, und tu sie dann nach Excel. Wenn du sie erst einliest, hast du die Anzahl und musst nicht von festen Werten wie deinen 20 ausgehen.

Ist das nicht egal an welcher stelle ich auslese? Wocher weis das array wie viel plätze es generieren muss? der code hier geht zwar doch er hat den fehler dass ich die namen irgendwie an den falschen array übergebe üder überhaupt falsch übergebe und somit immer der gleiche name in die zellen eingetragen wird. Könntest du mir das bitte villeicht etwas näher anhand des codes erklären/ erläutern was du genau meinst? Bin noch am lernen deswegen währe es nett. Danke voraus.

E
395 Beiträge seit 2007
vor 11 Jahren

warum schreibst du nicht zellen weise in die excel datei?
dafuer gibt es genug anleitungen.

MfG Paul

S
schnubber Themenstarter:in
6 Beiträge seit 2012
vor 11 Jahren

Wenn ich zelle für zelle beschreibe dann gilt ja für jede zelle in excel = 1 zeile quellcode, zumindest bei dem tutorial was ich mal gelesen habe. Da wurden jede zelle direkt angesprochen und dann was festgelegtes reingeschrieben. Oder ist das nicht das was du meinst? Gibts da einen sammelbegriff für diese vorgehensweise?

T
2.224 Beiträge seit 2008
vor 11 Jahren

Allein schon die Tatsache das dir List<T> und DataTables, die sogar beides sinnvolle Ansätze wären, für dich zu hoch sein sollen halte ich für Unsinn.

Lies dich lieber mal zu den Basics von C# ein und lernen erst einmal mit den Möglichkeiten umzugehen.
Dein Vorgehen erinnert an einen C Entwickler der plötzlich mit C# arbeiten muss.
List<T> wäre die Lösung für dein Array Problem.

Ein DataTable würde sogar noch einiges an Arbeiten abnehmen wenn du es richtig anstellst.
Informiere dich erst einmal über List<T> und DataTables und stelle dann bitte deine Fragen.

Wenn du die Themen verstanden hast sollte es eigentlich keine Fragen mehr geben.

Nachtrag

Wenn ich zelle für zelle beschreibe dann gilt ja für jede zelle in excel = 1 zeile quellcode, zumindest bei dem tutorial was ich mal gelesen habe. Da wurden jede zelle direkt angesprochen und dann was festgelegtes reingeschrieben. Oder ist das nicht das was du meinst? Gibts da einen sammelbegriff für diese vorgehensweise?

Keine Ahnung wo den das her hast, aber es ist Blödsinn.
Dafür gibt es Schleifen.
Auch dies gehört zu den Basics.

Du scheinst noch weniger Erfahrung zu haben als ich dachte.
Das macht es leider nur noch schlimmer.

Nachtrag 2:
Angesichts der Tatsache, dass du scheinbar keine wirkliche Ahnung hast und dein Quellcode nicht wirklich sauber ist, würde ich dir dringend empfehlen dir ein ordentliches C# Buch zu kaufen.

Ein Online Einstieg ist hiermit möglich:
http://openbook.galileocomputing.de/visual_csharp_2010/

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

S
schnubber Themenstarter:in
6 Beiträge seit 2012
vor 11 Jahren

Dass ich nicht viel ahnung habe ist richtig, Wollte halt als übung für die schule etwas basteln und kam nicht weiter. Ich bin gerade mal im 1. lehrjahr fachinformatiker ohne programmiervorkentnisse und da ich sonst niemand fragen kann hab ich halt hier gefragt. Wenn ich mir die tabellenbücher von c# angucke (im netz) gibts die entweder in eglisch oder ohne ausreichende erklärungen. Einfach nur minimalistisch beschrieben was es macht und da ich gerade angefangen habe zu lernen reicht mir das oft nicht. trotzdem danke für eure ideen.

1.820 Beiträge seit 2005
vor 11 Jahren

Hallo,

also List<T> scheint vielleicht erstmal etwas komplex zu sein, aber man kommt eigentlich sehr schnell damit zurecht.

Dass man für jede zu schreibende Zelle in Excel eine Zeile Quellcode benötigt, ist falsch. Man kann das mit Schleifen machen (entweder for oder foreach).

Und zum Schreiben in Excel (oder MS-Office-Dokumente allgemein) gibt es eine sehr schöne Komponente: NetOffice - MS Office in .NET.

Nobody is perfect. I'm sad, i'm not nobody 🙁