我用下面的代碼到Excel轉換到DataTable使用EPPlus:Excel中的數據表使用EPPlus - Excel的編輯鎖定
public DataTable ExcelToDataTable(string path)
{
var pck = new OfficeOpenXml.ExcelPackage();
pck.Load(File.OpenRead(path));
var ws = pck.Workbook.Worksheets.First();
DataTable tbl = new DataTable();
bool hasHeader = true;
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));
}
var startRow = hasHeader ? 2 : 1;
for (var rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
{
var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
var row = tbl.NewRow();
foreach (var cell in wsRow)
{
row[cell.Start.Column - 1] = cell.Text;
}
tbl.Rows.Add(row);
}
pck.Dispose();
return tbl;
}
它創建了Excel,但是,當我嘗試打開它,它給了我一個消息,說明它被鎖定以供其他用戶編輯,並且我只能以只讀模式打開它。
我想用:
pck.Dispose();
就解決了問題,但我仍然得到同樣的錯誤。
此外,當我嘗試刪除該文件時,我收到消息:該操作無法完成,因爲該文件在WebDev.WebServer40.EXE中打開。
任何想法如何解決這個問題? 在此先感謝。 :)
是的,我看到了代碼Codeplex EPPlus網站以及您在StackOverflow上的文章。 試過這個,工作,謝謝你:) pck.Dispose()只是配置ExcelPackage然後而不是FileStream,正確嗎? – Fahad
@法赫德:對。使用'using'也更好,因爲它也會在出錯時放置'IDisposable'。我也會在Codeplex上編輯這篇文章。 –
我怎樣才能得到第一列「foreach(var單元格在wsRow){」這個循環 Becoz我有一個日期字段,我想在插入到數據表格時更改格式,所以我需要檢查數據到「foreach(var cell in wsRow){「循環,所以我怎麼能確定第一個colunm值是來? –