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 002f5431b..3cc124b67 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 @@ -15,8 +15,7 @@ limitations under the License. ==================================================================== */ - -package org.apache.poi.hssf.examples.usermodel; +package org.apache.poi.hssf.usermodel.examples; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -30,342 +29,216 @@ import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.hssf.util.CellRangeAddress; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.poi.ss.util.CellRangeAddress; /** * File for HSSF testing/examples * - * THIS IS NOT THE MAIN HSSF FILE!! This is a util for testing functionality. - * It does contain sample API usage that may be educational to regular API users. + * THIS IS NOT THE MAIN HSSF FILE!! This is a utility for testing functionality. + * It does contain sample API usage that may be educational to regular API + * users. * * @see #main * @author Andrew Oliver (acoliver at apache dot org) */ +public final class HSSFReadWrite { -public class HSSFReadWrite -{ - private String filename = null; + /** + * creates an {@link HSSFWorkbook} the specified OS filename. + */ + private static HSSFWorkbook readFile(String filename) throws IOException { + return new HSSFWorkbook(new FileInputStream(filename)); + } - protected HSSFWorkbook hssfworkbook = null; + /** + * given a filename this outputs a sample sheet with just a set of + * 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(); - /** - * Constructor HSSFReadWrite - creates an HSSFStream from an InputStream. The HSSFStream - * reads in the records allowing modification. - * - * - * @param filename - * - * @exception IOException - * - */ + f.setFontHeightInPoints((short) 12); + f.setColor((short) 0xA); + f.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); + f2.setFontHeightInPoints((short) 10); + f2.setColor((short) 0xf); + f2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); + cs.setFont(f); + cs.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)")); + cs2.setBorderBottom(HSSFCellStyle.BORDER_THIN); + cs2.setFillPattern((short) 1); // fill w fg + 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); + } - public HSSFReadWrite(String filename) - throws IOException - { - this.filename = filename; - POIFSFileSystem fs = - new POIFSFileSystem(new FileInputStream(filename)); + 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); + } + } + } - hssfworkbook = new HSSFWorkbook(fs); + // draw a thick black border on the row at the bottom using BLANKS + rownum++; + rownum++; + HSSFRow r = s.createRow(rownum); + cs3.setBorderBottom(HSSFCellStyle.BORDER_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)); - // records = RecordFactory.createRecords(stream); - } + // end draw thick black border + // create a sheet, set its title then delete it + s = wb.createSheet(); + wb.setSheetName(1, "DeletedSheet"); + wb.removeSheetAt(1); - /** - * Constructor HSSFReadWrite - given a filename this outputs a sample sheet with just - * a set of rows/cells. - * - * - * @param filename - * @param write - * - * @exception IOException - * - */ + // end deleted sheet + FileOutputStream out = new FileOutputStream(outputFilename); + wb.write(out); + out.close(); + } - public HSSFReadWrite(String filename, boolean write) - throws IOException - { - short rownum = 0; - FileOutputStream out = new FileOutputStream(filename); - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet s = wb.createSheet(); - HSSFRow r = null; - HSSFCell c = null; - 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.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); - f2.setFontHeightInPoints(( short ) 10); - f2.setColor(( short ) 0xf); - f2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); - cs.setFont(f); - cs.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)")); - cs2.setBorderBottom(HSSFCellStyle.BORDER_THIN); - cs2.setFillPattern(( short ) 1); // fill w fg - cs2.setFillForegroundColor(( short ) 0xA); - cs2.setFont(f2); - wb.setSheetName(0, "HSSF Test"); - for (rownum = ( short ) 0; rownum < 300; rownum++) - { - r = s.createRow(rownum); - if ((rownum % 2) == 0) - { - r.setHeight(( short ) 0x249); - } - - // r.setRowNum(( short ) rownum); - for (short cellnum = ( short ) 0; cellnum < 50; cellnum += 2) - { - c = r.createCell(cellnum, HSSFCell.CELL_TYPE_NUMERIC); - c.setCellValue(rownum * 10000 + cellnum - + ((( double ) rownum / 1000) - + (( double ) cellnum / 10000))); - if ((rownum % 2) == 0) - { - c.setCellStyle(cs); - } - c = r.createCell(cellnum + 1, - HSSFCell.CELL_TYPE_STRING); - c.setCellValue(new HSSFRichTextString("TEST")); - s.setColumnWidth(cellnum + 1, (int)(50 * 8 / 0.05)); - if ((rownum % 2) == 0) - { - c.setCellStyle(cs2); - } - } // 50 characters divided by 1/20th of a point - } - - // draw a thick black border on the row at the bottom using BLANKS - rownum++; - rownum++; - r = s.createRow(rownum); - cs3.setBorderBottom(HSSFCellStyle.BORDER_THICK); - for (short cellnum = ( short ) 0; cellnum < 50; cellnum++) - { - c = r.createCell(cellnum, HSSFCell.CELL_TYPE_BLANK); - - // c.setCellValue(0); - 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 - s = wb.createSheet(); - wb.setSheetName(1, "DeletedSheet"); - wb.removeSheetAt(1); - - // end deleted sheet - wb.write(out); - out.close(); - } - - /** - * Constructor HSSF - takes in file - attempts to read it then reconstruct it - * - * - * @param infile - * @param outfile - * @param write - * - * @exception IOException - * - */ - - public HSSFReadWrite(String infile, String outfile, boolean write) - throws IOException - { - this.filename = infile; - POIFSFileSystem fs = - new POIFSFileSystem(new FileInputStream(filename)); - - hssfworkbook = new HSSFWorkbook(fs); - - // HSSFWorkbook book = hssfstream.getWorkbook(); - } - - /** + /** * Method main * * Given 1 argument takes that as the filename, inputs it and dumps the - * cell values/types out to sys.out + * cell values/types out to sys.out.
* * given 2 arguments where the second argument is the word "write" and the - * first is the filename - writes out a sample (test) spreadsheet (see - * public HSSF(String filename, boolean write)). + * first is the filename - writes out a sample (test) spreadsheet + * see {@link HSSFReadWrite#testCreateSampleSheet(String)}.
* * given 2 arguments where the first is an input filename and the second * an output filename (not write), attempts to fully read in the - * spreadsheet and fully write it out. + * spreadsheet and fully write it out.
* * given 3 arguments where the first is an input filename and the second an * output filename (not write) and the third is "modify1", attempts to read in the * spreadsheet, deletes rows 0-24, 74-99. Changes cell at row 39, col 3 to * "MODIFIED CELL" then writes it out. Hence this is "modify test 1". If you * take the output from the write test, you'll have a valid scenario. - * - * @param args - * */ + public static void main(String[] args) { + if (args.length < 1) { + System.err.println("At least one argument expected"); + return; + } - public static void main(String [] args) - { - if (args.length < 2) - { + String fileName = args[0]; + try { + if (args.length < 2) { - try - { - HSSFReadWrite hssf = new HSSFReadWrite(args[ 0 ]); + HSSFWorkbook wb = HSSFReadWrite.readFile(fileName); - System.out.println("Data dump:\n"); - HSSFWorkbook wb = hssf.hssfworkbook; + 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); - int cells = (row != null) ? row.getPhysicalNumberOfCells() : 0; - if (row != null) { - 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; + 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; + } - switch (cell.getCellType()) - { + 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; - case HSSFCell.CELL_TYPE_FORMULA : - value = "FORMULA value=" - + cell.getCellFormula(); - break; + switch (cell.getCellType()) { - case HSSFCell.CELL_TYPE_NUMERIC : - value = "NUMERIC value=" - + cell.getNumericCellValue(); - break; + case HSSFCell.CELL_TYPE_FORMULA: + value = "FORMULA value=" + cell.getCellFormula(); + break; - case HSSFCell.CELL_TYPE_STRING : - value = "STRING value=" - + cell.getStringCellValue(); - break; + case HSSFCell.CELL_TYPE_NUMERIC: + value = "NUMERIC value=" + cell.getNumericCellValue(); + break; - default : - } - System.out.println("CELL col=" - + cell.getCellNum() - + " VALUE=" + value); - } - } - } - } - catch (Exception e) - { - e.printStackTrace(); - } - } - else if (args.length == 2) - { - if (args[ 1 ].toLowerCase().equals("write")) - { - System.out.println("Write mode"); - try - { - long time = System.currentTimeMillis(); - HSSFReadWrite hssf = new HSSFReadWrite(args[ 0 ], true); + case HSSFCell.CELL_TYPE_STRING: + value = "STRING value=" + cell.getStringCellValue(); + break; - System.out - .println("" + (System.currentTimeMillis() - time) - + " ms generation time"); - } - catch (Exception e) - { - e.printStackTrace(); - } - } - else - { - System.out.println("readwrite test"); - try - { - HSSFReadWrite hssf = new HSSFReadWrite(args[ 0 ]); + default: + } + System.out.println("CELL col=" + cell.getColumnIndex() + " VALUE=" + + value); + } + } + } + } else if (args.length == 2) { + if (args[1].toLowerCase().equals("write")) { + System.out.println("Write mode"); + long time = System.currentTimeMillis(); + HSSFReadWrite.testCreateSampleSheet(fileName); - // HSSFStream hssfstream = hssf.hssfstream; - HSSFWorkbook wb = hssf.hssfworkbook; - FileOutputStream stream = new FileOutputStream(args[ 1 ]); + System.out.println("" + (System.currentTimeMillis() - time) + + " ms generation time"); + } else { + System.out.println("readwrite test"); + HSSFWorkbook wb = HSSFReadWrite.readFile(fileName); + FileOutputStream stream = new FileOutputStream(args[1]); - // HSSFCell cell = new HSSFCell(); - // cell.setCellNum((short)3); - // cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); - // cell.setCellValue(-8009.999); - // hssfstream.modifyCell(cell,0,(short)6); - wb.write(stream); - stream.close(); - } - catch (Exception e) - { - e.printStackTrace(); - } - } - } - else if ((args.length == 3) - && args[ 2 ].toLowerCase().equals("modify1")) - { - try // delete row 0-24, row 74 - 99 && change cell 3 on row 39 to string "MODIFIED CELL!!" - { - HSSFReadWrite hssf = new HSSFReadWrite(args[ 0 ]); + wb.write(stream); + stream.close(); + } + } else if (args.length == 3 && args[2].toLowerCase().equals("modify1")) { + // delete row 0-24, row 74 - 99 && change cell 3 on row 39 to string "MODIFIED CELL!!" - // HSSFStream hssfstream = hssf.hssfstream; - HSSFWorkbook wb = hssf.hssfworkbook; - FileOutputStream stream = new FileOutputStream(args[ 1 ]); - HSSFSheet sheet = wb.getSheetAt(0); + HSSFWorkbook wb = HSSFReadWrite.readFile(fileName); + FileOutputStream stream = new FileOutputStream(args[1]); + 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); - } - for (int k = 74; k < 100; k++) - { - HSSFRow row = sheet.getRow(k); + 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); + sheet.removeRow(row); + } + HSSFRow row = sheet.getRow(39); + HSSFCell cell = row.getCell(3); + cell.setCellValue("MODIFIED CELL!!!!!"); - cell.setCellType(HSSFCell.CELL_TYPE_STRING); - cell.setCellValue("MODIFIED CELL!!!!!"); - - // HSSFCell cell = new HSSFCell(); - // cell.setCellNum((short)3); - // cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); - // cell.setCellValue(-8009.999); - // hssfstream.modifyCell(cell,0,(short)6); - wb.write(stream); - stream.close(); - } - catch (Exception e) - { - e.printStackTrace(); - } - } - } + wb.write(stream); + stream.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } }