无法将类型“ OfficeOpenXml.ExcelRange”转换为“双精度”?

时间:2019-06-29 18:25:29

标签: c# excel epplus

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?'

1 个答案:

答案 0 :(得分:0)

要获取实际的单元格值,您需要像这样使用.Value的{​​{1}}属性:

ExcelRange

否则,您将尝试将(double?)wsRow[rowNum, 3].Value == 0 转换为两倍,如错误所解释。

其他行也一样。像

ExcelRange

您可能真的想要

row["model_number"] = wsRow[rowNum, 1];

除非您确信excel中的数据是“干净的”,否则可能需要进行一些类型检查。