Tôi đang sử dụng đoạn mã sau để chuyển đổi Excel để một DataTable sử dụng EPPlus:Excel để DataTable sử dụng EPPlus - excel bị khóa để chỉnh sửa
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;
}
Nó tạo ra Excel, tuy nhiên, khi tôi cố gắng để mở nó , nó cho tôi thông báo rằng nó bị khóa để chỉnh sửa bởi một người dùng khác và tôi chỉ có thể mở nó ở chế độ Chỉ đọc.
Tôi nghĩ sử dụng:
pck.Dispose();
sẽ giải quyết vấn đề này, tuy nhiên tôi vẫn nhận được cùng một lỗi.
Ngoài ra, khi tôi cố xóa tệp, tôi nhận được thông báo: Hành động không thể hoàn thành vì tệp được mở trong WebDev.WebServer40.EXE.
Bất kỳ ý tưởng nào giải quyết vấn đề này? Cảm ơn trước. :)
có, tôi đã thấy mã trên Trang web Codeplex EPPlus cũng như trên bài đăng của bạn trên StackOverflow. Đã cố gắng này, hoạt động, cảm ơn một tấn :) pck.Dispose() chỉ cần xử lý ExcelPackage sau đó và không phải là FileStream, đúng không? – Fahad
@Fahad: Đúng. Nó cũng tốt hơn để sử dụng 'using' vì nó cũng loại bỏ lỗi' IDisposable'. Tôi cũng sẽ chỉnh sửa bài đăng trên Codeplex. –
Làm thế nào tôi có thể nhận được cột đầu tiên trong "foreach (var cell in wsRow) {" vòng lặp này Becoz tôi có một trường ngày và tôi muốn thay đổi định dạng trong khi chèn vào datatable vì vậy tôi cần phải kiểm tra dữ liệu vào "foreach (var cell in wsRow) {"vòng lặp như vậy làm thế nào tôi có thể xác định rằng giá trị colunm đầu tiên là đến? –