【发布时间】:2014-11-07 23:53:10
【问题描述】:
我正在使用以下代码通过 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 中 - 将调用上述方法并将数据加载到 GridView 中。
但这不适用于 Mono。这适用于.Net,但是当我从浏览按钮选择不同的文件时,使用相同的代码,第一个文件会一次又一次地加载。 要加载新文件,我必须关闭应用程序并再次运行。
方法代码有什么问题吗? 我需要在某处关闭/卸载 EP 代码中的 excel 吗?
问候,
【问题讨论】:
-
这看起来像是发送到方法中的任何路径的问题,而不是实际方法本身的问题。您是否调试过正在发送的路径?它们是相同的,还是不同的?
-
非常感谢您的回复。我得到了这个问题。我正在使用 app.config 文件并在运行时对其进行修改以保存文件路径并从 app.config 获取路径以将文件加载到网格中。要获得 app.config 中的新更改,我们必须重新加载应用程序。
-
您应该将其作为答案,以便搜索相同问题的人可以看到您为解决该问题所做的工作。
-
我把它作为答案。谢谢。