C Sharp ExcelParser выбрасывает исключения на пустые ячейки

Итак, я пытаюсь сделать синтаксический анализатор документов Excel, и все идет хорошо, пока не достигнет пустой ячейки в Excel. Затем он генерирует исключение *"Microsoft.CSharp.RuntimeBinder.RuntimeBinderException" произошло в System.Core.dll"

namespace ExcelParser {
    class Program
    {
        static void Main(string[] args)
        {
            Excel.Application excelApp = new Excel.Application();
            excelApp.Visible = true;

            string _sourceFile = "F:\\Bullshit\\book1.xlsm";

            excelApp.Workbooks.Open(_sourceFile);

            int row = 1;
            Excel.Worksheet currentSheet = (Excel.Worksheet)excelApp.Workbooks[1].Worksheets[1];
            Console.WriteLine("Initializing");
            while (currentSheet.get_Range("A" + row).Value2 != null)
            {
                List<string> tempList = new List<string>();
                for (char column = 'A'; column < 'J'; column++)
                {
                    Console.Write(column + row.ToString());
                    Excel.Range cell = currentSheet.get_Range(column + row.ToString());
                    Console.WriteLine(cell.Value2.ToString() != "" ? cell.Value2.ToString() : "null!"); // the problem line
                }
                row++;
            }
            Console.ReadKey();
        }
    }
}

3 ответа

Решение

Я думаю что cell.Value2 является пустым для пустой ячейки. В этом случае вы не можете вызвать.ToString() для него.

Однако вы можете проверить это:

Console.WriteLine(cell.Value2 != null ? cell.Value2.ToString() : "null!");

Вы не можете привести метод ToString объекта, если у вас нет объекта. Он вернет ноль, но null разве он не такой же как "" попробуйте использовать эту строку:

Console.WriteLine(("" + cell.Value2).ToString() != "" ? cell.Value2.ToString() : "null!");

Быстрый и грязный способ избавиться от исключения просто

try
{
   Console.WriteLine(cell.Value2.ToString() != "" ? cell.Value2.ToString(): "null!");
}
catch(exception e)
{
  Console.WriteLine(e.Argument);
}
Другие вопросы по тегам