使用EPPlus将Excel转换为DataTable-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中打开了文件。
任何想法如何解决这个问题?提前致谢。:)
回答:
我知道,这就是我最近在这里发布的内容(现已更正)。由于使用后未放置ExcelPackage
和和FileStream
(从File.OpenRead
),因此可以进行改进。
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已锁定以进行编辑 的全部内容, 来源链接: utcz.com/qa/427551.html