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;
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 class HSSFReadWrite
-{
- private String filename = null;
-
- protected HSSFWorkbook hssfworkbook = null;
-
- /**
- * Constructor HSSFReadWrite - creates an HSSFStream from an InputStream. The HSSFStream
- * reads in the records allowing modification.
- *
- *
- * @param filename
- *
- * @exception IOException
- *
- */
-
- public HSSFReadWrite(String filename)
- throws IOException
- {
- this.filename = filename;
- POIFSFileSystem fs =
- new POIFSFileSystem(new FileInputStream(filename));
-
- hssfworkbook = new HSSFWorkbook(fs);
-
- // records = RecordFactory.createRecords(stream);
- }
-
- /**
- * Constructor HSSFReadWrite - given a filename this outputs a sample sheet with just
- * a set of rows/cells.
- *
- *
- * @param filename
- * @param write
- *
- * @exception IOException
- *
- */
-
- 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();
- }
-
- /**
+public final class HSSFReadWrite {
+
+ /**
+ * creates an {@link HSSFWorkbook} the specified OS filename.
+ */
+ private static HSSFWorkbook readFile(String filename) throws IOException {
+ return new HSSFWorkbook(new FileInputStream(filename));
+ }
+
+ /**
+ * 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();
+
+ 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);
+ }
+
+ 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(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));
+
+ // 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
+ FileOutputStream out = new FileOutputStream(outputFilename);
+ wb.write(out);
+ out.close();
+ }
+
+ /**
* 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.<br/>
*
* 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)}.<br/>
*
* 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.<br/>
*
* 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 < 2)
- {
-
- try
- {
- HSSFReadWrite hssf = new HSSFReadWrite(args[ 0 ]);
-
- System.out.println("Data dump:\n");
- HSSFWorkbook wb = hssf.hssfworkbook;
-
- 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;
-
- switch (cell.getCellType())
- {
-
- case HSSFCell.CELL_TYPE_FORMULA :
- value = "FORMULA value="
- + cell.getCellFormula();
- break;
-
- case HSSFCell.CELL_TYPE_NUMERIC :
- value = "NUMERIC value="
- + cell.getNumericCellValue();
- break;
-
- case HSSFCell.CELL_TYPE_STRING :
- value = "STRING value="
- + cell.getStringCellValue();
- 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);
-
- 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 ]);
-
- // HSSFStream hssfstream = hssf.hssfstream;
- HSSFWorkbook wb = hssf.hssfworkbook;
- 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 ]);
-
- // HSSFStream hssfstream = hssf.hssfstream;
- HSSFWorkbook wb = hssf.hssfworkbook;
- FileOutputStream stream = new FileOutputStream(args[ 1 ]);
- HSSFSheet sheet = wb.getSheetAt(0);
-
- 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);
- }
- HSSFRow row = sheet.getRow(39);
- HSSFCell cell = row.getCell(3);
-
- 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();
- }
- }
- }
+ public static void main(String[] args) {
+ if (args.length < 1) {
+ System.err.println("At least one argument expected");
+ return;
+ }
+
+ String fileName = args[0];
+ try {
+ if (args.length < 2) {
+
+ HSSFWorkbook wb = HSSFReadWrite.readFile(fileName);
+
+ 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.getCellType()) {
+
+ case HSSFCell.CELL_TYPE_FORMULA:
+ value = "FORMULA value=" + cell.getCellFormula();
+ break;
+
+ case HSSFCell.CELL_TYPE_NUMERIC:
+ value = "NUMERIC value=" + cell.getNumericCellValue();
+ break;
+
+ case HSSFCell.CELL_TYPE_STRING:
+ value = "STRING value=" + cell.getStringCellValue();
+ break;
+
+ 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);
+
+ 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]);
+
+ 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!!"
+
+ 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);
+
+ 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!!!!!");
+
+ wb.write(stream);
+ stream.close();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
}