Как написать файл .xlsx, используя Apache Poi - PullRequest
0 голосов
/ 27 апреля 2011

пожалуйста, посмотрите, это моя кодировка для записи .xlsx файла, он работает, но я не могу открыть файл после записи. он говорит, что файл поврежден. пожалуйста, дайте решение

OPCPackage fileSystems = OPCPackage.open(file.getAbsolutePath(),PackageAccess.READ);

XSSFWorkbook workBook = new XSSFWorkbook(fileSystems);
XSSFSheet sheet = workBook.getSheetAt(0);
Iterator rows = sheet.rowIterator();

while (rows.hasNext ())
{
XSSFRow row = (XSSFRow) rows.next ();

System.out.println ("Row No.: " + row.getRowNum ());

Iterator cells = row.cellIterator();

while (cells.hasNext ())
{
XSSFCell cell = (XSSFCell) cells.next();

String value = "OldValue";
if(value.equals(cell.getStringCellValue()))
{
switch (cell.getCellType())
{ 
case Cell.CELL_TYPE_NUMERIC: 
double cellNumericValue =  cell.getNumericCellValue(); 
cell.setCellValue(cellNumericValue); 
break; 
case Cell.CELL_TYPE_STRING: 
String cellStringValue = cell.getStringCellValue(); 
cell.setCellValue("NewValue"); 
break; 
case Cell.CELL_TYPE_FORMULA: 
String cellFormulaValue = cell.getCellFormula(); 
cell.setCellValue(cellFormulaValue); 
break; 
case Cell.CELL_TYPE_BLANK: 
cell.setCellValue("");
break; 
case Cell.CELL_TYPE_BOOLEAN: 
boolean cellBooleanValue = cell.getBooleanCellValue();
cellBooleanValue=false; 
cell.setCellValue(cellBooleanValue); 
break; 
case Cell.CELL_TYPE_ERROR: 
byte error = cell.getErrorCellValue();
cell.setCellValue(error);
break; 
default: 
break; 
} 
}
}
}
XSSFWorkbook newWorkBook = new XSSFWorkbook();
FileOutputStream outPutStream = null;
try {
outPutStream = new FileOutputStream(file);
newWorkBook.write(outPutStream);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (outPutStream != null) {
try {
outPutStream.flush();
outPutStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

1 Ответ

3 голосов
/ 28 апреля 2011

Похоже, вы создаете рабочую книгу, заполняете ее, затем создаете новую пустую и сохраняете ее! Попробуйте удалить строку

  XSSFWorkbook newWorkBook = new XSSFWorkbook();

А затем измените запись на запись из workBook вместо newWorkBook , и все будет в порядке.

...