我使用以下代码通过EPPlus库将excel文件读入数据表:
public static DataTable GetDataTableFromExcel(string path)
{
DataTable tbl = new DataTable();
using (var pck = new ExcelPackage())
{
using (var stream = File.OpenRead(path))
{
pck.Load(stream);
}
//GET FIRST SHEET IN EXCEL FILE
var ws = pck.Workbook.Worksheets.First();
bool hasheader = true; // adjust it accordingly( i've mentioned that this is a simple approach)
//ADD COLUMNS (SCHEMA) TO DATATABLE
foreach (var firstrowcell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
{
tbl.Columns.Add(hasheader ? firstrowcell.Text : string.Format("column {0}", firstrowcell.Start.Column));
}
//IF THE EXCEL SHEET HAS FIRST ROW AS COLUMN NAMES THAN START FROM 2nd ROW Else FROM FIRST ROW
var startrow = hasheader ? 2 : 1;
for (var rownum = startrow; rownum <= ws.Dimension.End.Row; rownum++)
{
//ws.Cells[rownum, 1, rownum, ws.Dimension.End.Column].Style.Numberformat.Format = "General";
var wsrow = ws.Cells[rownum, 1, rownum, ws.Dimension.End.Column];
var row = tbl.NewRow();
foreach (var cell in wsrow)
{
if (cell.Start.Column > 20)
continue;
if (cell.Start.Column == 20)
{
DateTime dt = new DateTime(1947, 1, 1);
DateTime.TryParse(cell.Value.ToString(), out dt);
if (dt == new DateTime(0001, 1, 1))
{
long serialDate = long.Parse(cell.Value.ToString());
DateTime result = DateTime.FromOADate(serialDate);
row[cell.Start.Column - 1] = result.ToString();
}
else
row[cell.Start.Column - 1] = cell.Value;
}
else
row[cell.Start.Column - 1] = cell.Text;
}
tbl.Rows.Add(row);
}
}
return tbl;
}
在我的应用程序中,我选择一个excel文件,而不是使用EPPlus将Excel转换为DataTable,如果我选择一个新文件,则在GridView中加载datatable-将调用上述方法并在GridView中加载数据。
但这不适用于Mono。这适用于.Net但是当我从浏览按钮中选择不同的文件时,使用相同的代码,第一个文件会一次又一次地加载。 要加载新文件,我必须关闭应用程序并再次运行。
方法代码有什么问题吗? 我需要在某个地方关闭/卸载EP代码中的Excel吗?
此致
答案 0 :(得分:0)
非常感谢你的回复。我遇到了这个问题。我正在使用app.config文件并在运行时修改它以保存文件路径并从app.config获取路径以将文件加载到网格中。要在app.config中获取新的更改,我们必须重新加载应用程序。