Я создаю сценарий Groovy для экспорта таблиц из файла .xlsm в файл .csv, включая соответствующие формулы (а не сгенерированные данные).Когда скрипт вызывает .getCellType () в текущей ячейке, я получаю исключение нулевого указателя, даже если эта функция возникает в операторе if, который проверяет, является ли ячейка нулевой.
Я попытался заменить
if(cell != null)
условие с
if(cell.getCellType() != CellType.BLANK)
безрезультатно.
Код и полное сообщение об ошибке ниже.
#!/usr/bin/env groovy
@Grab(group = 'org.apache.poi', module = 'poi', version = '4.1.0')
@Grab(group = 'org.apache.poi', module = 'poi-ooxml', version = '4.1.0')
import org.apache.poi.xssf.usermodel.XSSFWorkbook
import org.apache.poi.xssf.usermodel.*
import org.apache.poi.ss.usermodel.*
Workbook wb = new XSSFWorkbook("input.xlsm")
FormulaEvaluator fe = wb.getCreationHelper().createFormulaEvaluator()
DataFormatter formatter = new DataFormatter()
PrintStream out = new PrintStream(new FileOutputStream("output.csv"), true, "UTF-8")
byte[] bom = [(byte)0xEF, (byte)0xBB, (byte)0xBF]
out.write(bom)
for (Sheet sheet : wb){
for (Row row : sheet) {
boolean firstCell = true
for(Cell cell : row){
if (! firstCell) out.print(',')
if ( cell != null ) {
if (fe != null) cell = fe.evaluateInCell()
String value = formatter.formatCellValue(cell)
if (cell.getCellType() == CellType.FORMULA) {
value = "=" + value
}
out.print(value)
}
firstCell = false
}
out.println()
}
}
Сообщение об ошибке:
Caught: java.lang.NullPointerException: Cannot invoke method
getCellType() on null object java.lang.NullPointerException:
Cannot invoke method getCellType() on null object
at ExcelToCSV.run(ExcelToCSV.groovy:28)
Я ожидаю, что в случае, если текущая ячейка не равна нулю, если ячейка вычисляется как содержащая формулу, строка, выводимая в файл .csv, будет иметь "=", добавленный в началоиз этого, в противном случае он просто выведет строку, представляющую значение в ячейке.
У меня, к сожалению, есть проблемы с моей средой IDE, пропускающей точки останова, и в настоящее время я не могу пошагово просмотреть код или просмотреть значения переменных,это отдельная проблема, над которой я тоже работаю.До тех пор, пока я не решу это, я надеюсь, что кто-то сможет указать, чего мне не хватает.