poi帮助教程
poi教程
poi教程Poi教程概述:Poi是一款Java库,用于处理Microsoft Office格式文件,如Excel、Word和PowerPoint。
它提供了丰富的API,使开发人员能够读取、写入和修改这些文件。
Poi教程内容:1. 安装Poi库:首先,你需要下载并安装Poi库。
你可以从Apache的官方网站上找到最新版本的Poi库。
安装过程包括将Poi库添加到你的Java项目的构建路径中。
2. 创建Excel文档:使用Poi,你可以创建一个新的Excel文档。
你可以定义工作表、行和单元格,并在单元格中添加数据。
你还可以设置单元格的格式,如字体、颜色和边框。
3. 读取Excel文件:Poi可以读取现有的Excel文件。
你可以打开一个文件并读取工作表、行和单元格中的数据。
你还可以根据需要筛选和处理数据。
4. 写入Excel文件:除了读取数据,Poi还可以将数据写入现有的Excel文件。
你可以创建新的工作表、行和单元格,并在其中插入数据。
你可以使用Poi的API来设置单元格的格式和其他属性。
5. 处理Word和PowerPoint文件:除了处理Excel文件,Poi还可以读取和写入Word和PowerPoint文件。
你可以打开Word文档并访问其中的段落、表格和其他元素。
你还可以修改PowerPoint演示文稿中的幻灯片、文本和图像。
6. 添加图表和图像:Poi提供了创建和修改图表的功能。
你可以使用Poi的API创建各种类型的图表,并在其中添加数据。
此外,你还可以在Excel文件中添加图像,并设置其大小、位置和其他属性。
7. 导出数据:一旦你完成了对Excel、Word或PowerPoint文件的处理,你可以使用Poi将其导出为其他格式,如PDF或HTML。
这使得你可以轻松地共享和打印处理过的文件。
8. 错误处理和异常处理:在使用Poi时,可能会遇到各种错误和异常。
你需要学会如何正确处理这些错误,以确保你的代码能够顺利运行。
poi 读取条件格式 -回复
poi 读取条件格式-回复Excel是一款功能强大的电子表格软件,可用于数据分析、数据处理、图表制作等。
它提供了许多有用的功能,其中之一是条件格式,它可以按照特定的条件来自动设置单元格的样式。
在本文中,我们将讨论如何使用poi 读取条件格式,并一步一步地解释该过程。
步骤一:准备工作首先,我们需要按照以下步骤准备工作:1. 确保你已经安装了Java Development Kit(JDK)和Eclipse集成开发环境(IDE)。
2. 下载并导入Apache POI库。
你可以从Apache的官方网站上下载POI 库,并将其导入到你的Eclipse项目中。
3. 确保你已经有一个Excel文件,其中包含条件格式。
步骤二:打开Excel文件在使用POI读取条件格式之前,我们首先需要打开Excel文件。
以下是使用POI打开Excel文件的示例代码:javaFileInputStream fis = newFileInputStream("path_to_your_excel_file");Workbook workbook = new XSSFWorkbook(fis);Sheet sheet = workbook.getSheetAt(0);在这段代码中,我们使用`FileInputStream`类来打开Excel文件,并使用`XSSFWorkbook`类和`getSheetAt()`方法来获取第一个工作表。
步骤三:获取单元格的条件格式一旦我们打开了Excel文件,我们就可以开始获取单元格的条件格式了。
以下是一个示例代码,可以帮助你理解如何实现该功能:javaSheetConditionalFormatting sheetCF =sheet.getSheetConditionalFormatting(); ConditionalFormatting[] cfRules =sheetCF.getConditionalFormattings();for (ConditionalFormatting cf : cfRules) {CellRangeAddress[] cellRanges = cf.getFormattingRanges();for (CellRangeAddress cellRange : cellRanges) {int firstRow = cellRange.getFirstRow();int lastRow = cellRange.getLastRow();int firstCol = cellRange.getFirstColumn();int lastCol = cellRange.getLastColumn();for (int row = firstRow; row <= lastRow; row++) {Row currentRow = sheet.getRow(row);for (int col = firstCol; col <= lastCol; col++) {Cell cell = currentRow.getCell(col);获取单元格的条件格式,并进行相关操作}}}}在这段代码中,我们首先获取了工作表的条件格式,并使用`getConditionalFormattings()`方法将其存储在`cfRules`数组中。
最直观的poi的使用帮助(告诉你怎么使用poi的官网),操作word,excel,ppt
最直观的poi的使⽤帮助(告诉你怎么使⽤poi的官⽹),操作
word,excel,ppt
最直观的poi的使⽤帮助(告诉你怎么使⽤poi的官⽹),poi操作word,excel,ppt
写在最前⾯
其实poi的官⽹上⾯有poi的各种类和接⼝的使⽤说明,还有⾮常详细的样例,所以照着这些样例来进⾏poi的开发会变得很容易。
就是excel的帮助⽂档,每⼀个链接都是⼀个实例。
说明
官⽹的Conponents APIs就告诉我们操作office的每⼀种⽂件需要的组件。
⽐如说word就需要HWPF(⽤来操作word2003,后缀为.doc)和XWPF(⽤来操作word2007,后缀为.docx)
Conponent Map⾥⾯就有每⼀个版块所属的jar包,⽐如HWPF组件的jar包就是poi-scratchpad。
我们来看下载好的(如何下载后⾯会说)poi-3.17包,根据上⾯的所属关系,我们可以轻松知道HWPF组件要⽤到poi-3.17.jar包,⽽XHPF 要⽤到poi-ooxml-3.17.jar包。
下载
现在最新的poi的版本为poi-bin-3.17-20170915,我们就⽤这个说明
把我们要的poi-bin-3.17-20170915.zip jar包下载下来就好。
实例
下⾯我们来到官⽹找到操作word的两个组件HWPF和XWPF的操作样例
我们以HWPF的Quick Guide页⾯来做说明
从这个页⾯的最右下⾓箭头指向的位置点下去,就会得到样例界⾯
为了⽅便读者,直接把这个链接的传送门弄下来:
到这个界⾯就可以⾃⼰去找⾃⼰喜欢的实例了。
POI操作常用方法
POI操作常用方法一、POI简介Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
二、HSSF概况HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。
HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。
三、POI EXCEL文档结构类HSSFWorkbook excel文档对象HSSFSheet excel的sheet HSSFRow excel的行HSSFCell excel的单元格HSSFFont excel字体HSSFName 名称HSSFDataFormat 日期格式HSSFHeader sheet头HSSFFooter sheet尾HSSFCellStyle cell样式HSSFDateUtil 日期HSSFPrintSetup 打印HSSFErrorConstants 错误信息表四、EXCEL常用操作方法1、得到Excel常用对象Java代码1.POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:/test.xls"));2.//得到Excel工作簿对象3.HSSFWorkbook wb=new HSSFWorkbook(fs);4.//得到Excel工作表对象5.HSSFSheet sheet=wb.getSheetAt(0);6.//得到Excel工作表的行7.HSSFRow row=sheet.getRow(i);8.//得到Excel工作表指定行的单元格9.HSSFCell cell=row.getCell((short)j);10.cellStyle=cell.getCellStyle();//得到单元格样式11.POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:/test.xls"));12.//得到Excel工作簿对象13.HSSFWorkbook wb=new HSSFWorkbook(fs);14.//得到Excel工作表对象15.HSSFSheet sheet=wb.getSheetAt(0);16.//得到Excel工作表的行17.HSSFRow row=sheet.getRow(i);18.//得到Excel工作表指定行的单元格19.HSSFCell cell=row.getCell((short)j);20.cellStyle=cell.getCellStyle();//得到单元格样式2、建立Excel常用对象Java代码1.HSSFWorkbook wb=new HSSFWorkbook();//创建Excel工作簿对象2.HSSFSheet sheet=wb.createSheet("new sheet");//创建Excel 工作表对象3.HSSFRow row=sheet.createRow((short)0);//创建Excel工作表的行4.cellStyle=wb.createCellStyle();//创建单元格样式5.row.createCell((short)0).setCellStyle(cellStyle);//创建Excel 工作表指定行的单元格6.row.createCell((short)0).setCellValue(1);//设置Excel工作表的值7.HSSFWorkbook wb=new HSSFWorkbook();//创建Excel工作簿对象8.HSSFSheet sheet=wb.createSheet("new sheet");//创建Excel 工作表对象9.HSSFRow row=sheet.createRow((short)0);//创建Excel工作表的行10.cellStyle=wb.createCellStyle();//创建单元格样式11.row.createCell((short)0).setCellStyle(cellStyle);//创建Excel 工作表指定行的单元格12.row.createCell((short)0).setCellValue(1);//设置Excel工作表的值3、设置sheet名称和单元格容Java代码1.wb.setSheetName(1,"第一工作表",HSSFCell.ENCODING_UTF_16);2.cell.setEncoding((short)1);3.cell.setCellValue("单元格容");4.wb.setSheetName(1,"第一工作表",HSSFCell.ENCODING_UTF_16);5.cell.setEncoding((short)1);6.cell.setCellValue("单元格容");4、取得sheet的数目Java代码1.wb.getNumberOfSheets()2.wb.getNumberOfSheets()5、根据index取得sheet对象Java代码1.HSSFSheet sheet=wb.getSheetAt(0);2.HSSFSheet sheet=wb.getSheetAt(0);6、取得有效的行数Java代码1.int rowcount=sheet.getLastRowNum();2.int rowcount=sheet.getLastRowNum();7、取得一行的有效单元格个数Java代码1.row.getLastCellNum();2.row.getLastCellNum();8、单元格值类型读写Java代码1.cell.setCellType(HSSFCell.CELL_TYPE_STRING);//设置单元格为STRING类型2.cell.getNumericCellValue();//读取为数值类型的单元格容3.cell.setCellType(HSSFCell.CELL_TYPE_STRING);//设置单元格为STRING类型4.cell.getNumericCellValue();//读取为数值类型的单元格容9、设置列宽、行高Java代码1.sheet.setColumnWidth((short)column,(short)width);2.row.setHeight((short)height);3.sheet.setColumnWidth((short)column,(short)width);4.row.setHeight((short)height);10、添加区域,合并单元格Java代码1.Region region=new Region((short)rowFrom,(short)columnFrom,(short)rowT o2.,(short)columnT o);//合并从第rowFrom行columnFrom列3.sheet.addMergedRegion(region);//到rowTo行columnTo的区域4.//得到所有区域5.sheet.getNumMergedRegions()6.Region region=newRegion((short)rowFrom,(short)columnFrom,(short)rowT o7.,(short)columnT o);//合并从第rowFrom行columnFrom列8.sheet.addMergedRegion(region);//到rowTo行columnTo的区域9.//得到所有区域10.sheet.getNumMergedRegions()11、保存Excel文件Java代码1.FileOutputStream fileOut=new FileOutputStream(path);2.wb.write(fileOut);3.FileOutputStream fileOut=new FileOutputStream(path);4.wb.write(fileOut);12、根据单元格不同属性返回字符串数值Java代码1.public String getCellStringValue(HSSFCell cell){2.String cellValue="";3.switch(cell.getCellType()){4.case HSSFCell.CELL_TYPE_STRING://字符串类型5.cellValue=cell.getStringCellValue();6.if(cellValue.trim().equals("")||cellValue.trim().length()<=0)7.cellValue="";8.break;9.case HSSFCell.CELL_TYPE_NUMERIC://数值类型10.cellValue=String.valueOf(cell.getNumericCellValue());11.break;12.case HSSFCell.CELL_TYPE_FORMULA://公式13.cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);14.cellValue=String.valueOf(cell.getNumericCellValue());15.break;16.case HSSFCell.CELL_TYPE_BLANK:17.cellValue="";18.break;19.case HSSFCell.CELL_TYPE_BOOLEAN:20.break;21.case HSSFCell.CELL_TYPE_ERROR:22.break;23.default:24.break;25.}26.return cellValue;27.}28.public String getCellStringValue(HSSFCell cell){29.String cellValue="";30.switch(cell.getCellType()){31.case HSSFCell.CELL_TYPE_STRING://字符串类型32.cellValue=cell.getStringCellValue();33.if(cellValue.trim().equals("")||cellValue.trim().length()<=0)34.cellValue="";35.break;36.case HSSFCell.CELL_TYPE_NUMERIC://数值类型37.cellValue=String.valueOf(cell.getNumericCellValue());38.break;39.case HSSFCell.CELL_TYPE_FORMULA://公式40.cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);41.cellValue=String.valueOf(cell.getNumericCellValue());42.break;43.case HSSFCell.CELL_TYPE_BLANK:44.cellValue="";45.break;46.case HSSFCell.CELL_TYPE_BOOLEAN:47.break;48.case HSSFCell.CELL_TYPE_ERROR:49.break;50.default:51.break;52.}53.return cellValue;54.}13、常用单元格边框格式Java代码1.HSSFCellStyle style=wb.createCellStyle();2.style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);//下边框3.style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左边框4.style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框5.style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框6.HSSFCellStyle style=wb.createCellStyle();7.style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);//下边框8.style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左边框9.style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框10.style.setBorderT op(HSSFCellStyle.BORDER_THIN);//上边框14、设置字体和容位置Java代码1.HSSFFont f=wb.createFont();2. f.setFontHeightInPoints((short)11);//字号3. f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//加粗4.style.setFont(f);5.style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中6.style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTE R);//上下居中7.style.setRotation(short rotation);//单元格容的旋转的角度8.HSSFDataFormat df=wb.createDataFormat();9.style1.setDataFormat(df.getFormat("0.00%"));//设置单元格数据格式10.cell.setCellFormula(string);//给单元格设公式11.style.setRotation(short rotation);//单元格容的旋转的角度12.HSSFFont f=wb.createFont();13. f.setFontHeightInPoints((short)11);//字号14. f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//加粗15.style.setFont(f);16.style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中17.style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENT ER);//上下居中18.style.setRotation(short rotation);//单元格容的旋转的角度19.HSSFDataFormat df=wb.createDataFormat();20.style1.setDataFormat(df.getFormat("0.00%"));//设置单元格数据格式21.cell.setCellFormula(string);//给单元格设公式22.style.setRotation(short rotation);//单元格容的旋转的角度15、插入图片Java代码1.//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray2.ByteArrayOutputStream byteArrayOut=new ByteArrayOutputStream();3.BufferedImage bufferImg=ImageIO.read(new File("ok.jpg"));4.ImageIO.write(bufferImg,"jpg",byteArrayOut);5.//读进一个excel模版6.FileInputStream fos=new FileInputStream(filePathName+"/stencil.xlt");7.fs=new POIFSFileSystem(fos);8.//创建一个工作薄9.HSSFWorkbook wb=new HSSFWorkbook(fs);10.HSSFSheet sheet=wb.getSheetAt(0);11.HSSFPatriarch patriarch=sheet.createDrawingPatriarch();12.HSSFClientAnchor anchor=new HSSFClientAnchor(0,0,1023,255,(short)0,0,(short)10,10);13.patriarch.createPicture(anchor,wb.addPicture(byteArrayO ut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));14.//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray15.ByteArrayOutputStream byteArrayOut=new ByteArrayOutputStream();16.BufferedImage bufferImg=ImageIO.read(new File("ok.jpg"));17.ImageIO.write(bufferImg,"jpg",byteArrayOut);18.//读进一个excel模版19.FileInputStream fos=new FileInputStream(filePathName+"/stencil.xlt");20.fs=new POIFSFileSystem(fos);21.//创建一个工作薄22.HSSFWorkbook wb=new HSSFWorkbook(fs);23.HSSFSheet sheet=wb.getSheetAt(0);24.HSSFPatriarch patriarch=sheet.createDrawingPatriarch();25.HSSFClientAnchor anchor=new HSSFClientAnchor(0,0,1023,255,(short)0,0,(short)10,10);26.patriarch.createPicture(anchor,wb.addPicture(byteArrayO ut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));16、调整工作表位置Java代码1.HSSFWorkbook wb=new HSSFWorkbook();2.HSSFSheet sheet=wb.createSheet("format sheet");3.HSSFPrintSetup ps=sheet.getPrintSetup();4.sheet.setAutobreaks(true);5.ps.setFitHeight((short)1);6.ps.setFitWidth((short)1);7.HSSFWorkbook wb=new HSSFWorkbook();8.HSSFSheet sheet=wb.createSheet("format sheet");9.HSSFPrintSetup ps=sheet.getPrintSetup();10.sheet.setAutobreaks(true);11.ps.setFitHeight((short)1);12.ps.setFitWidth((short)1);17、设置打印区域Java代码1.HSSFSheet sheet=wb.createSheet("Sheet1");2.wb.setPrintArea(0,"$A$1:$C$2");3.HSSFSheet sheet=wb.createSheet("Sheet1");4.wb.setPrintArea(0,"$A$1:$C$2");18、标注脚注Java代码1.HSSFSheet sheet=wb.createSheet("format sheet");2.HSSFFooter footer=sheet.getFooter()3.footer.setRight("Page"+HSSFFooter.page()+"of"+HSSFFoo ter.numPages());4.HSSFSheet sheet=wb.createSheet("format sheet");5.HSSFFooter footer=sheet.getFooter()6.footer.setRight("Page"+HSSFFooter.page()+"of"+HSSFFoo ter.numPages());19、在工作单中清空行数据,调整行位置Java代码1.HSSFWorkbook wb=new HSSFWorkbook();2.HSSFSheet sheet=wb.createSheet("row sheet");3.//Create various cells and rows for spreadsheet.4.//Shift rows6-11on the spreadsheet to the top(rows0-5)5.sheet.shiftRows(5,10,-5);6.HSSFWorkbook wb=new HSSFWorkbook();7.HSSFSheet sheet=wb.createSheet("row sheet");8.//Create various cells and rows for spreadsheet.9.//Shift rows6-11on the spreadsheet to the top(rows0-5)10.sheet.shiftRows(5,10,-5);20、选中指定的工作表Java代码1.HSSFSheet sheet=wb.createSheet("row sheet");2.heet.setSelected(true);3.HSSFSheet sheet=wb.createSheet("row sheet");4.heet.setSelected(true);21、工作表的放大缩小Java代码1.HSSFSheet sheet1=wb.createSheet("new sheet");2.sheet1.setZoom(1,2);//50percent magnification3.HSSFSheet sheet1=wb.createSheet("new sheet");。
POI操作常用方法
POI操作常用方法
1.添加POI
在地图上添加POI是一个常见的操作,可以用来标注重要地点或者服
务设施。
要添加POI,首先需要获取地图的地理坐标信息,然后根据坐标
信息在地图上标注POI。
可以通过点击地图、输入地址、关键词等方式来
添加POI。
添加POI时可以设置POI的名称、分类、描述等信息,以便用
户更好地了解POI的信息。
2.POI
POI是一个常见的需求,在地图应用和位置服务中经常用到。
用户可
以通过输入关键词、选择分类、指定地点等方式来周边的POI。
POI时,
可以根据距离、评分、价格等条件来筛选结果,以便用户找到最合适的POI。
POI还可以通过模糊匹配、热门推荐、历史记录等方式提高的准确
性和效率。
4.更新POI
更新POI是一个必要的操作,可以保持POI信息的实时性和准确性。
在地图应用和位置服务中,地点信息可能会发生变化,比如新开业的商店、临时关闭的景点等。
要更新POI,可以通过定期检查、用户反馈、数据对
比等方式来更新POI信息,确保POI信息的准确性和完整性。
5.删除POI
删除POI是一个常见的操作,可以清理无效或者过时的POI信息。
在
地图应用和位置服务中,可能会出现POI信息错误、重复、过时等情况,
需要及时清理这些无效POI信息。
要删除POI,可以通过管理员权限、审
核机制、用户反馈等方式来删除无效POI,保持POI信息的质量和可靠性。
java_POI教程
java_POI教程
POI(Poor Obfuscation Implementation)是一个Apache基金会下
的开源项目,全称为Apache POI,提供了Java程序操作Office文档的
功能。
其中最常用的组件为POI.HSSF用于操作Excel文档、POI.XSSF用
于操作Excel 2024及以上版本的文档、POI.HSLF用于操作PowerPoint
文档以及POI.XSLF用于操作PowerPoint 2024及以上版本的文档。
1. Excel文档操作
2. Excel图表生成
POI.HSSF也支持在Excel文档中生成各种图表。
可以通过Sheet对
象的createDrawingPatriarch(方法创建绘图对象,并使用绘图对象的createChart(方法创建图表。
通过图表对象可以设置图表的标题、图例、
数据源等属性,并使用createData(方法创建数据区域,再使用setDataFormula(方法设置数据源等。
3. PowerPoint文档操作
4. Word文档操作
以上是POI的基本使用方法和常见功能的简要介绍。
实际使用POI时,还可以通过POI提供的API进行更加复杂的操作,例如合并单元格、设置
样式、添加图片等。
此外,POI还支持读写不同格式的Office文档,
如.xlsx、pptx和.docx等。
poi单元格指定编码集写入
poi单元格指定编码集写入POI是一个流行的Java库,用于处理Microsoft Office格式的文件。
在使用POI进行Excel文件操作时,我们经常需要将数据写入单元格。
本文将详细介绍如何使用POI来指定编码集写入Excel单元格。
## 1. 导入POI库我们需要导入POI库。
可以从Apache POI官方网站下载最新的POI二进制包,并将其添加到项目的类路径中。
## 2. 创建工作簿和工作表在开始写入数据之前,我们需要创建一个工作簿和一个工作表对象。
可以使用`HSSFWorkbook`类创建一个新的工作簿,并使用`createSheet()`方法创建一个新的工作表。
```java// 创建工作簿HSSFWorkbook workbook = new HSSFWorkbook();// 创建工作表HSSFSheet sheet = workbook.createSheet("Sheet1");```## 3. 创建单元格样式要指定编码集写入单元格,我们首先需要创建一个单元格样式对象,并设置其字体和编码集。
```java// 创建单元格样式CellStyle cellStyle = workbook.createCellStyle();// 创建字体对象Font font = workbook.createFont();font.setCharSet(FontCharset.GB2312.getValue()); // 设置编码集为GB2312// 将字体应用于样式cellStyle.setFont(font);```## 4. 写入数据到单元格现在我们可以开始将数据写入指定编码集的单元格了。
我们需要创建一个单元格对象,并将其添加到工作表中。
可以使用`setCellValue()`方法将数据写入单元格。
```java// 创建单元格HSSFRow row = sheet.createRow(0);HSSFCell cell = row.createCell(0);// 设置单元格样式cell.setCellStyle(cellStyle);// 写入数据到单元格cell.setCellValue("你好,世界!");```## 5. 保存工作簿到文件完成数据写入后,我们可以将工作簿保存到文件中。
Apache POI使用教程
Apache POI使用教程Apache POI是一个开源的Java库,用于操作Microsoft Office文件,例如Word、Excel和PowerPoint。
它提供了一套Java API,可用于读取、创建和修改这些文件的内容。
本教程将介绍Apache POI的基本用法和示例。
一、安装Apache POI要开始使用Apache POI,首先需要在项目中添加POI的依赖库。
可以通过Maven或手动下载POI的JAR文件来完成。
二、导入POI库在Java代码中导入POI库,以便可以使用其中的功能。
```javaimport org.apache.poi.*;```三、创建Excel文件使用Apache POI可以轻松地创建和编辑Excel文件。
下面是一个简单的示例,演示如何创建一个包含多个工作表和单元格的Excel文件。
```javaimport ermodel.*;import ermodel.*;public class CreateExcelFile {public static void main(String[] args) {Workbook workbook = new XSSFWorkbook();Sheet sheet1 = workbook.createSheet("Sheet1");Sheet sheet2 = workbook.createSheet("Sheet2");// 创建行和单元格Row row1 = sheet1.createRow(0);Cell cell1 = row1.createCell(0);cell1.setCellValue("Hello");// 保存Excel文件try {FileOutputStream outputStream = new FileOutputStream("example.xlsx");workbook.write(outputStream);outputStream.close();System.out.println("Excel file created successfully.");} catch (IOException e) {e.printStackTrace();}}}```四、读取Excel文件使用Apache POI可以方便地读取现有的Excel文件。
poi-tl用法
poi-tl用法Poitl是一种用于生成Word文件的模板引擎,具有简单易用、灵活高效的特点。
它可以帮助用户快速生成各种类型的文档,如报告、合同、简历等。
本文将一步一步回答关于Poitl模板使用方法的问题,帮助您更好地掌握这一工具。
第一步:安装和配置Poitl首先,您需要下载并安装Poitl模板引擎。
您可以通过官方网站或其他可信的软件下载平台获取该软件的最新版本。
安装完成后,您需要将Poitl配置到您的开发环境中。
具体配置方法可能因使用的开发工具而有所不同,但一般都是通过添加相关的依赖库到您的项目中,并在代码中引用这些库。
第二步:创建Poitl模板在使用Poitl之前,需要先创建一个模板文件。
您可以使用Microsoft Word等文档编辑工具,创建一个包含占位符的Word文件。
这些占位符将在生成文件时被具体的数据所替换。
在您的模板中,可以使用各种文本和样式编辑功能来设计您想要的文档格式。
您还可以添加表格、图片、图表等元素。
第三步:使用Poitl填充数据通过Poitl,您可以在模板中填充数据,用具体的值替换占位符。
以下是一些常见的数据填充操作示例:1.替换文本:您可以使用Poitl提供的replaceText方法,将某个占位符替换为指定的文本。
2.填充表格:如果您的模板中包含表格,您可以使用Poitl的 TableRenderPolicy功能,通过遍历数据列表,将每个元素填充到表格的每一行中。
3.插入图片:如果模板中需要插入图片,您可以使用Poitl的 PictureRenderPolicy功能,将指定的图片路径插入到模板中的指定位置。
通过使用这些方法,您可以根据实际需要进行相应的数据填充操作。
第四步:生成Word文件在所有数据填充操作完成后,您可以使用Poitl提供的Document类和 XWPFTemplate类来生成最终的Word文件。
使用这些类的write方法,您可以将填充好数据的模板文件写入硬盘上的指定位置。
poi数据使用
poi数据使用POI(Apache POI)是一个用于操作Microsoft Office格式文件(如doc、xls、ppt等)的Java API。
它提供了一组类和方法,使开发人员可以轻松地读取、写入和操作Office文档中的数据。
本文将介绍如何使用POI来处理poi数据。
二、POI数据读取1. 导入POI库首先,我们需要在项目中导入POI库。
可以下载POI的jar文件,然后将其添加到项目的classpath中。
2. 创建工作簿和工作表使用POI来读取poi数据之前,我们需要创建一个工作簿和一个工作表对象。
可以使用HSSFWorkbook和HSSFSheet类来分别代表工作簿和工作表。
3. 读取数据使用POI的API方法,我们可以逐行或逐列读取poi数据。
可以使用HSSFRow和HSSFCell类来分别代表行和单元格。
通过遍历行和列的方式,可以获取到相应的数据。
三、POI数据写入1. 创建工作簿和工作表与数据读取类似,我们首先需要创建一个工作簿和一个工作表对象。
可以使用HSSFWorkbook和HSSFSheet类来分别代表工作簿和工作表。
2. 写入数据使用POI的API方法,我们可以将数据写入到指定的单元格中。
可以使用HSSFRow和HSSFCell类来分别代表行和单元格。
可以通过设置单元格的值来进行数据的写入操作。
四、POI数据操作注意事项1. 数据格式转换在进行POI数据读取或写入操作时,需要注意数据的格式转换。
例如,将数字类型的数据转换为字符串,或将字符串类型的数据转换为日期类型。
2. 数据校验在写入数据之前,我们需要进行数据校验,确保所写入的数据符合需求。
例如,对于字符串类型的数据,可以进行长度、格式等校验。
3. 数据样式设置为了使POIpoi数据的呈现更加美观,我们可以设置数据的样式。
可以使用HSSFCellStyle类来设置单元格的字体、背景色、边框等样式。
本文介绍了如何使用POI对poi数据进行读取和写入操作。
poi常用方法
poi常用方法Poi是指POI(Poor Obfuscation Implementation),是一份Apache下开源的Java组件,主要用于操作Excel格式的文档。
Poi功能丰富,应用广泛,下面将围绕poi常用方法给大家做一篇介绍。
1.导入poi包在项目工程中,我们需要在pom.xml中引用poi相关的jar包,也可以在项目java源码中手动引用。
如果不想下载poi组件,也可以根据maven的配置文件向maven中心仓库请求自动下载。
2.创建工作簿使用poi操作Excel文档,第一步需要创建一个工作簿对象。
我们可以通过创建一个HSSFWorkbook对象或XSSFWorkbook对象来实现。
```HSSFWorkbook wb = new HSSFWorkbook();//创建xls文件XSSFWorkbook wb = new XSSFWorkbook();//创建xlsx文件```3.创建工作表Excel文档通常是由多个工作表组成,我们通过POI也可以创建工作表。
在创建工作簿之后,同样可以创建一个或多个工作表。
```HSSFSheet sheet = wb.createSheet();//创建xls工作表XSSFSheet sheet = wb.createSheet();//创建xlsx工作表```4.创建单元格Excel文档中常常有很多单元格,每个单元格都有固定的行和列。
POI也可以创建或修改单元格。
```HSSFRow row = sheet.createRow(0);//创建第一行HSSFCell cell = row.createCell(0);//创建第一列第一个单元格cell.setCellValue("这是一个单元格的值");//设置单元格的值```5.读取单元格我们可以使用POI来读取Excel文档中的单元格。
使用一个HSSFCell 对象可以读取一行数据的值。
POI培训资料
03
5. 处理数据
根据需要处理单元格中的数据,例如输出到控制台或保存到数据库中。
读取单个sheet表
示例代码
import ermodel.*;
```java
读取单个sheet表
import ermode
l.XSSFWorkbook;
通过读取单元格的值、类型、格式等属性和获取注释、 批注等操作来获取Excel文档的内容。
在Excel文档中插入公式和图表
01
使用Apache POI的FormulaEvaluator类来计算插入的公式。
02
使用Apache POI的Drawing类和其子类来创建和插入图表。
03
可以使用sheet对象的createDrawingPatriarch()方法来获取Drawing对象,然 后使用该对象的createChart()方法来创建图表。
读取单个sheet表
01
3. 获取Sheet对象
使用Workbook对象的getSheetAt()方法获取要读取的Sheet对象。
02
4. 读取单元格数据
使用Sheet对象的getRow()方法获取行对象,再使用getRow()方法获
取单元格对象,最后使用getCell()方法获取单元格中的数据。
广义
POI所指的信息可以是商品信息、促销优惠信息、服务信息、新闻资讯等等。
功能
01
02
03
查询
用户可以通过POI信息点 ,查询到周边的各类生活 服务信息。
发布
企业或商家通过POI发布 自身的促销、折扣信息等 ,吸引消费者关注并前往 消费。
分享
用户可以将POI信息分享 给朋友或亲人,让他们也 获取到相关的信息。
poi最全中文教程
象。它不象我们仅仅是用 csv 生成的没有格式的可以由 Excel 转换的东西,而是真正的 Excel
对象,你可以控制一些属性如 sheet,cell 等等。
首 先 , 理 解 一 下 一 个 Excel 的 文 件 的 组 织 形 式 , 一 个 Excel 文 件 对 应 于 一 个
workbook(HSSFWorkbook),一个 workbook 可以有多个 sheet(HSSFSheet)组成,
一个 sheet 是由多个 row(HSSFRow)组成,一个 row 是由多个 cell(HSSFCell)组成。
POI 可以到 下载到。实际运行时,需要有 poi 包就可以了。HSSF 提供
给用户使用的对象在 ermodel 包中,主要部分包括 Excel 对象,样式和格
row.createCell((short)2).setCellvalue("test"); //设置 cell 字符类型的值
row.createCell((short)3).setCellvalue(true); //设置 cell 布尔类型的值
HSSFCellStyle cellStyle = wb.createCellStyle(); //建立新的 cell 样式
private static void cteateCell(HSSFWorkbook wb,HSSFRow row,short col,short
align,String val){
HSSFCell cell = row.createCell(col);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
//在 sheet 里创建一行,参数为行号(第一行,此处可想象成数组)
POI中文帮助文档
7.3.1 对Excel的处理类下面通过HSSF提供的接口对Excel文件经行处理。
首先需要下载POI的包,可以到apache的官方网站下载,地址为:/jakarta/p oi/,本书采用的是poi-2.5.1-final-20040804.jar,读者可以下载当前的稳定版本。
把下载的包按照前面介绍的方式加入Build Path,然后新建一个ch7.po i包,并创建一个ExcelReader类。
ExcelReader类可以读取一个XLS文件,然后将其内容逐行提取出来,写入文本文件。
其代码如下。
代码7.6public class ExcelReader {// 创建文件输入流private BufferedReader reader = null;// 文件类型private String filetype;// 文件二进制输入流private InputStream is = null;// 当前的Sheetprivate int currSheet;// 当前位置private int currPosition;// Sheet数量private int numOfSheets;// HSSFWorkbookHSSFWorkbook workbook = null;// 设置Cell之间以空格分割private static String EXCEL_LINE_DELIMITER = " ";// 设置最大列数private static int MAX_EXCEL_COLUMNS = 64;// 构造函数创建一个ExcelReaderpublic ExcelReader(String inputfile) throws IOException, Exception { // 判断参数是否为空或没有意义if (inputfile == null || inputfile.trim().equals("")) {throw new IOException("no input file specified");}// 取得文件名的后缀名赋值给filetypethis.filetype = inputfile.substring(stIndexOf(".") + 1);// 设置开始行为0currPosition = 0;// 设置当前位置为0currSheet = 0;// 创建文件输入流is = new FileInputStream(inputfile);// 判断文件格式if (filetype.equalsIgnoreCase("txt")) {// 如果是txt则直接创建BufferedReader读取reader = new BufferedReader(new InputStreamReader(is));}else if (filetype.equalsIgnoreCase("xls")) {// 如果是Excel文件则创建HSSFWorkbook读取workbook = new HSSFWorkbook(is);// 设置Sheet数numOfSheets = workbook.getNumberOfSheets();}else {throw new Exception("File Type Not Supported");}}// 函数readLine读取文件的一行public String readLine() throws IOException {// 如果是txt文件则通过reader读取if (filetype.equalsIgnoreCase("txt")) {String str = reader.readLine();// 空行则略去,直接读取下一行while (str.trim().equals("")) {str = reader.readLine();}return str;}// 如果是XLS文件则通过POI提供的API读取文件else if (filetype.equalsIgnoreCase("xls")) {// 根据currSheet值获得当前的sheetHSSFSheet sheet = workbook.getSheetAt(currSheet);// 判断当前行是否到但前Sheet的结尾if (currPosition > sheet.getLastRowNum()) {// 当前行位置清零currPosition = 0;// 判断是否还有Sheetwhile (currSheet != numOfSheets - 1) {// 得到下一张Sheetsheet = workbook.getSheetAt(currSheet + 1);// 当前行数是否已经到达文件末尾if (currPosition == sheet.getLastRowNum()) {// 当前Sheet指向下一张SheetcurrSheet++;continue;} else {// 获取当前行数int row = currPosition;currPosition++;// 读取当前行数据return getLine(sheet, row);}}return null;}// 获取当前行数int row = currPosition;currPosition++;// 读取当前行数据return getLine(sheet, row);}return null;}// 函数getLine返回Sheet的一行数据private String getLine(HSSFSheet sheet, int row) {// 根据行数取得Sheet的一行HSSFRow rowline = sheet.getRow(row);// 创建字符创缓冲区StringBuffer buffer = new StringBuffer();// 获取当前行的列数int filledColumns = rowline.getLastCellNum(); HSSFCell cell = null;// 循环遍历所有列for (int i = 0; i < filledColumns; i++) {// 取得当前Cellcell = rowline.getCell((short) i);String cellvalue = null;if (cell != null) {// 判断当前Cell的Typeswitch (cell.getCellType()) {// 如果当前Cell的Type为NUMERICcase HSSFCell.CELL_TYPE_NUMERIC: {// 判断当前的cell是否为Dateif (HSSFDateUtil.isCellDateFormatted(cell)) {// 如果是Date类型则,取得该Cell的Date值Date date = cell.getDateCellValue();// 把Date转换成本地格式的字符串cellvalue = cell.getDateCellValue().toLocaleString();}// 如果是纯数字else {// 取得当前Cell的数值Integer num = new Integer((int) cell.getNumericCellValue());cellvalue = String.valueOf(num);}break;}// 如果当前Cell的Type为STRINcase HSSFCell.CELL_TYPE_STRING:// 取得当前的Cell字符串cellvalue = cell.getStringCellValue().replaceAll("'", "''");break;// 默认的Cell值default:cellvalue = " ";}} else {cellvalue = "";}// 在每个字段之间插入分割符buffer.append(cellvalue).append(EXCEL_LINE_DELIMITER);}// 以字符串返回该行的数据return buffer.toString();}// close函数执行流的关闭操作public void close() {// 如果is不为空,则关闭InputSteam文件输入流if (is != null) {try {is.close();} catch (IOException e) {is = null;}}// 如果reader不为空则关闭BufferedReader文件输入流if (reader != null) {try {reader.close();} catch (IOException e) {reader = null;}}}}7.3.2 ExcelReader的运行效果下面创建一个main函数,用来测试上面的ExcelReader类,代码如下。
poi 读取数据的正确方法
poi 读取数据的正确方法POI是一个功能强大的Java库,可以用于读取、写入和操作Microsoft Office格式的文档,如Excel、Word和PowerPoint。
使用POI读取数据的正确方法如下:1. 导入POI库:首先,确保已经在项目中导入了POI库的jar文件。
你可以从Apache POI的官方网站上下载最新的POI库。
2. 创建工作簿:使用POI库的HSSFWorkbook类创建一个新的Excel工作簿对象。
工作簿是Excel文档的最高级别容器,可以包含多个工作表。
3. 打开工作表:使用工作簿对象的getSheet()方法打开特定的工作表。
在括号中传入工作表的名称或索引。
4. 读取单元格数据:使用工作表对象的getRow()和getCell()方法读取单元格中的数据。
getRow()方法根据行号获取行对象,getCell()方法根据列号或索引获取单元格对象。
使用单元格对象的getStringCellValue()、getNumericCellValue()或getDateCellValue()等方法获取特定类型的数据。
5. 遍历单元格数据:可以使用循环结构遍历工作表中所有单元格的数据。
首先使用工作表对象的getLastRowNum()方法获取最后一行的行号,然后使用getRow()和getCell()方法遍历每个单元格。
以下是一个简单的示例代码,演示如何使用POI读取Excel文件中的数据:```javaimport java.io.FileInputStream;import java.io.IOException;import ermodel.HSSFWorkbook;import ermodel.*;public class ExcelReader {public static void main(String[] args) {try {FileInputStream file = new FileInputStream("path/to/excel/file.xls"); Workbook workbook = new HSSFWorkbook(file);Sheet sheet = workbook.getSheet("Sheet1");// 遍历每一行和每一列,并读取数据for (Row row : sheet) {for (Cell cell : row) {if (cell.getCellType() == CellType.STRING) {System.out.print(cell.getStringCellValue() + "\t");} else if (cell.getCellType() == CellType.NUMERIC) {System.out.print(cell.getNumericCellValue() + "\t");} else if (cell.getCellType() == CellType.BOOLEAN) {System.out.print(cell.getBooleanCellValue() + "\t");}}System.out.println(); // 换行}workbook.close();file.close();} catch (IOException e) {e.printStackTrace();}}}```以上是使用POI读取数据的正确方法。
POI操作常用方法
POI操作常用方法POI(Poor Obfuscation Implementation)是一种用于操作Microsoft Office文件的Java库。
它提供了对Excel、Word和PowerPoint等文件的创建、读写和修改的功能。
POI操作常用的方法包括文件的创建、读取和写入、单元格的操作、格式设置、图表的创建和修改等。
1.文件的创建与读取:- 创建一个Excel文件:```Workbook workbook = new XSSFWorkbook(; // 创建一个新的Excel 文件Sheet sheet = workbook.createSheet("Sheet1"); // 创建一个名为Sheet1的工作表```- 读取一个Excel文件:```InputStream inputStream = newFileInputStream("path/to/file.xlsx");Workbook workbook = new XSSFWorkbook(inputStream); // 读取Excel文件Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表```2.单元格的操作:-创建一个单元格并设置值:```Row row = sheet.createRow(0); // 创建第一行Cell cell = row.createCell(0); // 创建第一列cell.setCellValue("Hello World"); // 设置单元格的值```-获取单元格的值:```Row row = sheet.getRow(0); // 获取第一行Cell cell = row.getCell(0); // 获取第一列String value = cell.getStringCellValue(; // 获取单元格的值```3.格式设置:-设置单元格的样式:```CellStyle style = workbook.createCellStyle(; // 创建样式对象Font font = workbook.createFont(; // 创建字体对象font.setBold(true); // 设置字体为粗体style.setFont(font); // 将字体应用于样式cell.setCellStyle(style); // 将样式应用于单元格```-设置单元格的格式:```DataFormat format = workbook.createDataFormat(; // 创建数据格式对象CellStyle style = workbook.createCellStyle(; // 创建样式对象style.setDataFormat(format.getFormat("#,#.00")); // 设置数据的格式,如数字格式为千分位cell.setCellStyle(style); // 将样式应用于单元格```4.图表的创建与修改:-创建一个柱状图:```Drawing<?> drawing = sheet.createDrawingPatriarch(; // 创建图纸对象ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 15); // 定义图表的位置和大小Chart chart = drawing.createChart(anchor); // 创建图表对象ChartAxis bottomAxis =chart.getChartAxisFactory(.createCategoryAxis(AxisPosition.BOTTO M); // 创建X轴对象ChartAxis leftAxis =chart.getChartAxisFactory(.createValueAxis(AxisPosition.LEFT); // 创建Y轴对象。
poi的settrackrevisions方法
poi的settrackrevisions方法POI库是一个Java库,用于处理Microsoft Office格式的文档文件,如Word、Excel和PowerPoint等。
POI库提供了一系列的API来操作这些文件,包括添加、读取、修改和删除文档中的内容等。
其中,它还提供了setTrackRevisions方法,用于跟踪文档中的修改。
setTrackRevisions方法的主要功能是在文档中设置修订功能。
修订功能是一种常用于多人协作编辑的功能,它可以跟踪文档的修改和变化,以便后续查看和审阅。
在POI库中,通过调用setTrackRevisions方法,可以将修订功能应用到指定的文档中。
下面,我们将详细介绍如何使用POI库的setTrackRevisions方法来设置文档的修订功能,从而实现多人协作编辑。
步骤1:导入POI库首先,您需要在您的Java项目中导入POI库。
您可以从POI官方网站上下载POI库的最新版本,并将其添加到您的项目中。
步骤2:创建文档对象接下来,您需要创建一个文档对象,以便操作和修改它。
在POI库中,不同的文件类型对应着不同的文档对象。
例如,如果您想要处理Word 文档,可以使用XWPFDocument类来创建一个Word文档对象。
示例代码如下所示:java导入POI库中相关的类import ermodel.XWPFDocument;创建一个空的Word文档对象XWPFDocument document = new XWPFDocument();步骤3:设置修订功能现在,您可以调用setTrackRevisions方法来设置文档的修订功能。
该方法接受一个布尔值参数,用于指定是否启用修订功能。
如果将参数设置为true,则启用修订功能;如果将参数设置为false,则禁用修订功能。
示例代码如下所示:java启用修订功能document.setTrackRevisions(true);步骤4:保存文档在完成设置修订功能后,您需要将修改后的文档保存到文件中。
poi 循环替换段落
poi 循环替换段落(原创版)目录1.介绍 POI 循环替换段落的功能2.说明如何使用 POI 循环替换段落3.举例说明具体操作过程4.总结循环替换段落的优点和适用场景正文1.介绍 POI 循环替换段落的功能POI(PowerPoint Object Model)是 Microsoft PowerPoint 的一种编程接口,通过该接口可以实现对 PowerPoint 文档的自动化操作。
其中,循环替换段落是 POI 的一个重要功能,它可以帮助用户快速地在多个幻灯片之间复制和替换段落,提高工作效率。
2.说明如何使用 POI 循环替换段落要使用 POI 循环替换段落,首先需要导入相应的 Python 库,如`python-pptx`。
接下来,按照以下步骤进行操作:(1) 创建一个新的 PowerPoint 文档或者打开现有的文档。
(2) 遍历文档中的所有幻灯片,获取每个幻灯片的段落文本。
(3) 编写一个循环,用于遍历幻灯片并复制和替换段落。
(4) 在循环中,将源幻灯片的段落文本复制到目标幻灯片中,完成替换。
(5) 保存修改后的 PowerPoint 文档。
3.举例说明具体操作过程下面是一个使用 Python 和`python-pptx`库实现循环替换段落的示例:```pythonimport pptxdef replace_paragraphs(src, dst):for slide in src.slides:for paragraph in slide.paragraphs:text = paragraph.textdst.slides[slide.slide_index].paragraphs[0].text = text # 打开源文档src = pptx.open("source.pptx")# 创建目标文档dst = pptx.Presentation()# 将源文档的第一个幻灯片复制到目标文档for slide in src.slides:dst.slides.append(slide.copy())# 循环替换段落replace_paragraphs(src, dst)# 保存目标文档dst.save("output.pptx")```4.总结循环替换段落的优点和适用场景循环替换段落功能可以帮助用户快速地在多个幻灯片之间复制和替换段落,提高工作效率。
POI操作大全(动态合并单元格为单元格生成一个自定义的数据显示格式自定义公式计算结果生
POI操作大全(动态合并单元格为单元格生成一个自定义的数据显示格式自定义公式计算结果生POI是一个用于操作Microsoft Office格式文件的Java库。
通过POI库,可以实现对Excel、Word和PowerPoint文件的读写操作。
本文将介绍POI库的一些常用操作,包括动态合并单元格、为单元格生成自定义的数据显示格式、自定义公式计算结果等。
一、动态合并单元格在Excel中,可以将多个相邻的单元格合并成一个单元格,以便显示更大的数据块。
POI库可以很方便地实现对合并单元格的操作。
1.创建合并区域:```javaCellRangeAddress region = new CellRangeAddress(rowStart, rowEnd, colStart, colEnd);sheet.addMergedRegion(region);```其中,rowStart和rowEnd表示合并区域的起始行和结束行,colStart和colEnd表示合并区域的起始列和结束列。
2.设置合并单元格的值:```javaCell cell = sheet.getRow(rowStart).createCell(colStart);cell.setCellValue("合并单元格的值");```这里,我们取合并区域的起始行和起始列,设置单元格的值。
二、为单元格生成一个自定义的数据显示格式在Excel中,可以对单元格的值设置格式,以便以不同的方式展示数据。
POI库提供了设置单元格格式的方法。
1.创建格式对象:```javaCellStyle cellStyle = workbook.createCellStyle(;```2.设置格式:```javaDataFormat dataFormat = workbook.createDataFormat(;short format = dataFormat.getFormat("自定义格式");cellStyle.setDataFormat(format);```其中,"自定义格式"是Excel中的一种格式化字符串。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
POI详解POI报表--用POI与Excel交互AURISOFT第一章POI简介--Jakata Poi HSSF:纯java的Excel解决方案在我们实际的开发中,表现层的解决方案虽然有多样,但是IE浏览器已成为最多人使用的浏览器,因为大家都用Windows。
在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统、银行系统)。
或者是:我们已经习惯用Excel打印。
Apache的Jakata项目的POI子项目,目前比较成熟的是HSSF接口,处理MSExcel对象。
它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel 对象,你可以控制一些属性如sheet,cell等等。
首先,理解一下一个Excel的文件的组织形式,一个Excel文件对应于一个workbook(HSSFWorkbook),一个workbook可以有多个sheet(HSSFSheet)组成,一个sheet是由多个row(HSSFRow)组成,一个row是由多个cell(HSSFCell)组成。
POI可以到下载到。
实际运行时,需要有poi包就可以了。
HSSF提供给用户使用的对象在ermodel包中,主要部分包括Excel对象,样式和格式,还有辅助操作。
有以下几种对象:HSSFWorkbook excel的文档对象HSSFSheet excel的表单HSSFRow excel的行HSSFCell excel的格子单元HSSFFont excel字体HSSFDataFormat 日期格式在poi1.7中才有以下2项:HSSFHeader sheet头HSSFFooter sheet尾(只有打印的时候才能看到效果)和这个样式HSSFCellStyle cell样式辅助操作包括HSSFDateUtil 日期HSSFPrintSetup 打印HSSFErrorConstants 错误信息表以下可能需要使用到如下的类import ermodel.HSSFCell;import ermodel.HSSFCellStyle;import ermodel.HSSFDataFormat;import ermodel.HSSFFont;import ermodel.HSSFRow;import ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import org.apache.poi.hssf.util.HSSFColor;先看poi的examples包中提供的最简单的例子,建立一个空xls文件。
import java.io.FileOutputStream;import java.io.IOException;import ermodel.HSSFWorkbook;public class ExcelSample1 {public static void main(String[] args) throws IOException {//创建一个excel文件HSSFWorkbook wb= new HSSFWorkbook();FileOutputStream fileOut= new FileOutputStream("c:\\workbook.xls");// FileOutputStream fileOut= new FileOutputStream("c:/workbook.xls");wb.write(fileOut);fileOut.close();}}通过这个例子,我们在c盘下建立的是一个空白的xls文件(不是空文件)。
在此基础上,我们可以进一步看其它的例子。
import ermodel.*;import java.io.FileOutputStream;import java.io.IOException;public class CreateCells{public static void main(String[] args) throws IOException{HSSFWorkbook wb = new HSSFWorkbook(); //建立新HSSFWorkbook对象HSSFSheet sheet = wb.createSheet("new sheet"); //建立新的sheet对象HSSFRow row = sheet.createRow((short)0);//在sheet里创建一行,参数为行号(第一行,此处可想象成数组)HSSFCell cell = row.createCell((short)0);//在row里建立新cell(单元格),参数为列号(第一列)cell.setCellvalue(1); //设置cell的整数类型的值row.createCell((short)1).setCellvalue(1.2); //设置cell浮点类型的值row.createCell((short)2).setCellvalue("test"); //设置cell字符类型的值row.createCell((short)3).setCellvalue(true); //设置cell布尔类型的值HSSFCellStyle cellStyle = wb.createCellStyle(); //建立新的cell样式cellStyle.setDataFormat(HSSFDataFormat. getBuiltinFormat("m/d/yy h:mm"));//设置cell样式为定制的日期格式HSSFCell dCell =row.createCell((short)4);dCell.setCellvalue(new Date()); //设置cell为日期类型的值dCell.setCellStyle(cellStyle); //设置该cell日期的显示格式HSSFCell csCell =row.createCell((short)5);csCell.setEncoding(HSSFCell.ENCODING_UTF_16);//设置cell编码解决中文高位字节截断csCell.setCellvalue("中文测试_Chinese Words Test"); //设置中西文结合字符串row.createCell((short)6).setCellType(HSSFCell.CELL_TYPE_ERROR);//建立错误cellFileOutputStream fileOut = new FileOutputStream("workbook.xls");wb.write(fileOut);fileOut.close();}}通过这个例子,我们可以清楚的看到xls文件从大到小包括了HSSFWorkbook HSSFSheet HSSFRow HSSFCell这样几个对象。
我们可以在cell中设置各种类型的值。
尤其要注意的是如果你想正确的显示非欧美的字符时,尤其象中日韩这样的语言,必须设置编码为16位的即是HSSFCell.ENCODING_UTF_16,才能保证字符的高8位不被截断而引起编码失真形成乱码。
其他测试可以通过参考examples包中的测试例子掌握poi的详细用法,包括字体的设置,cell大小和低纹的设置等。
需要注意的是POI是一个仍然在完善中的公开代码的项目,所以有些功能正在不断的扩充。
感觉上面的操作比较的繁琐,然后就自己写了一个方法。
这个方法不需要事先创建row 和cell,直接进行cteateCell就可以了,在程序中会自动进行判断,如果不存在的话会创建。
private static void cteateCell(HSSFWorkbook wb,HSSFRow row,short col,short align,String val){HSSFCell cell = row.createCell(col);cell.setEncoding(HSSFCell.ENCODING_UTF_16);cell.setCellValue(val);HSSFCellStyle cellstyle = wb.createCellStyle();cellstyle.setAlignment(align);cell.setCellStyle(cellstyle);}对里面的几个参数的说明:short col 应该是你的cell单元格的位置也就是列号;short align 应该是你的对齐方式;String val 应该是你单元格里面要添加的值;具体的调用如下:HSSFRow row = sheet.createRow((short)1);cteateCell(wb,row,(short)0,HSSFCellStyle.ALIGN_CENTER_SELECTION,"SampleID");在上边的例子里我们看到了要设置一个单元格里面信息的格式(例如,要将信息居中)设置的操作如下:HSSFCellStyle cellstyle = wb.createCellStyle();cellstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);cell.setCellStyle(cellstyle);还有我们我们经常会用到的合并单元格,在这里我们也有这样的操作,代码如下:sheet.addMergedRegion(new Region(1,(short)1,2,(short)4));这里面我们还要介绍一个经常会遇到的问题,就是怎么来冻结一个窗口。
poi也为我们集成了这样的事情了。
代码如下:sheet.createFreezePane(1,2);在这里我们需要注意的是一、该方法是在一个具体的sheet里面来进行操作。
二、方法createFreezepane;有2个参数。
前一个参数代表列;后一个参数代表行。
上边的代码对应的excel文件如下:我么在画面上看到了明显的两条黑线,这就是冻结的窗口。
然后我们来看一个完整的STRUTS的小例子,在这个例子里面我们要做的事情是要模拟移动公司的网上营业厅里面的一个功能,我们要把一个客户当月的通话记录和各种信息查询出来,并且生成一张excel报表。
首先,我们来看一下网上效果的截图。
然后就是我们具体的代码实现了。
struts-config.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "/dtds/struts-config_1_2.dtd"><struts-config><action-mappings><actionpath="/search"type="action.SearchAction"><forward name="success" path="/detial.jsp"/></action><actionpath="/down"type="action.DownAction"><forward name="display" path="/down.jsp" /></action></action-mappings><message-resources parameter="ApplicationResources" /></struts-config>index.jsp<%@ page contentType="text/html; charset=gb2312" language="java"%><html><head><title>欢迎进入POI-Excel文件报表系统</title></head><body><table align="center"><tr><td align="center">欢迎进入POI-Excel文件报表系统</td> </tr><tr><td align="center"><a href="<%=request.getContextPath()%>/search.do">进入查询页面</a></td></tr></table></body></html>连接数据库的SQLBean,这个bean和我们之前在分页里面用到的bean是一样的。