невозможно преобразовать тип «OfficeOpenXml.ExcelRange» в «double?» - PullRequest
0 голосов
/ 29 июня 2019
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;
            }                   
        }
    }
}

в последней строке написано, чтобы преуспеть Я получаю ошибку

не может преобразовать тип «OfficeOpenXml.ExcelRange» в «double?»

1 Ответ

0 голосов
/ 13 июля 2019

Чтобы получить фактическое значение ячейки, вы хотите использовать .Value свойство ExcelRange, например:

(double?)wsRow[rowNum, 3].Value == 0

в противном случае вы пытаетесь привести ExcelRange к удвоению, как объясняется в ошибке.

То же самое относится и к другим линиям. Нравится

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

Вы, вероятно, действительно хотите

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

Может потребоваться выполнить некоторые проверки типов, если вы не уверены, что данные в Excel являются "чистыми".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...