NPOI конвертирует XLS в XLSX, бросая нулевую ссылку

Я пытаюсь преобразовать файл из XLS в XLSX, используя NPOI. Поскольку я не знаю о явном преобразовании, я написал эту первую реализацию, проходящую через строки и ячейки, и копирование из одного в другое:

public string ConvertToXlsx(string xlsPath) { var oldWorkbook = new HSSFWorkbook(new FileStream(xlsPath, FileMode.Open)); var oldWorkSheet = oldWorkbook.GetSheetAt(0); var newExcelPath = xlsPath.Replace("xls", "xlsx"); using (var fileStream = new FileStream(newExcelPath, FileMode.Create)) { var newWorkBook = new XSSFWorkbook(); var newWorkSheet = new XSSFSheet(); newWorkBook.Add(newWorkSheet); foreach (HSSFRow oldRow in oldWorkSheet) { var newRow = newWorkSheet.CreateRow(oldRow.RowNum); for (int ii = oldRow.FirstCellNum; ii < oldRow.LastCellNum; ii++) { var newCell = newRow.CreateCell(ii); newCell = oldRow.Cells[ii]; } } newWorkBook.Write(fileStream); } return newExcelPath; } 

Тем не менее, в строке var newCell = newRow.CreateCell(ii); NPOI выбрасывает исключение NullReferenceException со следующей трассировкой стека:

 at NPOI.XSSF.UserModel.XSSFCell..ctor(XSSFRow row, CT_Cell cell) at NPOI.XSSF.UserModel.XSSFRow.CreateCell(Int32 columnIndex, CellType type) at NPOI.XSSF.UserModel.XSSFRow.CreateCell(Int32 columnIndex) at Ing2Ynab.Excel.IngExcelConverter.ConvertToXlsx(String xlsPath) 

Который я не понимаю, почему это происходит, поскольку XSSFRow должен отвечать за создание CT_Cell, который передается в конструктор XSSFCell, из того, что я мог прочитать в коде NPOI.

Кто-нибудь еще пытался это сделать и / или исправил его?

Благодарю.

Похоже, вы должны явно вызвать метод Workbooks CreateSheet () вместо вызова .Add (). Кроме того, у вас, похоже, есть некоторые исключения вне диапазона в вашем цикле, поэтому следите за этим.

 public string ConvertToXlsx(string xlsPath) { var oldWorkbook = new HSSFWorkbook(new FileStream(xlsPath, FileMode.Open)); var oldWorkSheet = oldWorkbook.GetSheetAt(0); var newExcelPath = xlsPath.Replace("xls", "xlsx"); using (var fileStream = new FileStream(newExcelPath, FileMode.Create)) { var newWorkBook = new XSSFWorkbook(); var newWorkSheet = newWorkBook.CreateSheet("Sheet1"); foreach (HSSFRow oldRow in oldWorkSheet) { var newRow = newWorkSheet.CreateRow(oldRow.RowNum); for (int ii = oldRow.FirstCellNum; ii < oldRow.LastCellNum; ii++) { var newCell = newRow.CreateCell(ii); newCell = oldRow.Cells[ii]; } } newWorkBook.Write(fileStream); } return newExcelPath; } 
  • npoi Собственная формула SetCellFormula в VBA
  • Чтение изображения из файла Excel с помощью NPOI
  • C # с использованием NPOI для редактирования значений ячейки excel (.xls) не работает
  • Почему этот формат « h: mm: ss \ AM / PM» 24-часовой формат в Excel?
  • Загрузка файла NPOI Excel повреждена
  • NPOI - Добавить изображение в заголовок excel
  • Чтение региональных дат из Excel с помощью NPOI
  • Как установить строку перед столбцами при генерации Excel (xlsx)
  • NPOI - после сохранения в файл развращает .xlsx workbook
  • манипулировать данными перед импортом из excel в набор данных
  • почему NPOI создал выпадающий список ячеек, всегда разделяемый запятой
  • Interesting Posts

    C # AddIn Excel: экспорт файла xls в текстовый файл с разделителем

    Поиск всех ячеек в столбце Excel с помощью vbscript

    Ошибка времени выполнения 1004, определение приложения или объектная ошибка

    Копировать формулу без ссылки на ячейку изменения

    Excel VBA возвращает константу из кода рабочего листа, когда новый код написан

    Списки перекрестных ссылок в excel / access

    В Excel VBA, как проверить, полностью ли загружена веб-страница?

    Vlookup с использованием ссылок на переменные

    Инструмент Excel, сокращающий многие формулы до одной формулы

    Выбор альтернативных точек и перемещение надписей выше / ниже

    Улучшение эффективности петли VBA

    Как я могу препятствовать тому, чтобы PivotChart стал обычной диаграммой на листе?

    Maatwebsite / Laravel-Excel работает на местном, но не на геройском композиторе

    Создание диаграммы в Excel со временем начала и продолжительностью

    Общение с RTD-сервером в Java вместо Excel

    Давайте будем гением компьютера.