using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Office.Interop.Excel; // zusätzlich ist der Projektverweis auf COM -> Microsoft Excel xx-Objectlibrary namespace Test_ExcelReadColumn { class ColumnValues { public ColumnValues(string fileName) { FileName = fileName; //ColumnName = columnName; //Values = ReadValues(columnName); } //Dateiname public string FileName { private set; get; } //Name der angeforderten Spalte public string ColumnName { private set; get; } //Position der angeforderten Spalte public int ColumnNumber { private set; get; } //Anzahl der Zeilen public int ColumnRange { private set; get; } //Die Werte der angeforderten Spalte public List Values { private set; get; } //oExcelApp benötigt den kompletten Namensraum, da andernfalls der Compiler den Unterschied zwischen //"Microsoft.Office.Interop.Excel.Application" und "System.Windows.Forms.Application" nicht erkennen kann private Microsoft.Office.Interop.Excel.Application oExcelApp = new Microsoft.Office.Interop.Excel.Application(); private Workbook oWorkbook = null; private Worksheet oWorksheet = null; public List ReadValues(string columnName) { List values = new List(); Range oRange; object oValue; // Datei öffnen und aktives Blatt und benutzten Bereich auswählen oWorkbook = oExcelApp.Workbooks.Open(FileName); oWorksheet = (Worksheet) oWorkbook.ActiveSheet; oRange = oWorksheet.UsedRange; int columnNumber = -1; columnNumber = ColumnNo(columnName); for (int j = 2; j < oRange.Rows.Count + 1; j++) { oValue = (oRange.Cells[j, columnNumber] as Range).Value; if (oValue != null) { values.Add(oValue.ToString()); } else { values.Add(""); } } //TODO: //ColomnRange = values.Count; return values; } private int ColumnNo(string columnName) { Range oRange; // Datei öffnen und aktives Blatt und benutzten Bereich auswählen oWorkbook = oExcelApp.Workbooks.Open(FileName); oWorksheet = (Worksheet)oWorkbook.ActiveSheet; oRange = oWorksheet.UsedRange; int columnNo = -1; for (int i = 1; i < oRange.Columns.Count; i++) { if (oWorksheet.Cells[1, i].Value != null) { string x = oWorksheet.Cells[1, i].Value.ToString().ToLower(); if (oWorksheet.Cells[1, i].Value.ToString().ToLower() == columnName.ToLower()) { columnNo = i; } } } ColumnNumber = columnNo; return columnNo; //-1 wenn Spalte nicht gefunden wurde } public void SaveChanges(List status) { // Datei öffnen und aktives Blatt und benutzten Bereich auswählen oWorkbook = oExcelApp.Workbooks.Open(FileName); oWorksheet = (Worksheet)oWorkbook.ActiveSheet; for (int i = 0; i < status.Count; i++) { if (status[i] != null) { if (status[i] != "") { (oWorksheet.Cells[i + 2, ColumnNumber] as Range).Value = status[i]; (oWorksheet.Cells[i + 2, ColumnNumber + 1] as Range).Value = "Yes"; } } } oWorkbook.Save(); if (oWorkbook != null) { oWorkbook.Close(); } } public void CloseExcel() { //Beim Schließen des Fensters, Dokument schließen try { if (oWorkbook != null) { oWorkbook.Close(); //Workbook schliessen } } catch (Exception) { //Wurde das Workbook schon vorher geschlossen, dann landen wir hier. //Nichts machen, nur den Fehler abfangen } finally { oExcelApp.Quit(); //Excel schliessen } } } }