GemBox.Spreadsheet 组件不会在 ExtractToDataTable() 方法中自动将数字转换为字符串。
这主要是因为文化问题。有人会期望数字 12.4 转换为“12.4”,而其他人则转换为“12,4”。
因此,如果您的 Excel 文件具有值类型为 int 的单元格,并且相应列的类型为字符串 -> 将引发异常。要覆盖它,您可以使用ExcelWorksheet.ExtractDataEvent。
这是示例:
// Create new ExcelFile
ExcelFile ef = new ExcelFile();
// Add sheet
ExcelWorksheet ws = ef.Worksheets.Add("Sheet1");
// Fill sheet
for (int i = 0; i < 5; i++)
{
ws.Cells[i, 0].Value = i; // integer value
ws.Cells[i, 1].Value = "Row: " + i; // string value
}
// Initialize DataTable
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(string));
dt.Columns.Add("text", typeof(string));
// Manage ExtractDataError.WrongType error
ws.ExtractDataEvent += (sender, e) =>
{
if (e.ErrorID == ExtractDataError.WrongType)
{
e.DataTableValue = e.ExcelValue == null ? null : e.ExcelValue.ToString();
e.Action = ExtractDataEventAction.Continue;
}
};
// Extract data to DataTable
ws.ExtractToDataTable(dt, 1000, ExtractDataOptions.StopAtFirstEmptyRow, ws.Rows[0], ws.Columns[0]);