я новые вопросы создания, так вот я иду = DApache POI SXSSFSheet.getRow() возвращает нулевое ложноположительный
У меня есть все мои данные, хранящиеся в SXSSFWorkbook и я пытаюсь добавить формулу информацию перед записью и сохранить файл, все работает нормально, но когда я открываю файл, есть несколько пустых ячеек, где должна быть формула, я обнаружил, что 176 строк возвращают NULL, вот почему я не могу создать ячейки формулы в первых 176 строках, thats нечетная часть, потому что есть данные по этим строкам, после строки 176 формула выглядит нормально, работает ли работа и все остальное, обновляет, создает, добавляет больше строк и сохраняет.
Так вот какой код = D.
private void fillWorkBook(Vector tableData, String path) throws FileNotFoundException, IOException, InvalidFormatException{
//this.xlsxWorkbook.setSheetName(0, "Proshop");
SXSSFWorkbook wb = new SXSSFWorkbook(500);
wb.setMissingCellPolicy(Row.CREATE_NULL_AS_BLANK);
this.createHeader(wb);
if(this.checkFile(path)){
File f = new File(path);
OPCPackage pkg = pkg = OPCPackage.open(f);
this.xlsxWorkbook = new XSSFWorkbook(pkg);
Vector oldData = this.createDataVectorXLSX(0);
for(int i = 5; i >= 0; i--)
oldData.removeElementAt(i);
for(int i = 0; i < 7; i++)
oldData.removeElementAt(oldData.size()-1);
this.fillWithTableData(wb, oldData);
pkg.close();
//System.out.println(path);
} else {
//System.out.println("nuevo archivo - fillWorkData");//tableData.toString());
}
this.fillWithTableData(wb, tableData);
this.createFooter(wb);
this.setColumnWidth(wb.getSheetAt(0));
this.setCombinedCells(wb.getSheetAt(0));
//sheet.shiftRows(5, 6, 10);
//col, fil
wb.getSheetAt(0).createFreezePane(0, 6);
this.addImage(wb);
this.createFormulaData(wb);
wb.setForceFormulaRecalculation(true);
this.createDataSalida(wb, path);
}
private void createFormulaData(SXSSFWorkbook wb) {
XSSFSheet sheetXLSX = null;
sheetXLSX = (SXSSFSheet) wb.getSheetAt(0);
Row row;
float marcaImpuesto[] = ViewController.factores;
ViewController.factores = null;
int cells = 0;
for (int i = 6; i <= sheetXLSX.getLastRowNum(); i ++){
row = sheetXLSX.getRow(i);
if(row != null){
if(cells < row.getLastCellNum())
cells = row.getLastCellNum();
for (int j = 0; j < cells; j++){
Cell cell = row.getCell(j, Row.CREATE_NULL_AS_BLANK);
switch(j){
case 9:
cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula(""+CellReference.convertNumToColString(j-4)+(i+1)+"*"+marcaImpuesto[3]);
break;
case 8:
cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula(""+CellReference.convertNumToColString(j-3)+(i+1)+"*"+marcaImpuesto[2]);
break;
case 7:
cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula(""+CellReference.convertNumToColString(j-2)+(i+1)+"*"+marcaImpuesto[1]);
break;
case 6:
cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula(""+CellReference.convertNumToColString(j-1)+(i+1)+"*"+marcaImpuesto[0]);
break;
case 5:
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
break;
default:
//cell.setCellType(Cell.);
break;
}
}
} }
}
UPDATE.-
Ну решение это немного сложно, требует больше кода и процессорного времени, сначала вы должны знать, что клетки будут (число, строка, пустой, формула и т.д.) , затем создайте всю свою ячейку, используя XSSFCell или HSSFCell или новый универсальный SS-сервер, затем создайте свои ячейки внутри Temp-листа, внесите все изменения, которые вам понадобятся, чтобы окончательно перебрать этот лист и заполнить SXSSFSheet.
еще одно
Spreadsheet API Feature Summary , как вы можете видеть, я не могу оценить формулы, но в моем коде я делаю весь процесс, и я знаю, что уже не будет сохранять формула оценивали, вот почему я использовал wb.setForceFormulaRecalculation(true);
, поэтому другое решение - это только цифры, что означает оценку и выполнение всей математики с помощью java, а затем сохранение простых чисел.
Cheers.
Что произойдет, если вы попробуете его только с XSSF? Может ли это быть артефактом SXSSF, который обычно добавляется? – Gagravarr
Спасибо за ваш быстрый ответ, у XSSF есть большой объем памяти, и мне нужна эта программа, чтобы быть безупречной, вот почему я пытаюсь использовать SXSSF для создания файлов, кстати, как я сказал, что проблема возникает только в первых 176 строках, поэтому я не может понять, что происходит. – Aosi
Увеличьте размер своей кучи и попробуйте с XSSF. Это скажет вам, есть ли проблема с этим одним файлом, или если это ошибка SXSSF. – Gagravarr