2020年4月27日 星期一

[研究][C#][ASP.NET][WebForm] ClosedXML 匯入錯誤:參數名稱: The range 工作表1!A1:L2 is already part of table 'Table1'

[研究][C#][ASP.NET][WebForm] ClosedXML 匯入錯誤:參數名稱: The range 工作表1!A1:L2 is already part of table 'Table1' 

2020-04-27


range
參數名稱: The range 工作表1!A1:L2 is already part of table 'Table1'
 描述: 在執行目前 Web 要求的過程中發生未處理的例外狀況。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。

 例外狀況詳細資訊: System.ArgumentException: range
參數名稱: The range 工作表1!A1:L2 is already part of table 'Table1'

原始程式錯誤:



行 858:                    var firstCell = workSheet.FirstCellUsed();
行 859:                    var lastCell = workSheet.LastCellUsed();
行 860:                    dt = workSheet.Range(firstCell.Address, lastCell.Address).AsTable().AsNativeDataTable();
行 861:                }
行 862:

經查,如果是 ClosedXML 0.94.2 或 0.95.2 匯出的 .xlsx
匯入時,在 AsTable() 這邊會出錯;

但若為  OpenXML ( DocumentFormat.OpenXml ) 2.10.1 匯出的,匯入不會有問題。

要改寫成下面方式,ClosedXML 才能讀取。

using (XLWorkbook workBook = new XLWorkbook(fileName))
{
 IXLWorksheet workSheet = workBook.Worksheet("工作表1");
 // 讀取第一個 Sheet
 //IXLWorksheet worksheet = workbook.Worksheet(1);
 //var worksheet = workbook.Worksheets.First();

 var firstCell = workSheet.FirstCellUsed();
 var lastCell = workSheet.LastCellUsed();

 var range = workSheet.Range(firstCell.Address, lastCell.Address);

 for (int i=2; i <= range.RowCount(); i++)
 {
  // row =1 是標題列;row=2 才開始是資料列
  lineNo = i;
  string sn = range.Cell(i, 1).Value.ToString();
  string cName = range.Cell(i, 2).Value.ToString();
  string addr = range.Cell(i, 3).Value.ToString();
 }
} 

(完)

沒有留言:

張貼留言