diff --git a/src/examples/src/org/apache/poi/hssf/usermodel/examples/HSSFReadWrite.java b/src/examples/src/org/apache/poi/hssf/usermodel/examples/HSSFReadWrite.java index 632cd5585f..1f56f7ec5e 100644 --- a/src/examples/src/org/apache/poi/hssf/usermodel/examples/HSSFReadWrite.java +++ b/src/examples/src/org/apache/poi/hssf/usermodel/examples/HSSFReadWrite.java @@ -44,12 +44,12 @@ import org.apache.poi.ss.util.CellRangeAddress; public final class HSSFReadWrite { /** - * creates an {@link HSSFWorkbook} the specified OS filename. + * creates an {@link HSSFWorkbook} with the specified OS filename. */ private static HSSFWorkbook readFile(String filename) throws IOException { FileInputStream fis = new FileInputStream(filename); try { - return new HSSFWorkbook(fis); + return new HSSFWorkbook(fis); // NOSONAR - should not be closed here } finally { fis.close(); } @@ -60,76 +60,79 @@ public final class HSSFReadWrite { * rows/cells. */ private static void testCreateSampleSheet(String outputFilename) throws IOException { - int rownum; HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet s = wb.createSheet(); - HSSFCellStyle cs = wb.createCellStyle(); - HSSFCellStyle cs2 = wb.createCellStyle(); - HSSFCellStyle cs3 = wb.createCellStyle(); - HSSFFont f = wb.createFont(); - HSSFFont f2 = wb.createFont(); - - f.setFontHeightInPoints((short) 12); - f.setColor((short) 0xA); - f.setBold(true); - f2.setFontHeightInPoints((short) 10); - f2.setColor((short) 0xf); - f2.setBold(true); - cs.setFont(f); - cs.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)")); - cs2.setBorderBottom(BorderStyle.THIN); - cs2.setFillPattern(FillPatternType.SOLID_FOREGROUND); - cs2.setFillForegroundColor((short) 0xA); - cs2.setFont(f2); - wb.setSheetName(0, "HSSF Test"); - for (rownum = 0; rownum < 300; rownum++) { - HSSFRow r = s.createRow(rownum); - if ((rownum % 2) == 0) { - r.setHeight((short) 0x249); - } - - for (int cellnum = 0; cellnum < 50; cellnum += 2) { - HSSFCell c = r.createCell(cellnum); - c.setCellValue(rownum * 10000 + cellnum - + (((double) rownum / 1000) + ((double) cellnum / 10000))); - if ((rownum % 2) == 0) { - c.setCellStyle(cs); - } - c = r.createCell(cellnum + 1); - c.setCellValue(new HSSFRichTextString("TEST")); - // 50 characters divided by 1/20th of a point - s.setColumnWidth(cellnum + 1, (int) (50 * 8 / 0.05)); - if ((rownum % 2) == 0) { - c.setCellStyle(cs2); - } - } - } - - // draw a thick black border on the row at the bottom using BLANKS - rownum++; - rownum++; - HSSFRow r = s.createRow(rownum); - cs3.setBorderBottom(BorderStyle.THICK); - for (int cellnum = 0; cellnum < 50; cellnum++) { - HSSFCell c = r.createCell(cellnum); - c.setCellStyle(cs3); - } - s.addMergedRegion(new CellRangeAddress(0, 3, 0, 3)); - s.addMergedRegion(new CellRangeAddress(100, 110, 100, 110)); - - // end draw thick black border - // create a sheet, set its title then delete it - wb.createSheet(); - wb.setSheetName(1, "DeletedSheet"); - wb.removeSheetAt(1); - - // end deleted sheet - FileOutputStream out = new FileOutputStream(outputFilename); try { - wb.write(out); + HSSFSheet s = wb.createSheet(); + HSSFCellStyle cs = wb.createCellStyle(); + HSSFCellStyle cs2 = wb.createCellStyle(); + HSSFCellStyle cs3 = wb.createCellStyle(); + HSSFFont f = wb.createFont(); + HSSFFont f2 = wb.createFont(); + + f.setFontHeightInPoints((short) 12); + f.setColor((short) 0xA); + f.setBold(true); + f2.setFontHeightInPoints((short) 10); + f2.setColor((short) 0xf); + f2.setBold(true); + cs.setFont(f); + cs.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)")); + cs2.setBorderBottom(BorderStyle.THIN); + cs2.setFillPattern(FillPatternType.SOLID_FOREGROUND); + cs2.setFillForegroundColor((short) 0xA); + cs2.setFont(f2); + wb.setSheetName(0, "HSSF Test"); + int rownum; + for (rownum = 0; rownum < 300; rownum++) { + HSSFRow r = s.createRow(rownum); + if ((rownum % 2) == 0) { + r.setHeight((short) 0x249); + } + + for (int cellnum = 0; cellnum < 50; cellnum += 2) { + HSSFCell c = r.createCell(cellnum); + c.setCellValue(rownum * 10000 + cellnum + + (((double) rownum / 1000) + ((double) cellnum / 10000))); + if ((rownum % 2) == 0) { + c.setCellStyle(cs); + } + c = r.createCell(cellnum + 1); + c.setCellValue(new HSSFRichTextString("TEST")); + // 50 characters divided by 1/20th of a point + s.setColumnWidth(cellnum + 1, (int) (50 * 8 / 0.05)); + if ((rownum % 2) == 0) { + c.setCellStyle(cs2); + } + } + } + + // draw a thick black border on the row at the bottom using BLANKS + rownum++; + rownum++; + HSSFRow r = s.createRow(rownum); + cs3.setBorderBottom(BorderStyle.THICK); + for (int cellnum = 0; cellnum < 50; cellnum++) { + HSSFCell c = r.createCell(cellnum); + c.setCellStyle(cs3); + } + s.addMergedRegion(new CellRangeAddress(0, 3, 0, 3)); + s.addMergedRegion(new CellRangeAddress(100, 110, 100, 110)); + + // end draw thick black border + // create a sheet, set its title then delete it + wb.createSheet(); + wb.setSheetName(1, "DeletedSheet"); + wb.removeSheetAt(1); + + // end deleted sheet + FileOutputStream out = new FileOutputStream(outputFilename); + try { + wb.write(out); + } finally { + out.close(); + } } finally { - out.close(); - wb.close(); + wb.close(); } } @@ -165,48 +168,64 @@ public final class HSSFReadWrite { HSSFWorkbook wb = HSSFReadWrite.readFile(fileName); - System.out.println("Data dump:\n"); + try { + System.out.println("Data dump:\n"); - for (int k = 0; k < wb.getNumberOfSheets(); k++) { - HSSFSheet sheet = wb.getSheetAt(k); - int rows = sheet.getPhysicalNumberOfRows(); - System.out.println("Sheet " + k + " \"" + wb.getSheetName(k) + "\" has " + rows - + " row(s)."); - for (int r = 0; r < rows; r++) { - HSSFRow row = sheet.getRow(r); - if (row == null) { - continue; - } - - int cells = row.getPhysicalNumberOfCells(); - System.out.println("\nROW " + row.getRowNum() + " has " + cells - + " cell(s)."); - for (int c = 0; c < cells; c++) { - HSSFCell cell = row.getCell(c); - String value = null; - - switch (cell.getCellTypeEnum()) { - - case FORMULA: - value = "FORMULA value=" + cell.getCellFormula(); - break; - - case NUMERIC: - value = "NUMERIC value=" + cell.getNumericCellValue(); - break; - - case STRING: - value = "STRING value=" + cell.getStringCellValue(); - break; - - default: + for (int k = 0; k < wb.getNumberOfSheets(); k++) { + HSSFSheet sheet = wb.getSheetAt(k); + int rows = sheet.getPhysicalNumberOfRows(); + System.out.println("Sheet " + k + " \"" + wb.getSheetName(k) + "\" has " + rows + + " row(s)."); + for (int r = 0; r < rows; r++) { + HSSFRow row = sheet.getRow(r); + if (row == null) { + continue; + } + + System.out.println("\nROW " + row.getRowNum() + " has " + row.getPhysicalNumberOfCells() + " cell(s)."); + for (int c = 0; c < row.getLastCellNum(); c++) { + HSSFCell cell = row.getCell(c); + String value; + + if(cell != null) { + switch (cell.getCellTypeEnum()) { + + case FORMULA: + value = "FORMULA value=" + cell.getCellFormula(); + break; + + case NUMERIC: + value = "NUMERIC value=" + cell.getNumericCellValue(); + break; + + case STRING: + value = "STRING value=" + cell.getStringCellValue(); + break; + + case BLANK: + value = ""; + break; + + case BOOLEAN: + value = "BOOLEAN value-" + cell.getBooleanCellValue(); + break; + + case ERROR: + value = "ERROR value=" + cell.getErrorCellValue(); + break; + + default: + value = "UNKNOWN value of type " + cell.getCellTypeEnum(); + } + System.out.println("CELL col=" + cell.getColumnIndex() + " VALUE=" + + value); + } } - System.out.println("CELL col=" + cell.getColumnIndex() + " VALUE=" - + value); } } + } finally { + wb.close(); } - wb.close(); } else if (args.length == 2) { if (args[1].toLowerCase(Locale.ROOT).equals("write")) { System.out.println("Write mode"); @@ -218,36 +237,47 @@ public final class HSSFReadWrite { } else { System.out.println("readwrite test"); HSSFWorkbook wb = HSSFReadWrite.readFile(fileName); - FileOutputStream stream = new FileOutputStream(args[1]); - - wb.write(stream); - stream.close(); - wb.close(); + try { + FileOutputStream stream = new FileOutputStream(args[1]); + try { + wb.write(stream); + } finally { + stream.close(); + } + } finally { + wb.close(); + } } - } else if (args.length == 3 && args[2].toLowerCase(Locale.ROOT).equals("modify1")) { + } else if (args.length == 3 && args[2].equalsIgnoreCase("modify1")) { // delete row 0-24, row 74 - 99 && change cell 3 on row 39 to string "MODIFIED CELL!!" HSSFWorkbook wb = HSSFReadWrite.readFile(fileName); - FileOutputStream stream = new FileOutputStream(args[1]); - HSSFSheet sheet = wb.getSheetAt(0); + try { + HSSFSheet sheet = wb.getSheetAt(0); - for (int k = 0; k < 25; k++) { - HSSFRow row = sheet.getRow(k); + for (int k = 0; k < 25; k++) { + HSSFRow row = sheet.getRow(k); - sheet.removeRow(row); + sheet.removeRow(row); + } + for (int k = 74; k < 100; k++) { + HSSFRow row = sheet.getRow(k); + + sheet.removeRow(row); + } + HSSFRow row = sheet.getRow(39); + HSSFCell cell = row.getCell(3); + cell.setCellValue("MODIFIED CELL!!!!!"); + + FileOutputStream stream = new FileOutputStream(args[1]); + try { + wb.write(stream); + } finally { + stream.close(); + } + } finally { + wb.close(); } - for (int k = 74; k < 100; k++) { - HSSFRow row = sheet.getRow(k); - - sheet.removeRow(row); - } - HSSFRow row = sheet.getRow(39); - HSSFCell cell = row.getCell(3); - cell.setCellValue("MODIFIED CELL!!!!!"); - - wb.write(stream); - stream.close(); - wb.close(); } } catch (Exception e) { e.printStackTrace(); diff --git a/src/java/org/apache/poi/hssf/record/WSBoolRecord.java b/src/java/org/apache/poi/hssf/record/WSBoolRecord.java index 78185c1df8..b3659db994 100644 --- a/src/java/org/apache/poi/hssf/record/WSBoolRecord.java +++ b/src/java/org/apache/poi/hssf/record/WSBoolRecord.java @@ -283,33 +283,19 @@ public final class WSBoolRecord extends StandardRecord { } // end bitfields - public String toString() - { - StringBuffer buffer = new StringBuffer(); - - buffer.append("[WSBOOL]\n"); - buffer.append(" .wsbool1 = ") - .append(Integer.toHexString(getWSBool1())).append("\n"); - buffer.append(" .autobreaks = ").append(getAutobreaks()) - .append("\n"); - buffer.append(" .dialog = ").append(getDialog()) - .append("\n"); - buffer.append(" .rowsumsbelw= ").append(getRowSumsBelow()) - .append("\n"); - buffer.append(" .rowsumsrigt= ").append(getRowSumsRight()) - .append("\n"); - buffer.append(" .wsbool2 = ") - .append(Integer.toHexString(getWSBool2())).append("\n"); - buffer.append(" .fittopage = ").append(getFitToPage()) - .append("\n"); - buffer.append(" .displayguts= ").append(getDisplayGuts()) - .append("\n"); - buffer.append(" .alternateex= ") - .append(getAlternateExpression()).append("\n"); - buffer.append(" .alternatefo= ").append(getAlternateFormula()) - .append("\n"); - buffer.append("[/WSBOOL]\n"); - return buffer.toString(); + public String toString() { + return "[WSBOOL]\n" + + " .wsbool1 = " + Integer.toHexString(getWSBool1()) + "\n" + + " .autobreaks = " + getAutobreaks() + "\n" + + " .dialog = " + getDialog() + "\n" + + " .rowsumsbelw= " + getRowSumsBelow() + "\n" + + " .rowsumsrigt= " + getRowSumsRight() + "\n" + + " .wsbool2 = " + Integer.toHexString(getWSBool2()) + "\n" + + " .fittopage = " + getFitToPage() + "\n" + + " .displayguts= " + getDisplayGuts() + "\n" + + " .alternateex= " + getAlternateExpression() + "\n" + + " .alternatefo= " + getAlternateFormula() + "\n" + + "[/WSBOOL]\n"; } public void serialize(LittleEndianOutput out) { diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java index 981cbd4829..a95ea239a2 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java @@ -908,13 +908,12 @@ public class HSSFCell implements Cell { case ERROR: return (( BoolErrRecord ) _record).getErrorValue(); case FORMULA: - break; + FormulaRecord fr = ((FormulaRecordAggregate)_record).getFormulaRecord(); + checkFormulaCachedValueType(CellType.ERROR, fr); + return (byte) fr.getCachedErrorValue(); default: throw typeMismatch(CellType.ERROR, _cellType, false); } - FormulaRecord fr = ((FormulaRecordAggregate)_record).getFormulaRecord(); - checkFormulaCachedValueType(CellType.ERROR, fr); - return (byte) fr.getCachedErrorValue(); } /**