Возможно, название немного расплывчато, но я хочу открыть, прочитать файл Excel и заполнить объект.
Например:
У меня есть модель домена
public class CustomerModel
{
public string Name { get; set; }
public string EmployeeNumber { get; set; }
}
Мой файл Excel будет содержать те же столбцы, что и модель.
Я нашел пример этого с помощью Microsoft.Office.Interop.Excel
Я просто настроил его для своей модели так:
public static List<CustomerModel> ExcelExport(int i, int j, string path)
{
try
{
Application excelApp;
Workbook excelWorkBook;
Worksheet excelWorkSheet;
Range range;
int rCnt;
int rw = 0;
int cl = 0;
excelApp = new Application();
excelWorkBook = excelApp.Workbooks.Open(path);
//get the first sheet
excelWorkSheet = (Worksheet)excelWorkBook.Worksheets.get_Item(1);
range = excelWorkSheet.UsedRange;
// get the total row count
rw = range.Rows.Count;
//get the total column count
cl = range.Columns.Count;
List<CustomerModel> customers = new List<CustomerModel>();
// traverse all the row in the excel
for (rCnt = 1; rCnt <= rw; rCnt++)
{
if (rCnt % 5 == 1)
{//get rows
for (int col = 2; col <= cl; col++)
{//traverse columns (the first column is not included)
for (int rowABCD = rCnt + 1; rowABCD <= rCnt + 4; rowABCD++)
{
CustomerModel model = new CustomerModel();
model.Name = (string)(range.Cells[rCnt, 1] as Range).Value2.ToString();
model.EmployeeNumber = (string)(range.Cells[rCnt, col] as Range).Value2.ToString();
customers.Add(model);
}
}
}
}
excelWorkBook.Close(true, null, null);
excelApp.Quit();
Marshal.ReleaseComObject(excelWorkSheet);
Marshal.ReleaseComObject(excelWorkBook);
Marshal.ReleaseComObject(excelApp);
return customers;
}
catch (Exception ee)
{
throw;
}
}
проблема в том, что я не могу гарантировать, что на компьютере / сервере, где он должен работать, будет установлен офис.
Есть ли надежный способ сделать это?
PS: я не знаю, относится ли это к делу, но я делаю это, так как заполню таблицу в SQL из файла Excel