




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Apache POI HSSF and XSSF 快速指南 帮助文档 API poi-3.15目录1、如何创建一个新的Workbook32、如何创建一个表33、如何创建单元格34、如何创建日期单元格45、使用不同类型的单元格56、在行和单元格上的迭代57、获取单元格内容68、文本提取79、文件与InputStreams710、对齐单元格811、使用边界912、填充和颜色1013、合并单元格1114、使用字体1115、自定义颜色1316、读写1417、在单元格中使用换行符。1518、创建用户定义的数据格式1519、将单页调整为一页1620、设置工作表的打印区域1621、在工作表的页脚上设置页码1722、移动行1723、将工作表设置为选定1724、设置工作页的缩放倍率1825、创建拆分和冻结窗格1826、重复行和列1927、页眉和页脚1928、绘图形状2029、造型形状2130、形状和Graphics2d2231、大纲2332、图片2333、命名范围和命名单元格2534、如何设置单元格注释2735、如何调整列宽以适合内容2836、超链接2937、数据验证3138、嵌入对象3839、自动过滤器4040、条件格式4041、隐藏和取消隐藏行4142、设置单元格属性4243、绘图边框4344、创建数据透视表4445、具有多种样式的单元格(富文本字符串)4546、使用方便的函数46Apache POI HSSF and XSSF 快速指南 帮助文档 API poi-3.15参考版本为:poi-3.15 代码测试所用软件:NetBeans IDE8.2 希望对大家有所帮助提示:测试代码需要导入poi的全部以jar结尾的文件,导入到库中2016/10/18 Tuesday1、如何创建一个新的Workbook Workbook wb = new HSSFWorkbook(); FileOutputStream fileOut = new FileOutputStream(workbook.xls); wb.write(fileOut); fileOut.close(); Workbook wb = new XSSFWorkbook(); FileOutputStream fileOut = new FileOutputStream(workbook.xlsx); wb.write(fileOut); fileOut.close();2、如何创建一个表 Workbook wb = new HSSFWorkbook(); /or new XSSFWorkbook(); Sheet sheet1 = wb.createSheet(new sheet); Sheet sheet2 = wb.createSheet(second sheet); /注意Excel工作表名称不得超过31个字符 /并且不能包含以下任何字符: /0x0000、0x0003、冒号(:)、反斜杠()、星号(*)、问号(?)、正斜杠(/)、 /可以使用org.apache.poi.ss.util.WorkbookUtilcreateSafeSheetName(String nameProposal)/为了安全地创建有效名称,此实用程序用空格()替换无效字符 String safeName = WorkbookUtil.createSafeSheetName(OBriens sales*?); /returns OBriens sales Sheet sheet3 = wb.createSheet(safeName); FileOutputStream fileOut = new FileOutputStream(workbook.xls); wb.write(fileOut); fileOut.close();3、如何创建单元格 Workbook wb = new HSSFWorkbook(); /Workbook wb = new XSSFWorkbook(); CreationHelper createHelper = wb.getCreationHelper(); Sheet sheet = wb.createSheet(new sheet); /创建一个行并在其中放置一些单元格。 行号从0开始。 Row row = sheet.createRow(short)0); /创建一个单元格并在其中放入一个值。 Cell cell = row.createCell(0); cell.setCellValue(1); /或在一行上。 row.createCell(1).setCellValue(1.2); row.createCell(2).setCellValue( createHelper.createRichTextString(This is a string); row.createCell(3).setCellValue(true); /将输出写入文件 FileOutputStream fileOut = new FileOutputStream(workbook.xls); wb.write(fileOut); fileOut.close();4、如何创建日期单元格 Workbook wb = new HSSFWorkbook(); /Workbook wb = new XSSFWorkbook(); CreationHelper createHelper = wb.getCreationHelper(); Sheet sheet = wb.createSheet(new sheet); /创建一个行并在其中放置一些单元格。行为0 Row row = sheet.createRow(0); /创建一个单元格并在其中放置一个日期值。第一个单元格没有样式 /作为日期 Cell cell = row.createCell(0); cell.setCellValue(new Date(); /我们将第二个单元格设置为日期(和时间)。重要的是 /从Workbook 创建一个新的单元格样式,否则你可以结束 /修改内置样式,不仅影响这个单元格,而且影响其他单元格。 CellStyle cellStyle = wb.createCellStyle(); cellStyle.setDataFormat( createHelper.createDataFormat().getFormat(m/d/yy h:mm); cell = row.createCell(1); cell.setCellValue(new Date(); cell.setCellStyle(cellStyle); /你也可以将日期设置为java.util.Calendar cell = row.createCell(2); cell.setCellValue(Calendar.getInstance(); cell.setCellStyle(cellStyle); /将输出写入文件 FileOutputStream fileOut = new FileOutputStream(workbook.xls); wb.write(fileOut); fileOut.close();5、使用不同类型的单元格 Workbook wb = new HSSFWorkbook(); Sheet sheet = wb.createSheet(new sheet); 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(a string); row.createCell(4).setCellValue(true); row.createCell(5).setCellType(CellType.ERROR); /将输出写入文件 FileOutputStream fileOut = new FileOutputStream(workbook.xls); 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 rowEnd; 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 lastColumn; 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(workbook.xls); 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.java9、文件与InputStreams打开Workbook (.xls HSSFWorkbook或.xlsx XSSFWorkbook)时,可以从文件或InputStream加载Workbook 。 使用File对象允许较低的内存消耗,而InputStream需要更多的内存,因为它必须缓冲整个文件。如果使用WorkbookFactory,很容易使用一个或另一个:/使用文件 Workbook wb = WorkbookFactory.create(new File(MyExcel.xls); /使用InputStream,需要更多内存 Workbook wb = WorkbookFactory.create(new FileInputStream(MyExcel.xlsx);如果直接使用HSSFWorkbook或XSSFWorkbook,通常应该通过POIFSFileSystem或OPCPackage来完全控制生命周期(包括完成后关闭文件):/HSSFWorkbook, File NPOIFSFileSystem fs = new NPOIFSFileSystem(new File(file.xls); 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(file.xlsx); 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, CellStyle.VERTICAL_BOTTOM); createCell(wb, row, (short) 2, CellStyle.ALIGN_FILL, CellStyle.VERTICAL_CENTER); createCell(wb, row, (short) 3, CellStyle.ALIGN_GENERAL, CellStyle.VERTICAL_CENTER); createCell(wb, row, (short) 4, CellStyle.ALIGN_JUSTIFY, CellStyle.VERTICAL_JUSTIFY); createCell(wb, row, (short) 5, CellStyle.ALIGN_LEFT, CellStyle.VERTICAL_TOP); createCell(wb, row, (short) 6, CellStyle.ALIGN_RIGHT, CellStyle.VERTICAL_TOP); /Write the output to a file FileOutputStream fileOut = new FileOutputStream(xssf-align.xlsx); wb.write(fileOut); fileOut.close(); /* *创建一个单元格并以某种方式对齐它。 *: * param wbWorkbook * param row创建单元格的行 * param column创建单元格的列号 * param对齐单元格的水平对齐。 * / private static void createCell(Workbook wb, Row row, short column, short halign, short valign) Cell cell = row.createCell(column); cell.setCellValue(Align It); CellStyle cellStyle = wb.createCellStyle(); cellStyle.setAlignment(halign); cellStyle.setVerticalAlignment(valign); cell.setCellStyle(cellStyle); 11、使用边界 Workbook wb = new HSSFWorkbook(); Sheet sheet = wb.createSheet(new sheet); /创建一个行并在其中放置一些单元格。行为0。 Row row = sheet.createRow(1); /创建一个单元格并在其中放入一个值。 Cell cell = row.createCell(1); cell.setCellValue(4); /使用边框为单元格设置样式。 CellStyle style = wb.createCellStyle(); style.setBorderBottom(CellStyle.BORDER_THIN); style.setBottomBorderColor(IndexedColors.BLACK.getIndex(); style.setBorderLeft(CellStyle.BORDER_THIN); style.setLeftBorderColor(IndexedColors.GREEN.getIndex(); style.setBorderRight(CellStyle.BORDER_THIN); style.setRightBorderColor(IndexedColors.BLUE.getIndex(); style.setBorderTop(CellStyle.BORDER_MEDIUM_DASHED); style.setTopBorderColor(IndexedColors.BLACK.getIndex(); cell.setCellStyle(style); /将输出写入文件 FileOutputStream fileOut = new FileOutputStream(workbook.xls); wb.write(fileOut); fileOut.close();12、填充和颜色 Workbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet(new sheet); /创建一个行并在其中放置一些单元格。 行为0。 Row row = sheet.createRow(short) 1); /Aqua背景 CellStyle style = wb.createCellStyle(); style.setFillBackgroundColor(IndexedColors.AQUA.getIndex(); style.setFillPattern(CellStyle.BIG_SPOTS); Cell cell = row.createCell(short) 1); cell.setCellValue(X); cell.setCellStyle(style); /橙色“前景”,前景是填充前景而不是字体颜色。 style = wb.createCellStyle(); style.setFillForegroundColor(IndexedColors.ORANGE.getIndex(); style.setFillPattern(CellStyle.SOLID_FOREGROUND); cell = row.createCell(short) 2); cell.setCellValue(X); cell.setCellStyle(style); /将输出写入文件 FileOutputStream fileOut = new FileOutputStream(workbook.xls); wb.write(fileOut); fileOut.close();13、合并单元格Workbook wb = new HSSFWorkbook(); Sheet sheet = wb.createSheet(new sheet); Row row = sheet.createRow(short) 1); Cell cell = row.createCell(short) 1); cell.setCellValue(This is a test of merging); sheet.addMergedRegion(new CellRangeAddress( 1,/第一行(基于0) 1,/最后一行(0-based) 1,/第一列(基于0) 2 /最后一列(从0开始) ); /将输出写入文件 FileOutputStream fileOut = new FileOutputStream(workbook.xls); wb.write(fileOut); fileOut.close();14、使用字体 Workbook wb = new HSSFWorkbook(); Sheet sheet = wb.createSheet(new sheet); /创建一个行并在其中放置一些单元格。 行为0。 Row row = sheet.createRow(1); /创建一个新的字体并修改它。 Font font = wb.createFont(); font.setFontHeightInPoints(short)24); font.setFontName(Courier New); font.setItalic(true); font.setStrikeout(true); /字体设置为样式,以创建一个新的来使用。 CellStyle style = wb.createCellStyle(); style.setFont(font); /创建一个单元格并在其中放入一个值 Cell cell = row.createCell(1); cell.setCellValue(This is a test of fonts); cell.setCellStyle(style); /将输出写入文件 FileOutputStream fileOut = new FileOutputStream(workbook.xls); wb.write(fileOut); fileOut.close();注意,Workbook 中唯一字体的最大数量限制为32767(最大正短)。 您应该在应用程序中重用字体,而不是为每个单元格创建字体。 例子:Wrong: for (int i = 0; i 10000; i+) Row row = sheet.createRow(i); Cell cell = row.createCell(short) 0); CellStyle style = workbook.createCellStyle(); Font font = workbook.createFont(); font.setBoldweight(Font.BOLDWEIGHT_BOLD); style.setFont(font); cell.setCellStyle(style); Correct: CellStyle style = workbook.createCellStyle(); Font font = workbook.createFont(); font.setBoldweight(Font.BOLDWEIGHT_BOLD); style.setFont(font); for (int i = 0; i 10000; i+) Row row = sheet.createRow(i); Cell cell = row.createCell(short) 0); cell.setCellStyle(style); 15、自定义颜色HSSF: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); HSSFRow row = sheet.createRow(short) 0); HSSFCell cell = row.createCell(short) 0); cell.setCellValue(Default Palette); /从标准调色板应用一些颜色, /如前面的例子。 /我们将在石灰背景上使用红色文本 HSSFCellStyle style = wb.createCellStyle(); style.setFillForegroundColor(HSSFColor.LIME.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); HSSFFont font = wb.createFont(); font.setColor(HSSFColor.RED.index); style.setFont(font); cell.setCellStyle(style); /保存为默认调色板 FileOutputStream out = new FileOutputStream(default_palette.xls); wb.write(out); out.close(); /现在,让我们在调色板中替换RED和LIME /具有更有吸引力的组合 /(可爱地借用了) cell.setCellValue(Modified Palette); /为Workbook 创建自定义调色板 HSSFPalette palette = wb.getCustomPalette(); /用 red替换标准红色 palette.setColorAtIndex(HSSFColor.RED.index, (byte) 153, /RGB red (0-255) (byte) 0, /RGB green (byte) 0 /RGB blue ); /用金取代石灰 palette.setColorAtIndex(HSSFColor.LIME.index, (byte) 255, (byte) 204, (byte) 102); /用修改的调色板保存 /注意,无论我们以前使用过RED还是LIME, /新颜色神奇地出现 out = new FileOutputStream(modified_palette.xls); wb.write(out); out.close(); XSSF: XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet sheet = wb.createSheet(); XSSFRow row = sheet.createRow(0); XSSFCell cell = row.createCell( 0); cell.setCellValue(custom XSSF colors); XSSFCellStyle style1 = wb.createCellStyle(); style1.setFillForegroundColor(new XSSFColor(new java.awt.Color(128, 0, 128); style1.setFillPattern(CellStyle.SOLID_FOREGROUND);16、读写 InputStream inp = new FileInputStream(workbook.xls); /InputStream inp = new FileInputStream(workbook.xlsx); Workbook wb = WorkbookFactory.create(inp); Sheet sheet = wb.getSheetAt(0); Row row = sheet.getRow(2); Cell cell = row.getCell(3); if (cell = null) cell = row.createCell(3); cell.setCellType(CellType.STRING); cell.setCellValue(a test); /Write the output to a file FileOutputStream fileOut = new FileOutputStream(workbook.xls); wb.write(fileOut); fileOut.close();17、在单元格中使用换行符。Workbook wb = new XSSFWorkbook(); /or new HSSFWorkbook(); Sheet sheet = wb.createSheet(); Row row = sheet.createRow(2); Cell cell = row.createCell(2); cell.setCellValue(Use n with word wrap on to create a new line); /启用换行符,你需要设置一个单元格样式与wrap = true CellStyle cs = wb.createCellStyle(); cs.setWrapText(true); cell.setCellStyle(cs); /增加行高以容纳两行文本 row.setHeightInPoints(2*sheet.getDefaultRowHeightInPoints(); /调整列宽以适合内容 sheet.autoSizeColumn(short)2); FileOutputStream fileOut = new FileOutputStream(ooxml-newlines.xlsx); wb.write(fileOut); fileOut.close();18、创建用户定义的数据格式 Workbook wb = new HSSFWorkbook(); Sheet sheet = wb.createSheet(format sheet); CellStyle style; DataFormat format = wb.createDataFormat(); Row row; Cell cell; short rowNum = 0; short colNum = 0; row = sheet.createRow(rowNum+); cell = row.createCell(colNum); cell.setCellValue(11111.25); style = wb.createCellStyle(); style.setDataFormat(format.getFormat(0.0); cell.setCellStyle(style); row = sheet.createRow(rowNum+); cell = row.createCell(colNum); cell.setCellValue(11111.25); style = wb.createCellStyle(); style.setDataFormat(format.getFormat(#,#0.0000); cell.setCellStyle(style); FileOutputStream fileOut = new FileOutputStream(workbook.xls); wb.write(fileOut); fileOut.close();19、将单页调整为一页Workbook wb = new HSSFWorkbook(); Sheet sheet = wb.createSheet(format sheet); PrintSetup ps = sheet.getPrintSetup(); sheet.setAutobreaks(true); ps.setFitHeight(short)1); ps.setFitWidth(short)1); /为电子表格创建各种单元格和行。 FileOutputStream fileOut = new FileOutputStream(workbook.xls); wb.write(fileOut); fileOut.close();20、设置工作表的打印区域Workbook wb = new HSSFWorkbook(); Sheet sheet = wb.createSheet(Sheet1); /设置第一张纸的打印区域 wb.setPrintArea(0, $A$1:$C$2); /或者 wb.setPrintArea( 0,/sheet index 0,/开始列 1,/结束列 0,/开始行 0 /结束行 ); FileOutputStream fileOut = new FileOutputStream(workbook.xls); wb.write(fileOut); fileOut.close();21、在工作表的页脚上设置页码Workbook wb = new HSSFWorkbook(); /or new XSSFWorkbook(); Sheet sheet = wb.createSheet(format sheet); Footer footer = sheet.getFooter(); footer.setRight( Page + HeaderFooter.page() + of + HeaderFooter.numPages() ); /为电子表格创建各种单元格和行。 FileOutputStream fileOut = new FileOutputStream(workbook.xls); wb.write(fileOut); fileOut.close();22、移动行 Workbook wb = new HSSFWorkbook(); Sheet sheet = wb.createSheet(row sheet);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年初中物理特岗教师面试题预测及解题思路
- 2025年供应链经理竞聘面试预测题及应对策略解析
- 2025年炼钢工中级技能考核要点及模拟题解析
- 电力基金基础知识培训课件
- 2025年烘焙师中级技能进阶面试题及答案解析
- 2025年酒店管理实习生面试模拟题与答案解析
- 2025年医学影像学诊断技术考试预测题集
- 2025年特岗教师招聘考试复习资料初中生物电子版
- 2025年程序员Java开发面试技巧与预测题
- 电信禁毒安全知识培训课件
- 准东-华东±1100kv特高压直流输电线路工程杆塔设计原则
- krones旋盖系统控制原理及参数设定
- GB/T 708-2019冷轧钢板和钢带的尺寸、外形、重量及允许偏差
- GB/T 40549-2021焦炭堆积密度小容器测定方法
- GB/T 17395-2008无缝钢管尺寸、外形、重量及允许偏差
- GB 15630-1995消防安全标志设置要求
- 实习协议模板(最新版)
- 《新视野大学英语预备级1》教案
- 车间拆除及场地土壤治理与地下水修复工程项目技术方案工程方案和设备方案
- 无跨越架封网装置计算程序(直接求解)
- 《病理检验技术》课程标准
评论
0/150
提交评论