使用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

回到顶部