154 lines
4.6 KiB
C#
154 lines
4.6 KiB
C#
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<string> 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<string> ReadValues(string columnName)
|
|
{
|
|
List<string> values = new List<string>();
|
|
|
|
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<string> 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
|
|
}
|
|
}
|
|
}
|
|
}
|