java 代码
1.生成(Excel)Workbook对象
创建HSSFWorkbook对象
创建 HSSFSheet 对象
创建HSSFRow对象
创建HSSFCell对象
2.将Workbook对象写入文件
设置单元格样式
HSSFCellStyle类代表一种单元格样式。可以通过这个类来设置单元格的边框样式、背景颜色、字体、水平和垂直对齐方式等等。
注意:如果我们定义了一种样式,把它赋给一些单元格。然后基于新的需要,更改该样式中的某个属性,再赋给另一些单元格。那么之前单元格样式的该属性也会被同时更改。
比如我们定义了样式,设置单元格背景色为红色:
然后把它赋给一个单元格:
然后更改样式中的背景色属性为蓝色:
然后赋给另一个单元格:
想当然,我们预计在最终结果中cell1的背景色为红色,cell2的背景色为蓝色。但是结果是:两个单元格的背景色都变成了蓝色。
遇到这种情况,要预先定义两种不同的单元格样式。
当一个EXCEL文件同时需要很多大同小异的单元格样式时,这样一一定义很麻烦。POI HSSF提供了一个HSSFCellUtil类(在org.apache.poi.hssf.usermodel.contrib包),里面有几个方法可以绕过HSSFCellStyle直接设定单元格的样式,但这几个方法会抛出NestableException异常,要处理这个异常,需要引用Apache的几个Common包:
合并单元格
HSSFSheet.addMergedRegion(new Region())方法可以合并单元格,Region()中的一个构造函数含有四个参数,分别代表起始行、起始列、结束行、结束列:
处理公式
处理链接
在POI中往单元格中写链接,是用HYPERLINK函数搞定的。
HYPERLINK函数包含两个参数,第一个参数是指向的URL地址,第二个参数是显示字串。
为了使链接效果更好,我们可以给链接所在单元格定义一种样式,使链接显示为有下划线的蓝色字串:
中文处理:
要在通过POI生成的EXCEL中正常显示中文,需要为单元格设置编码:
1.生成(Excel)Workbook对象
创建HSSFWorkbook对象
创建 HSSFSheet 对象
创建HSSFRow对象
创建HSSFCell对象
2.将Workbook对象写入文件
FileOutputStream fout = new FileOutputStream("t" + "sfname"); //文件名 ewb.write(fout); fout.close(); //create new excel file and return the file's name public String getMyExcel(String strsql) { String sfname = ""; sfname = this.getUniqueFilename(); if (null == sfname || sfname.trim().equals("")) { return ""; //error:getUniqueFilename failed. } //strsql = "select aac001,aac002,aac003,aac004,aae036 from ac01 where datediff(yy,aae036,getdate()) = 0 "; if (null == strsql || strsql.trim().equals("")) { return ""; // } Connection conn = null; PreparedStatement pst = null; ResultSet rs = null; try { conn = getConnection(); pst = conn.prepareStatement(strsql); rs = pst.executeQuery(); if (null == rs) { return ""; //error. } boolean bHave = rs.next(); if (!bHave) { return ""; //no record. } HSSFWorkbook ewb = new HSSFWorkbook(); HSSFSheet esh = ewb.createSheet("list01"); HSSFRow erow = null; HSSFCell ecell = null; //HSSFFont HSSFFont numFont = ewb.createFont(); //font.setFontHeightInPoints((short)24); numFont.setFontName("Courier New"); //song HSSFFont font = ewb.createFont(); font.setFontHeightInPoints( (short) 12); font.setFontName("宋体"); //font.setItalic(true); // Fonts are set into a style so create a new one to use. HSSFCellStyle style = ewb.createCellStyle(); style.setFont(font); //HSSFCellStyle HSSFCellStyle cellNumStyle = ewb.createCellStyle(); cellNumStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT); cellNumStyle.setFont(font); cellNumStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0")); //HSSFDataFormat df = wb.createDataFormat(); //style.setDataFormat(df.getFormat("#,##0.00")); HSSFCellStyle cellTxtStyle = ewb.createCellStyle(); cellTxtStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); cellTxtStyle.setFont(font); cellTxtStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("text")); HSSFCellStyle cellDateStyle = ewb.createCellStyle(); cellDateStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); cellDateStyle.setFont(font); cellDateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat( "m/d/yy h:mm")); int currow = 0; //当前行 //生成列标题 int colNum = 0; //列 ResultSetMetaData rsmd = rs.getMetaData(); colNum = rsmd.getColumnCount(); erow = esh.createRow(currow++); //标题行 for (short j = 0; j < colNum; j++) { ecell = erow.createCell(j); ecell.setEncoding(HSSFCell.ENCODING_UTF_16); ecell.setCellValue(rsmd.getColumnName(j + 1)); ecell.setCellStyle(cellTxtStyle); } //详细列表 while (bHave) { //get row. //create row. erow = esh.createRow(currow); for (short i = 0; i < colNum; i++) { int dataType = rsmd.getColumnType(i + 1); //create cell. ecell = erow.createCell(i); ecell.setEncoding(HSSFCell.ENCODING_UTF_16); switch (dataType) { case Types.NUMERIC: ecell.setCellValue(rs.getDouble(i + 1)); ecell.setCellStyle(cellNumStyle); break; case Types.CHAR: case Types.LONGVARCHAR: case Types.VARCHAR: ecell.setCellValue(rs.getString(i + 1)); ecell.setCellStyle(cellTxtStyle); break; case Types.DATE: ecell.setCellValue(rs.getDate(i + 1)); ecell.setCellStyle(cellDateStyle); break; case Types.TIME: ecell.setCellValue(rs.getTime(i + 1)); ecell.setCellStyle(cellDateStyle); break; case Types.TIMESTAMP: ecell.setCellValue(rs.getTimestamp(i + 1)); ecell.setCellStyle(cellDateStyle); break; default: ecell.setCellValue(rs.getString(i + 1)); ecell.setCellStyle(cellTxtStyle); } } bHave = rs.next(); currow++; } FileOutputStream fout = new FileOutputStream("t" + "sfname"); ewb.write(fout); fout.close(); } catch (Exception sqle) { // sqle.printStackTrace(); return ""; } finally { try { if (null != rs) { rs.close(); rs = null; } if (null != pst) { pst.close(); pst = null; } if (null != conn) { conn.close(); conn = null; } } catch (Exception exx) { // } } return sfname; }
设置单元格样式
HSSFCellStyle类代表一种单元格样式。可以通过这个类来设置单元格的边框样式、背景颜色、字体、水平和垂直对齐方式等等。
HSSFCellStyle titleStyle = workbook.createCellStyle(); titleStyle.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE); titleStyle.setBorderLeft((short)1); titleStyle.setBorderRight((short)1); titleStyle.setBorderTop(HSSFCellStyle.BORDER_DOUBLE); titleStyle.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index); titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
注意:如果我们定义了一种样式,把它赋给一些单元格。然后基于新的需要,更改该样式中的某个属性,再赋给另一些单元格。那么之前单元格样式的该属性也会被同时更改。
比如我们定义了样式,设置单元格背景色为红色:
HSSFCellStyle cellStyle = workbook.createCellStyle(); cellStyle.setFillForegroundColor(HSSFColor.RED.index); cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
然后把它赋给一个单元格:
HSSFCell cell1 = row.createCell((short)1); cell1.setCellStyle(cellStyle);
然后更改样式中的背景色属性为蓝色:
cellStyle.setFillForegroundColor(HSSFColor.BLUE.index);
然后赋给另一个单元格:
HSSFCell cell2 = row.createCell((short)2); cell2.setCellStyle(cellStyle);
想当然,我们预计在最终结果中cell1的背景色为红色,cell2的背景色为蓝色。但是结果是:两个单元格的背景色都变成了蓝色。
遇到这种情况,要预先定义两种不同的单元格样式。
当一个EXCEL文件同时需要很多大同小异的单元格样式时,这样一一定义很麻烦。POI HSSF提供了一个HSSFCellUtil类(在org.apache.poi.hssf.usermodel.contrib包),里面有几个方法可以绕过HSSFCellStyle直接设定单元格的样式,但这几个方法会抛出NestableException异常,要处理这个异常,需要引用Apache的几个Common包:
commons-beanutils.jar commons-beanutils-bean-collections.jar commons-beanutils-core.jar commons-lang.jar commons-logging-api.jar
合并单元格
HSSFSheet.addMergedRegion(new Region())方法可以合并单元格,Region()中的一个构造函数含有四个参数,分别代表起始行、起始列、结束行、结束列:
sheet.addMergedRegion(new Region(startRow,startCell,endRow,endCell)));
处理公式
HSSFCell.setCellFormula()方法用来在EXCEL单元格中写入公式。 cell = row.createCell((short)(dataFlag)); cell.setCellType(HSSFCell.CELL_TYPE_FORMULA); cell.setCellFormula("SUM("A1:D1")"); cell.setCellStyle(nameStyle);
处理链接
在POI中往单元格中写链接,是用HYPERLINK函数搞定的。
HYPERLINK函数包含两个参数,第一个参数是指向的URL地址,第二个参数是显示字串。
cell = row.createCell((short)(dataFlag)); cell.setCellType(HSSFCell.CELL_TYPE_FORMULA); cell.setCellFormula("HYPERLINK('链接地址http...')"); cell.setCellStyle(linkStyle);
为了使链接效果更好,我们可以给链接所在单元格定义一种样式,使链接显示为有下划线的蓝色字串:
HSSFCellStyle linkStyle = workbook.createCellStyle(); linkStyle.setBorderBottom((short)1); linkStyle.setBorderLeft((short)1); linkStyle.setBorderRight((short)1); linkStyle.setBorderTop((short)1); linkStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index); linkStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); HSSFFont font = workbook.createFont(); font.setFontName(HSSFFont.FONT_ARIAL); font.setUnderline((byte)1); font.setColor(HSSFColor.BLUE.index); linkStyle.setFont(font);
中文处理:
要在通过POI生成的EXCEL中正常显示中文,需要为单元格设置编码:
cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("部门"); Java使用HSSF读取Excel表中公式列的方法 FileInputStream fis = new FileInputStream("c:/temp/test.xls"); HSSFWorkbook wb = new HSSFWorkbook(fis); HSSFSheet sheet = wb.getSheetAt(0); HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet, wb); // suppose your formula is in B3 CellReference cellReference = new CellReference("B3"); HSSFRow row = sheet.getRow(cellReference.getRow()); HSSFCell cell = row.getCell(cellReference.getCol()); //设置单元格所在行 evaluator.setCurrentRow(row); HSSFFormulaEvaluator.CellValue cellValue = evaluator.evaluate(cell); switch (cellValue.getCellType()) { case HSSFCell.CELL_TYPE_BOOLEAN: System.out.println(cellValue.getBooleanValue()); break; case HSSFCell.CELL_TYPE_NUMERIC: System.out.println(cellValue.getNumberValue()); break; case HSSFCell.CELL_TYPE_STRING: System.out.println(cellValue.getStringValue()); break; case HSSFCell.CELL_TYPE_BLANK: break; case HSSFCell.CELL_TYPE_ERROR: break; // CELL_TYPE_FORMULA will never happen case HSSFCell.CELL_TYPE_FORMULA: break; }
发表评论
-
要哈希不要嘻哈
2011-05-30 17:45 875在阅读JAVA中HashMap的源码时,以前数据结构学的都又回 ... -
have a rest
2011-03-21 23:47 812看了Roy Thomas Fielding博士的论文,做个记录 ... -
win7自动关机
2011-02-23 08:51 1025输入 cmd 在cmd里再输入 ... -
window命令集合
2011-01-04 20:09 880winver---------检查Windows版本 wmi ... -
win7 4g
2010-12-27 11:31 1283软件用途,使win 7 操作 ... -
Notepad++主题
2010-12-21 17:37 1344Textmate Theme Directory里找一个你喜欢 ... -
远程桌面+花生壳控制adsl动态ip用户的电脑
2010-12-20 22:59 1827远程桌面+花生壳控制a ... -
显卡排名
2010-12-16 12:08 799显卡排名网站 http://www.notebookchec ... -
linux 命令
2010-10-26 20:55 751Linux 文件命令精通指南 ... -
什么是架构师
2009-10-27 00:14 1077架构师是软件行业中一 ... -
Bad Smell & Refactoring
2009-09-08 23:15 845原创作者: 王杲杲 Bad Sm ...
相关推荐
Apache POI库是一个开源的Java库,可以帮助开发人员处理Microsoft Office格式的文档,例如Word文档、Excel电子表格和PowerPoint演示文稿等。以下是Apache POI库的详细介绍: 支持多种Office格式:Apache POI库支持...
Apache POI是一个开源项目,由Apache软件基金会维护,专门用于处理Microsoft Office格式的文件,如Word(.doc/.docx)、Excel(.xls/.xlsx)、PowerPoint(.ppt/.pptx)等。这个资源包是Java开发者在跨平台上读取、...
Apache POI 是一个著名的开源项目,主要为处理微软的Office文档格式提供了一个强大的Java API。在Android开发中,Apache POI 提供了处理Excel文件的能力,使得开发者可以在Android设备上进行Excel的读写操作,无需...
Apache POI 是一个开源项目,由Apache软件基金会维护,它提供了API用于读写Microsoft Office格式的文件,如Excel、Word和PowerPoint。最新版本为5.2.3,这个压缩包包含了该版本的jar包和源码,对于开发者来说是进行...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。POI库提供了一套API,使得开发者能够在Java环境中读取、写入和修改这些文件。在本例中,我们关注的是"Apache POI ...
Apache POI是Apache软件基金会提供的100%开源库。大多数中小规模的应用程序开发主要依赖于Apache POI(HSSF+ XSSF)。它支持Excel 库的所有基本功能; 然而,呈现和文本提取是它的主要特点。
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel。在Java环境中,Apache POI 提供了一套API,使得开发者能够创建、修改和读取Excel文件。这个压缩包包含了Apache POI库的多个版本...
Apache POI是Java领域中广泛使用的库,专为处理Microsoft Office格式的文件而设计,特别是Excel文档。这个库使得在不依赖Microsoft Office的情况下,开发者能够读取、创建、修改和操作XLS、XLSX等Excel文件。在本文...
Apache POI 是一个开源项目,由Apache软件基金会维护,它主要提供了一套API,用于读取、写入和操作Microsoft Office格式的文件,包括Excel、Word、PowerPoint等。这个资源包含Apache POI API的两个不同版本——3.8和...
"利用Java Apache POI 生成Word文档示例代码" 本篇文章主要介绍了利用Java Apache POI 生成Word文档示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。 首先,Apache POI是一个开源的Java库,由Apache...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel和Word。它提供了Java API,使得开发者能够方便地在Java应用程序中创建、修改和读取这些文件。以下是对Apache POI的一些关键知识点的...
Apache POI是一个开源项目,专为处理Microsoft Office格式的文件而设计,主要支持Microsoft的Excel、Word和PowerPoint文档。这个教程将引导你了解如何使用Apache POI库在Java环境中创建、修改和读取这些文件。 一、...
Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在本项目中,我们将关注如何使用Apache POI来根据预设的Word模板生成包含替换内容、循环列表和图片的动态Word...
Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在本案例中,我们将关注如何使用Apache POI来读取Word文档的内容,并将其以流的形式返回到Web应用程序的前端...
这个压缩包里有apache poi技术所使用的的jar包 包括:commons-beanutils-1.8.0.jar,commons-collections-3.2.jar,commons-io-2.2.jar,org.apache.servicemix.bundles.dom4j-2.1.1_1.jar,poi-3.9.jar,poi-ooxml-...
Apache POI 是一个开源项目,专门用于读写Microsoft Office格式的文件,如Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。在Java开发环境中,Apache POI 提供了丰富的API,使得开发者能够方便...
Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在"Apache POI 模板导出excel.rar"这个压缩包中,我们聚焦于使用Apache POI 3.16版本来生成基于Excel模板的...
本文将深入探讨如何使用ITEXT库导出PDF和Word,以及利用Apache POI库导出Excel报表文件。 首先,让我们来了解ITEXT库。ITEXT是一个开源Java库,专门用于创建和修改PDF文档。使用ITEXT,你可以方便地生成包含文本、...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。这个项目允许开发者在Java环境中创建、修改和读取这些文件,为跨平台的应用程序提供了强大的支持。Apache POI ...
### Apache POI 4.0:新增多种操作Office文件的功能 #### 一、Apache POI 简介 Apache POI 是一个流行的 Java API,用于处理 Microsoft Office 格式的文件,包括但不限于 Word(`.doc`),Excel(`.xls`, `.xlsx`...