using (ExcelPackage excelPackage = new ExcelPackage(fileInfo))
{
ExcelWorksheet sheet = excelPackage.Workbook.Worksheets.First();
for (int rowNum = 2; rowNum <= sheet.Dimension.End.Row; rowNum++)
{
var wsRow = sheet.Cells[rowNum, 1, rowNum, sheet.Dimension.End.Column];
DataRow row = dt.Rows.Add();
foreach (var cell in wsRow)
{
if (wsRow[rowNum, 12] == null)
{
break;
}
row["model_number"] = wsRow[rowNum, 1];
row["product_name"] = wsRow[rowNum, 2];
row["enemy"] = wsRow[rowNum, 9];
try
{
row["regular_price"] = wsRow[rowNum, 3] == null ? DBNull.Value : (double?)wsRow[rowNum, 3] == 0 ? DBNull.Value : wsRow[rowNum, 3];
}
catch (Exception)
{
row["regular_price"] = 0;
}
}
}
}
在写给excel的最后一行上,我得到了错误
无法将类型'OfficeOpenXml.ExcelRange'转换为'double?'
答案 0 :(得分:0)
要获取实际的单元格值,您需要像这样使用.Value
的{{1}}属性:
ExcelRange
否则,您将尝试将(double?)wsRow[rowNum, 3].Value == 0
转换为两倍,如错误所解释。
其他行也一样。像
ExcelRange
您可能真的想要
row["model_number"] = wsRow[rowNum, 1];
除非您确信excel中的数据是“干净的”,否则可能需要进行一些类型检查。