Laden...

Csv-Dateien in Excel-File eintragen

Erstellt von WMenzel vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.468 Views
W
WMenzel Themenstarter:in
28 Beiträge seit 2012
vor 8 Jahren
Csv-Dateien in Excel-File eintragen

Hallo, ich möchte gerne 3 .csv-Dateien in ein Excel.Workbook eintragen und zwar so, das jede der 3 Dateien ein einzelnes Worksheet belegt. Leider macht Excel jedes Mal ein neues Workbook auf. Kann mir bitte jemand mit einer Idee helfen? Ich kann neue Worksheets erzeugen, auch darauf zugreifen, Zellen beschreiben, aber bekomme die 3 Dateien nicht einzeln in die Worksheets.

 myExcelWorkbook = (Excel.Workbook)(myExcelApplication.Workbooks.Add(System.Reflection.Missing.Value));
         myExcelWorkSheet = (Excel.Worksheet)myExcelApplication.Worksheets.Add();
         myExcelWorkSheet = (Excel.Worksheet)myExcelApplication.Worksheets.Add();
         ((Excel.Worksheet)myExcelWorkbook.Sheets["Sheet1"]).Select();
         ((Excel.Worksheet)myExcelWorkbook.Sheets["Sheet1"]).Name = "RSD's";
         ((Excel.Worksheet)myExcelWorkbook.Sheets["Sheet2"]).Select();
         ((Excel.Worksheet)myExcelWorkbook.Sheets["Sheet2"]).Name = "Konzentrationen";
         ((Excel.Worksheet)myExcelWorkbook.Sheets["Sheet3"]).Select();
         ((Excel.Worksheet)myExcelWorkbook.Sheets["Sheet3"]).Name = "Original";

Soweit ist alles ok, aber ich schaffe es nicht, in ein ausgewähltes und aktiviertes Arbeitsblatt eine vorher mit dem openFileDialog ausgewählte csv-Datei in das entsprechende Arbeitsblatt zu laden.

Wäre schön, wenn da jemand eine Idee hat.

Gruß
Wolfgang

M
53 Beiträge seit 2008
vor 8 Jahren

Moin WMenzel,

du kannst in Excel ein Makro aufzeichnen und dir dann anschauen wie VBA das machen würde. Den generierten Code kann man in der Regel einfach nach C# überführen.

Gruß
muhtanten

W
WMenzel Themenstarter:in
28 Beiträge seit 2012
vor 8 Jahren

Hallo,
ja danke, das hat schon mal geklappt, aber leider komme ich mit der Umsetzung von VBA na C# nicht so richtig klar. Ich bekomme folgenden Code:

.
.
.
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Agilent_Online\Online_Uni\Test_WME_Ori.csv", Destination:=Range( _
"$A$1"))
.CommandType = 0
.Name = "Test_WME_Ori"
.FieldNames = True
.
.
.
Ich schaffe es leider nicht, die with Anweisung vernünftig in C# zu übersetzen.

Danke und Gruß
Wolfgang

5.658 Beiträge seit 2006
vor 8 Jahren

Hi WMenzel,

das with-Statement tut nichts weiter, als das Objekt zum aktuellen Kontext zu machen. Man könnte das auch so schreiben:

someObject = ActiveSheet.QueryTables.Add(Connection:= "TEXT;C:\Agilent_Online\Online_Uni\Test_WME_Ori.csv", Destination:=Range( "$A$1"))
someObject.CommandType = 0
someObject.Name = "Test_WME_Ori"
someObject.FieldNames = True

Christian

Weeks of programming can save you hours of planning

W
WMenzel Themenstarter:in
28 Beiträge seit 2012
vor 8 Jahren

Hallo,

danke für die Hilfe und Denkanstöße. Habs jetzt, so funktioniert's:

            Excel.Worksheet activeSheet = null;
            Excel.QueryTables queryTables = null;
            Excel.QueryTable queryTable = null;
            Excel.Range insertRange = null;

            activeSheet = myExcelApplication.ActiveSheet;
            insertRange = activeSheet.Range["$A$1"];
            queryTables = activeSheet.QueryTables;
            queryTable = queryTables.Add("TEXT;" + anzresults[z], insertRange);
            queryTable.AdjustColumnWidth = true;
            queryTable.TextFileParseType = Excel.XlTextParsingType.xlDelimited;
            queryTable.TextFileTextQualifier =    Excel.XlTextQualifier.xlTextQualifierDoubleQuote;
            queryTable.TextFileCommaDelimiter = true;
            queryTable.Refresh();

Gruß
WOlfgang