使用 EPPlus 将 Excel 转换为 DataTable - excel 已锁定以进行编辑 [英] Excel to DataTable using EPPlus - excel locked for editing
问题描述
我正在使用以下代码将 Excel 转换为使用 EPPlus 的数据表:
I'm using the following code to convert an Excel to a datatable using EPPlus:
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,但是,当我尝试打开它时,它告诉我它已被其他用户锁定以进行编辑,并且我只能在只读模式下打开它.
It creates the Excel, however, when I try to open it, it gives me the message that it is locked for editing by another user and that I can only open it in Read-Only mode.
我想使用:
pck.Dispose();
会解决问题,但是我仍然遇到同样的错误.
would solve the issue, however I'm still getting the same error.
此外,当我尝试删除文件时,我收到消息:无法完成操作,因为文件已在 WebDev.WebServer40.EXE 中打开.
Also, when I try to delete the file, I get the message: The action can't be completed because the file is open in WebDev.WebServer40.EXE.
任何想法如何解决这个问题?提前致谢.:)
Any ideas how to resolve this? Thanks in advance. :)
推荐答案
我明白了,这就是 我最近在这里发布的内容(现已更正).由于ExcelPackage
和FileStream
(来自File.OpenRead
)在使用后没有被处理,因此可以改进.
I see, that's what i've posted recently here(now corrected). It can be improved since the ExcelPackage
and the FileStream
(from File.OpenRead
) are not disposed after using.
public static DataTable GetDataTableFromExcel(string path, bool hasHeader = true)
{
using (var pck = new OfficeOpenXml.ExcelPackage())
{
using (var stream = File.OpenRead(path))
{
pck.Load(stream);
}
var ws = pck.Workbook.Worksheets.First();
DataTable tbl = new 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));
}
var startRow = hasHeader ? 2 : 1;
for (int rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
{
var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
DataRow row = tbl.Rows.Add();
foreach (var cell in wsRow)
{
row[cell.Start.Column - 1] = cell.Text;
}
}
return tbl;
}
}
这篇关于使用 EPPlus 将 Excel 转换为 DataTable - excel 已锁定以进行编辑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!