//你也可以将日期设置为java.util.Calendar cell = row.createCell(2);
cell.setCellValue(Calendar.getInstance()); cell.setCellStyle(cellStyle);
//将输出写入文件
FileOutputStream fileOut = new FileOutputStream(\ wb.write(fileOut); fileOut.close();
5、使用不同类型的单元格
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet(\ Row row = sheet.createRow((short)2); row.createCell(0).setCellValue(1.1);
row.createCell(1).setCellValue(new Date());
row.createCell(2).setCellValue(Calendar.getInstance()); row.createCell(3).setCellValue(\ row.createCell(4).setCellValue(true);
row.createCell(5).setCellType(CellType.ERROR);
//将输出写入文件
FileOutputStream fileOut = new FileOutputStream(\ wb.write(fileOut); fileOut.close();
6、在行和单元格上的迭代
在某些情况下,在迭代时,您需要完全控制如何处理缺失或空白行和单元格, 并且您需要确保访问每个单元格,而不仅仅是文件中定义的单元格。
(CellIterator只会返回文件中定义的单元格,这主要是具有值或样式的单元格,但它取决于Excel)。
在这些情况下,您应该获取行的第一列和最后一列信息,然后调用getCell(int,MissingCellPolicy)来获取单元格。
使用MissingCellPolicy控制如何处理空白或空单元格。 //决定要处理的行
int rowStart = Math.min(15,sheet.getFirstRowNum()); int rowEnd = Math.max(1400,sheet.getLastRowNum());
for(int rowNum = rowStart; rowNum Row r = sheet.getRow(rowNum); if(r == null){ //这整行是空的 //根据需要处理它 continue; } int lastColumn = Math.max(r.getLastCellNum(),MY_MINIMUM_COLUMN_COUNT); for(int cn = 0; cn Cell c = r.getCell(cn,Row.RETURN_BLANK_AS_NULL); if(c == null){ //此单元格中的电子表格为空 } else { //做一些有用的单元格的内容 } } } 7、获取单元格内容 要获取单元格的内容,你首先需要知道它是什么样的单元格(例如,要求字符串单元格的数字内容会得到一个NumberFormatException)。 因此,您将需要打开单元格的类型,然后为该单元格调用适当的getter。 在下面的代码中,我们循环遍历每个单元格,打印出单元格的引用(例如A3),然后打印单元格的内容。 DataFormatter formatter = new DataFormatter(); Sheet sheet1 = wb.getSheetAt(0); for (Row row : sheet1) { for (Cell cell : row) { CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex()); System.out.print(cellRef.formatAsString()); System.out.print(\ //通过获取单元格值并应用任何数据格式(日期,0.00,1.23e9,$ 1.23等)获取单元格中显示的文本。 String text = formatter.formatCellValue(cell); System.out.println(text); //或者,自己获取值和格式化 switch (cell.getCellTypeEnum()) { case CellType.STRING: System.out.println(cell.getRichStringCellValue().getString()); break; case CellType.NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { System.out.println(cell.getDateCellValue()); } else { System.out.println(cell.getNumericCellValue()); } break; case CellType.BOOLEAN: System.out.println(cell.getBooleanCellValue()); break; case CellType.FORMULA: System.out.println(cell.getCellFormula()); break; case CellType.BLANK: System.out.println(); break; default: System.out.println(); } } } 8、文本提取 对于大多数文本提取需求,标准ExcelExtractor类应该提供了您所需要的。 InputStream inp = new FileInputStream(\ HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(inp)); ExcelExtractor extractor = new ExcelExtractor(wb); extractor.setFormulasNotResults(true); extractor.setIncludeSheetNames(false); String text = extractor.getText(); 对于非常奇特的文本提取,XLS到CSV等,看看/src /examples /src /org /apache /poi /hssf /eventusermodel /examples /XLS2CSV mra.java 9、文件与InputStreams 打开Workbook (.xls HSSFWorkbook或.xlsx XSSFWorkbook)时,可以从文件或InputStream加载Workbook 。使用File对象允许较低的内存消耗,而InputStream需要更多的内存,因为它必须 缓冲整个文件。 如果使用WorkbookFactory,很容易使用一个或另一个: //使用文件 Workbook wb = WorkbookFactory.create(new File(\ //使用InputStream,需要更多内存 Workbook wb = WorkbookFactory.create(new FileInputStream(\ 如果直接使用HSSFWorkbook或XSSFWorkbook,通常应该通过POIFSFileSystem或OPCPackage来完全控制生命周期(包括完成后关闭文件): //HSSFWorkbook, File NPOIFSFileSystem fs = new NPOIFSFileSystem(new File(\ HSSFWorkbook wb = new HSSFWorkbook(fs.getRoot(), true); .... fs.close(); //HSSFWorkbook, InputStream, 需要更多内存 NPOIFSFileSystem fs = new NPOIFSFileSystem(myInputStream); HSSFWorkbook wb = new HSSFWorkbook(fs.getRoot(), true); //XSSFWorkbook, File OPCPackage pkg = OPCPackage.open(new File(\ XSSFWorkbook wb = new XSSFWorkbook(pkg); .... pkg.close(); //XSSFWorkbook, InputStream, 需要更多内存 OPCPackage pkg = OPCPackage.open(myInputStream); XSSFWorkbook wb = new XSSFWorkbook(pkg); .... pkg.close(); 10、对齐单元格 public static void main(String[] args) throws Exception { Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook(); Sheet sheet = wb.createSheet(); Row row = sheet.createRow((short) 2); row.setHeightInPoints(30); createCell(wb, row, (short) 0, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_BOTTOM); createCell(wb, row, (short) 1, CellStyle.ALIGN_CENTER_SELECTION,
相关推荐: