test_excelreadcolumn_v2_tes.../Test_ExcelReadColumn/ColumnValues.cs

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
}
}
}
}