POI3.5_HSSF_和XSSF_Excel操作快速入门手册
POI操作Excel常用方法总结

POI操作Excel常用方法总结POI操作Excel常用方法总结一、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常用对象view plaincopy to clipboardprint?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();//得到单元格样式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工作表的值3、设置sheet名称和单元格内容view plaincopy to clipboardprint?1.wb.setSheetName(1, "第一张工作表",HSSFCell.ENCODING_UTF_16);2.cell.setEncoding((short) 1);3.cell.setCellValue("单元格内容");1.wb.getNumberOfSheets()1.HSSFSheet sheet = wb.getSheetAt(0);1.int rowcount = sheet.getLastRowNum();view plaincopy to clipboardprint?1.row.getLastCellNum();1.cell.setCellType(HSSFCell.CELL_TYPE_STRING); //设置单元格为STRING类型2.cell.getNumericCellValue();//读取为数值类型的单元格内容1.sheet.setColumnWidth((short)column,(short)width);2.row.setHeight((short)height);1.Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowT o2.,(short)columnT o);//合并从第rowFrom行columnFrom列3.sheet.addMergedRegion(region);// 到rowTo行columnT o 的区域4.//得到所有区域5.sheet.getNumMergedRegions()1.FileOutputStream fileOut = new FileOutputStream(path);2.wb.write(fileOut);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. }13、常用单元格边框格式view plaincopy to clipboardprint?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);//上边框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);//单元格内容的旋转的角度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(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));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);1.HSSFSheet sheet = wb.createSheet("Sheet1");2.wb.setPrintArea(0, "$A$1:$C$2");1.HSSFSheet sheet = wb.createSheet("format sheet");2.HSSFFooter footer = sheet.getFooter()3.footer.setRight( "Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages() );1.HSSFWorkbook wb = new HSSFWorkbook();2.HSSFSheet sheet = wb.createSheet("row sheet");3.// Create various cells and rows for spreadsheet.4.// Shift rows 6 - 11 on the spreadsheet to the top (rows 0 -5)5.sheet.shiftRows(5, 10, -5);20、选中指定的工作表view plaincopy to clipboardprint?1.HSSFSheet sheet = wb.createSheet("row sheet");2.heet.setSelected(true);1.HSSFSheet sheet1 = wb.createSheet("new sheet");2.sheet1.setZoom(1,2); // 50 percent magnification1.HSSFSheet sheet = wb.createSheet("new sheet");2.HSSFHeader header = sheet.getHeader();3.header.setCenter("Center Header");4.header.setLeft("Left Header");5.header.setRight(HSSFHeader.font("Stencil-Normal", "Italic") +6.HSSFHeader.fontSize((short) 16) + "Right w/ Stencil-Normal Italic font and size 16");1.HSSFCellStyle style = wb.createCellStyle();2.style.setFillForegroundColor(HSSFColor.LIME.index);3.style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);4.HSSFFont font = wb.createFont();5.font.setColor(HSSFColor.RED.index);6.style.setFont(font);7.cell.setCellStyle(style);1.HSSFCellStyle style = wb.createCellStyle();2.style.setFillBackgroundColor(HSSFColor.AQUA.index);3.style.setFillPattern(HSSFCellStyle.BIG_SPOTS);4.HSSFCell cell = row.createCell((short) 1);5.cell.setCellValue("X");6.style = wb.createCellStyle();7.style.setFillForegroundColor(HSSFColor.ORANGE.index);8.style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);9.cell.setCellStyle(style);1.HSSFFormulaEvaluator eval=new HSSFFormulaEvaluator((HSSFWorkbook) wb);2.private static void updateFormula(Workbook wb,Sheet s,int row){3. Row r=s.getRow(row);4. Cell c=null;5. FormulaEcaluator eval=null;6. if(wb instanceof HSSFWorkbook)7. eval=new HSSFFormulaEvaluator((HSSFWorkbook) wb);8. else if(wb instanceof XSSFWorkbook)9. eval=new XSSFFormulaEvaluator((XSSFWorkbook) wb);10. for(int i=r.getFirstCellNum();i<r.getlastcellnum();i++){< p="">11. c=r.getCell(i);12. if(c.getCellType()==Cell.CELL_TYPE_FORMULA)13. eval.evaluateFormulaCell(c);14. }15. }laCells(HSSFWorkbook wb) ,计算一个Excel文件的所有公式,用起来很方便。
HSSFworkbook,XSSFworkbook,SXSSFworkbook区别总结

HSSFworkbook,XSSFworkbook,SXSSFworkbook区别总结⽤JavaPOI导出Excel时,我们需要考虑到Excel版本及数据量的问题。
针对不同的Excel版本,要采⽤不同的⼯具类,如果使⽤错了,会出现错误信息。
JavaPOI导出Excel有三种形式,他们分别是1.HSSFWorkbook 2.XSSFWorkbook 3.SXSSFWorkbook。
HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;XSSFWorkbook:是操作Excel2007后的版本,扩展名是.xlsx;SXSSFWorkbook:是操作Excel2007后的版本,扩展名是.xlsx;第⼀种:HSSFWorkbookpoi导出excel最常⽤的⽅式;但是此种⽅式的局限就是导出的⾏数⾄多为65535⾏,超出65536条后系统就会报错。
此⽅式因为⾏数不⾜七万⾏所以⼀般不会发⽣内存不⾜的情况(OOM)。
第⼆种:XSSFWorkbook这种形式的出现是为了突破HSSFWorkbook的65535⾏局限。
其对应的是excel2007(1048576⾏,16384列)扩展名为“.xlsx”,最多可以导出104万⾏,不过这样就伴随着⼀个问题---OOM内存溢出,原因是你所创建的book sheet row cell等此时是存在内存的并没有持久化。
第三种:SXSSFWorkbook从POI 3.8版本开始,提供了⼀种基于XSSF的低内存占⽤的SXSSF⽅式。
对于⼤型excel⽂件的创建,⼀个关键问题就是,要确保不会内存溢出。
其实,就算⽣成很⼩的excel(⽐如⼏Mb),它⽤掉的内存是远⼤于excel⽂件实际的size的。
如果单元格还有各种格式(⽐如,加粗,背景标红之类的),那它占⽤的内存就更多了。
对于⼤型excel的创建且不会内存溢出的,就只有SXSSFWorkbook了。
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时,可能会遇到各种错误和异常。
你需要学会如何正确处理这些错误,以确保你的代码能够顺利运行。
Apache POI HSSF和XSSF读写EXCEL总结

Apache POI HSSF和XSSF读写EXCEL总结HSSF是指2007年以前的,XSSF是指2007年版本以上的这个还是比较好用的,这些总结来自Apache的官方向导的点点滴滴还有好多没有没有写的,详细的请参考/spreadsheet/quick-guide.html 还有LOG也比较好看Java代码public class SummaryHSSF {public static void main(String[] args) throws IOException {//创建Workbook对象(这一个对象代表着对应的一个Excel文件)//HSSFWorkbook表示以xls为后缀名的文件Workbook wb = new HSSFWorkbook();//获得CreationHelper对象,这个应该是一个帮助类CreationHelper helper = wb.getCreationHelper();//创建Sheet并给名字(表示Excel的一个Sheet)Sheet sheet1 = wb.createSheet("HSSF_Sheet_1");Sheet sheet2 = wb.createSheet("HSSF_Sheet_2");//Row表示一行Cell表示一列Row row = null;Cell cell = null;for(int i=0;i<60;i=i+2){//获得这个sheet的第i行row = sheet1.createRow(i);//设置行长度自动//row.setHeight((short)500);row.setHeightInPoints(20);//row.setZeroHeight(true);for(int j=0;j<25;j++){//设置每个sheet每一行的宽度,自动,根据需求自行确定sheet1.autoSizeColumn(j+1, true);//创建一个基本的样式CellStyle cellStyle = SummaryHSSF.createStyleCell(wb);//获得这一行的每j列cell = row.createCell(j);if(j==0){//设置文字在单元格里面的位置cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER,CellStyle.VERTICAL_CENTER);//先创建字体样式,并把这个样式加到单元格的字体里面cellStyle.setFont(createFonts(wb));//把这个样式加到单元格里面cell.setCellStyle(cellStyle);//给单元格设值cell.setCellValue(true);}else if(j==1){//设置文字在单元格里面的位置cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);//设置这个样式的格式(Format)cellStyle = SummaryHSSF.setCellFormat(helper,cellStyle, "#,##0.0000");//先创建字体样式,并把这个样式加到单元格的字体里面cellStyle.setFont(createFonts(wb));//把这个样式加到单元格里面cell.setCellStyle(cellStyle);//给单元格设值cell.setCellValue(new Double(2008.2008));}else if(j==2){cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);cellStyle.setFont(createFonts(wb));cell.setCellStyle(cellStyle);cell.setCellValue(helper.createRichTextString("RichString"+i+j));}else if(j==3){cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);cellStyle = SummaryHSSF.setCellFormat(helper,cellStyle, "MM-yyyy-dd");cell.setCellStyle(cellStyle);cell.setCellValue(new Date());}else if(j==24){cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);cellStyle.setFont(createFonts(wb));//设置公式cell.setCellFormula("SUM(E"+(i+1)+":X"+(i+1)+")");}else{cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);cellStyle = SummaryHSSF.setFillBackgroundColors(cellStyle,IndexedColors.ORANGE.getIndex(),IndexedColor s.ORANGE.getIndex(),CellStyle.SOLID_FOREGROUND);cell.setCellStyle(cellStyle);cell.setCellValue(1);}}}//输出OutputStream os = new FileOutputStream(new File("c://SummaryHSSF.xls"));wb.write(os);os.close();}/*** 边框* @param wb* @return*/public static CellStyle createStyleCell(Workbook wb){CellStyle cellStyle = wb.createCellStyle();//设置一个单元格边框颜色cellStyle.setBorderBottom(CellStyle.BORDER_THIN);cellStyle.setBorderTop(CellStyle.BORDER_THIN);cellStyle.setBorderLeft(CellStyle.BORDER_THIN);cellStyle.setBorderRight(CellStyle.BORDER_THIN);//设置一个单元格边框颜色cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());return cellStyle;}/*** 设置文字在单元格里面的位置* CellStyle.ALIGN_CENTER* CellStyle.VERTICAL_CENTER* @param cellStyle* @param halign* @param valign* @return*/public static CellStyle setCellStyleAlignment(CellStyle cellStyle,short halign,short valign){ //设置上下cellStyle.setAlignment(CellStyle.ALIGN_CENTER);//设置左右cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);return cellStyle;/*** 格式化单元格* 如#,##0.00,m/d/yy去HSSFDataFormat或XSSFDataFormat里面找* @param cellStyle* @param fmt* @return*/public static CellStyle setCellFormat(CreationHelper helper,CellStyle cellStyle,String fmt){ //还可以用其它方法创建formatcellStyle.setDataFormat(helper.createDataFormat().getFormat(fmt));return cellStyle;}/*** 前景和背景填充的着色* @param cellStyle* @param bg IndexedColors.ORANGE.getIndex();* @param fg IndexedColors.ORANGE.getIndex();* @param fp CellStyle.SOLID_FOREGROUND* @return*/public static CellStyle setFillBackgroundColors(CellStyle cellStyle,short bg,short fg,short fp){ //cellStyle.setFillBackgroundColor(bg);cellStyle.setFillForegroundColor(fg);cellStyle.setFillPattern(fp);return cellStyle;}/*** 设置字体* @param wb* @return*/public static Font createFonts(Workbook wb){//创建Font对象Font font = wb.createFont();//设置字体font.setFontName("黑体");//着色font.setColor(HSSFColor.BLUE.index);//斜体font.setItalic(true);//字体大小font.setFontHeight((short)300);return font;}public class SummaryHSSF {public static void main(String[] args) throws IOException {//创建Workbook对象(这一个对象代表着对应的一个Excel文件)//HSSFWorkbook表示以xls为后缀名的文件Workbook wb = new HSSFWorkbook();//获得CreationHelper对象,这个应该是一个帮助类CreationHelper helper = wb.getCreationHelper();//创建Sheet并给名字(表示Excel的一个Sheet)Sheet sheet1 = wb.createSheet("HSSF_Sheet_1");Sheet sheet2 = wb.createSheet("HSSF_Sheet_2");//Row表示一行Cell表示一列Row row = null;Cell cell = null;for(int i=0;i<60;i=i+2){//获得这个sheet的第i行row = sheet1.createRow(i);//设置行长度自动//row.setHeight((short)500);row.setHeightInPoints(20);//row.setZeroHeight(true);for(int j=0;j<25;j++){//设置每个sheet每一行的宽度,自动,根据需求自行确定sheet1.autoSizeColumn(j+1, true);//创建一个基本的样式CellStyle cellStyle = SummaryHSSF.createStyleCell(wb);//获得这一行的每j列cell = row.createCell(j);if(j==0){//设置文字在单元格里面的位置cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);//先创建字体样式,并把这个样式加到单元格的字体里面cellStyle.setFont(createFonts(wb));//把这个样式加到单元格里面cell.setCellStyle(cellStyle);//给单元格设值cell.setCellValue(true);}else if(j==1){//设置文字在单元格里面的位置cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER,CellStyle.VERTICAL_CENTER);//设置这个样式的格式(Format)cellStyle = SummaryHSSF.setCellFormat(helper,cellStyle, "#,##0.0000");//先创建字体样式,并把这个样式加到单元格的字体里面cellStyle.setFont(createFonts(wb));//把这个样式加到单元格里面cell.setCellStyle(cellStyle);//给单元格设值cell.setCellValue(new Double(2008.2008));}else if(j==2){cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);cellStyle.setFont(createFonts(wb));cell.setCellStyle(cellStyle);cell.setCellValue(helper.createRichTextString("RichString"+i+j));}else if(j==3){cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);cellStyle = SummaryHSSF.setCellFormat(helper,cellStyle, "MM-yyyy-dd");cell.setCellStyle(cellStyle);cell.setCellValue(new Date());}else if(j==24){cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);cellStyle.setFont(createFonts(wb));//设置公式cell.setCellFormula("SUM(E"+(i+1)+":X"+(i+1)+")");}else{cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);cellStyle = SummaryHSSF.setFillBackgroundColors(cellStyle,IndexedColors.ORANGE.getIndex(),IndexedColor s.ORANGE.getIndex(),CellStyle.SOLID_FOREGROUND);cell.setCellStyle(cellStyle);cell.setCellValue(1);}}}//输出OutputStream os = new FileOutputStream(new File("c://SummaryHSSF.xls"));wb.write(os);os.close();}/*** 边框* @param wb* @return*/public static CellStyle createStyleCell(Workbook wb){CellStyle cellStyle = wb.createCellStyle();//设置一个单元格边框颜色cellStyle.setBorderBottom(CellStyle.BORDER_THIN);cellStyle.setBorderTop(CellStyle.BORDER_THIN);cellStyle.setBorderLeft(CellStyle.BORDER_THIN);cellStyle.setBorderRight(CellStyle.BORDER_THIN);//设置一个单元格边框颜色cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());return cellStyle;}/*** 设置文字在单元格里面的位置* CellStyle.ALIGN_CENTER* CellStyle.VERTICAL_CENTER* @param cellStyle* @param halign* @param valign* @return*/public static CellStyle setCellStyleAlignment(CellStyle cellStyle,short halign,short valign){ //设置上下cellStyle.setAlignment(CellStyle.ALIGN_CENTER);//设置左右cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);return cellStyle;}/*** 格式化单元格* 如#,##0.00,m/d/yy去HSSFDataFormat或XSSFDataFormat里面找* @param cellStyle* @param fmt* @return*/public static CellStyle setCellFormat(CreationHelper helper,CellStyle cellStyle,String fmt){ //还可以用其它方法创建formatcellStyle.setDataFormat(helper.createDataFormat().getFormat(fmt));return cellStyle;}/*** 前景和背景填充的着色* @param cellStyle* @param bg IndexedColors.ORANGE.getIndex();* @param fg IndexedColors.ORANGE.getIndex();* @param fp CellStyle.SOLID_FOREGROUND* @return*/public static CellStyle setFillBackgroundColors(CellStyle cellStyle,short bg,short fg,short fp){ //cellStyle.setFillBackgroundColor(bg);cellStyle.setFillForegroundColor(fg);cellStyle.setFillPattern(fp);return cellStyle;}/*** 设置字体* @param wb* @return*/public static Font createFonts(Workbook wb){//创建Font对象Font font = wb.createFont();//设置字体font.setFontName("黑体");//着色font.setColor(HSSFColor.BLUE.index);//斜体font.setItalic(true);//字体大小font.setFontHeight((short)300);return font;}}读取Excel文件Java代码public class ReadExcel {public static void main(String[] args) throws Exception {InputStream is = new FileInputStream(new File("c://SummaryHSSF.xls"));//根据输入流创建Workbook对象Workbook wb = WorkbookFactory.create(is);//get到Sheet对象Sheet sheet = wb.getSheetAt(0);//这个必须用接口for(Row row : sheet){for(Cell cell : row){//cell.getCellType是获得cell里面保存的值的type//如Cell.CELL_TYPE_STRINGswitch(cell.getCellType()){case Cell.CELL_TYPE_BOOLEAN://得到Boolean对象的方法System.out.print(cell.getBooleanCellValue()+" ");break;case Cell.CELL_TYPE_NUMERIC://先看是否是日期格式if(DateUtil.isCellDateFormatted(cell)){//读取日期格式System.out.print(cell.getDateCellValue()+" ");}else{//读取数字System.out.print(cell.getNumericCellValue()+" ");}break;case Cell.CELL_TYPE_FORMULA://读取公式System.out.print(cell.getCellFormula()+" ");break;case Cell.CELL_TYPE_STRING://读取StringSystem.out.print(cell.getRichStringCellValue().toString()+" ");break;}}System.out.println("");}}}public class ReadExcel {public static void main(String[] args) throws Exception {InputStream is = new FileInputStream(new File("c://SummaryHSSF.xls")); //根据输入流创建Workbook对象Workbook wb = WorkbookFactory.create(is);//get到Sheet对象Sheet sheet = wb.getSheetAt(0);//这个必须用接口for(Row row : sheet){for(Cell cell : row){//cell.getCellType是获得cell里面保存的值的type//如Cell.CELL_TYPE_STRINGswitch(cell.getCellType()){case Cell.CELL_TYPE_BOOLEAN://得到Boolean对象的方法System.out.print(cell.getBooleanCellValue()+" ");break;case Cell.CELL_TYPE_NUMERIC://先看是否是日期格式if(DateUtil.isCellDateFormatted(cell)){//读取日期格式System.out.print(cell.getDateCellValue()+" ");}else{//读取数字System.out.print(cell.getNumericCellValue()+" ");}break;case Cell.CELL_TYPE_FORMULA://读取公式System.out.print(cell.getCellFormula()+" ");break;case Cell.CELL_TYPE_STRING://读取StringSystem.out.print(cell.getRichStringCellValue().toString()+" "); break;}}System.out.println("");}}}还有一种传统的读法Java代码Sheet sheet = wb.getSheetAt(0);for (Iterator rit = sheet.rowIterator(); rit.hasNext(); ) {Row row = (Row)rit.next();for (Iterator cit = row.cellIterator(); cit.hasNext(); ) {Cell cell = (Cell)cit.next();// Do something here}}HSSFSheet sheet = wb.getSheetAt(0);for (Iterator<HSSFRow> rit = (Iterator<HSSFRow>)sheet.rowIterator(); rit.hasNext(); ) { HSSFRow row = rit.next();for (Iterator<HSSFCell> cit = (Iterator<HSSFCell>)row.cellIterator(); cit.hasNext(); ) { HSSFCell cell = cit.next();// Do something here}}Sheet sheet = wb.getSheetAt(0);for (Iterator rit = sheet.rowIterator(); rit.hasNext(); ) {Row row = (Row)rit.next();for (Iterator cit = row.cellIterator(); cit.hasNext(); ) {Cell cell = (Cell)cit.next();// Do something here}}HSSFSheet sheet = wb.getSheetAt(0);for (Iterator<HSSFRow> rit = (Iterator<HSSFRow>)sheet.rowIterator(); rit.hasNext(); ) { HSSFRow row = rit.next();for (Iterator<HSSFCell> cit = (Iterator<HSSFCell>)row.cellIterator(); cit.hasNext(); ) { HSSFCell cell = cit.next();// Do something here}}。
最直观的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页⾯来做说明
从这个页⾯的最右下⾓箭头指向的位置点下去,就会得到样例界⾯
为了⽅便读者,直接把这个链接的传送门弄下来:
到这个界⾯就可以⾃⼰去找⾃⼰喜欢的实例了。
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操作excel大全

POI操作excel大全第一讲:基本的Excel读写本文主要演示一下POI的基本操作,例如怎样读取和创建一个具体的Excel文件。
按照惯例,拿HelloWorld说事儿。
说明:本文主要内容皆包含于官方帮助手册,之所以要拿出来,出于两个原因,手册是英文的+手册是对应2.5.1的。
核心代码如下,注释部分为讲解。
这里只挑干的讲,完整的代码请参考(下载代码)。
//创建一个空白的WorkBook HSSFWorkbook wb = new HSSFWorkbook(); //基于上面的WorkBook创建属于此WorkBook 的Sheet, //3.0.1版在使用全角Sheet名的时候不必再setEncdoing了,个人感觉方便了许多。
H SSFSheet st = wb.createSheet(“测试页“); //创建属于上面Sheet的Row,参数0可以是0~65535之间的任何一个, //注意,尽管参数是Int类型,但是Excel最多支持65536行 HSSFRow row = st.createRow(0); //创建属于上面Row的Cell,参数0可以是0~255之间的任何一个, //同样,是因为Excel最大支持的列数为256列 HSSFCell cell = row.createCell((short)0); //设置此单元格的格式为文本,此句可以省略,Excel会自动识别。
//其他还有几种常用的格式,请参考本文底部的补充部分。
c ell.setCellType(HSSFCell.CELL_TYPE_STRING); //此处是3.0.1版的改进之处,上一版可以直接setCellValue(“Hello, World!“), //但是在3.0.1里,被deprecated了。
c ell.setCellValue(new HSSFRichTextString(“Hello, World!“)); //创建一个文件输出流,指定到C盘根目录下(C盘都有吧?) //xls是Excel97-2003的标准扩展名,xx是xlsx,目前的POI能直接生产的还是xls格式, //如果此处把扩展名改成xlsx,在用Excelxx打开此文件时会报错。
关于poi导出excel三种方式HSSFWorkbook,SXSSFWorkbook,csv的总结

关于poi导出excel三种⽅式HSSFWorkbook,SXSSFWorkbook,csv的总结poi导出excel最常⽤的是第⼀种⽅式HSSFWorkbook,不过这种⽅式数据量⼤的话会产⽣内存溢出问题,SXSSFWorkbook是⼀种⼤数据量导出格式,csv是另⼀种excel导出的⼀种轻快的实现。
先介绍⼀下这三种格式的特点1 HSSFWorkbook excel⽂件底层是txt实现,我们经常见到的excel都是这种实现的。
2 SXSSFWorkbook excel⽂件底层是xml实现,同样的数据量,⼤约是第⼀种的1/6-1/4之间3 csv 这个⽐较新潮,数据量应该更⼩,可以百度。
⼀ HSSFWorkbook 实现Map<String, Object> dataMap = service.AssignMiddleExcel(page);ObjectExcelView erv = new ObjectExcelView("逾期客户表"); //执⾏excel操作mv = new ModelAndView(erv,dataMap);dataMap 是个map ,包含两个键值对⼀个是标题列Map<String,Object> dataMap = new HashMap<String,Object>();List<String> titles = new ArrayList<String>();titles.add("借款⼈姓名"); //1titles.add("⾝份证号"); //2titles.add("借款⼈⼿机号");dataMap.put("titles", titles);这是标题列vpd是个mapvpd.put("var1", userList.get(i).getString("realName")); //1vpd.put("var2", userList.get(i).getString("contIdCard")); //2vpd.put("var3", userList.get(i).getString("telephone")); //3List<PageData> varList = new ArrayList<PageData>();PageData就是个HashMapvarList.add(vpd);dataMap.put("varList", varList);这就是dataMap的由来public class ObjectExcelView extends AbstractExcelView{private String fileName;public ObjectExcelView(){}public ObjectExcelView(String fileName){this.fileName = fileName;}@Overrideprotected void buildExcelDocument(Map<String, Object> model,HSSFWorkbook workbook, HttpServletRequest request,HttpServletResponse response) throws Exception {// TODO Auto-generated method stub//String fileName = "逾期客户表-待催收";HSSFSheet sheet;HSSFCell cell;response.setContentType("application/x-download");//下⾯三⾏是关键代码,处理乱码问题response.setCharacterEncoding("utf-8");response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("gbk"), "iso8859-1")+".xls");sheet = workbook.createSheet("sheet1");List<String> titles = (List<String>) model.get("titles");int len = titles.size();HSSFCellStyle headerStyle = workbook.createCellStyle(); //标题样式headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);headerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);HSSFFont headerFont = workbook.createFont(); //标题字体headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);headerFont.setFontHeightInPoints((short)11);headerStyle.setFont(headerFont);short width = 20,height=25*20;sheet.setDefaultColumnWidth(width);for(int i=0; i<len; i++){ //设置标题String title = titles.get(i);cell = getCell(sheet, 0, i);cell.setCellStyle(headerStyle);setText(cell,title);}sheet.getRow(0).setHeight(height);HSSFCellStyle contentStyle = workbook.createCellStyle(); //内容样式contentStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);List<PageData> varList = (List<PageData>) model.get("varList");int varCount = varList.size();for(int i=0; i<varCount; i++){PageData vpd = varList.get(i);for(int j=0;j<len;j++){String varstr = vpd.getString("var"+(j+1)) != null ? vpd.getString("var"+(j+1)) : "";cell = getCell(sheet, i+1, j);cell.setCellStyle(contentStyle);setText(cell,varstr);}}}}⼆ SXSSFWorkbook@RequestMapping("/excel111")public Object exportExcel(Page page,HttpServletRequest request,HttpServletResponse response){ PageData pd = new PageData();pd = this.getPageData();try{//检索条件===========PageData pageData = service.setPdWithTrim(this.getPageData());page.setPd(pageData);//检索条件===========Map<String, Object> dataMap = service.AssignMiddleExcel(page);OutputStream outputStream = response.getOutputStream();String sheetName = "逾期客户表";List<String> list = (List<String>)dataMap.get("titles");String[] headers = new String[list.size()];for(int i = 0;i<list.size();i++){headers[i]=list.get(i);}List<Object[]> dataList = new ArrayList<>();List<PageData> varList = new ArrayList<PageData>();varList = (List<PageData>)dataMap.get("varList");varList.forEach(e ->{List<Object> ObjectList = new ArrayList<>();for(int i=0;i<headers.length;i++){ObjectList.add(e.get("var"+(i+1))==null?null:e.getString("var"+(i+1)));}/* for (Object v : e.values()) {ObjectList.add(v);}*/Object[] objarr = new Object[ObjectList.size()];for(int i = 0;i<ObjectList.size();i++){objarr[i] = ObjectList.get(i);}dataList.add(objarr);});ExportUtil exportUtil = new ExportUtil(sheetName,headers,dataList);//SXSSFWorkbook ⼤批量数据导出SXSSFWorkbook workBook = exportUtil.export();// 如果⽂件名有中⽂,必须URL编码String fileName1 = URLEncoder.encode(sheetName, "UTF-8");// response.reset();// response.setContentType("application/force-download");response.setContentType("application/vnd.ms-excel");response.setHeader("Content-Disposition", "attachment; filename=" + fileName1+".xls");workBook.write(outputStream);workBook.close();outputStream.flush();outputStream.close();//ObjectExcelView erv = new ObjectExcelView("逾期客户表"); //执⾏excel操作//mv = new ModelAndView(erv,dataMap);} catch(Exception e){logger.error(e.toString(), e);}return new Object();}package com.fh.controller.assign_out;import java.util.ArrayList;import java.util.List;import ermodel.HSSFCell;import ermodel.HSSFCellStyle;import ermodel.HSSFFont;import ermodel.HSSFRichTextString;import org.apache.poi.hssf.util.HSSFColor;import ermodel.Cell;import ermodel.CellStyle;import ermodel.Font;import ermodel.Row;import ermodel.Sheet;import org.apache.poi.ss.util.CellRangeAddress;import org.apache.poi.xssf.streaming.SXSSFCell;import org.apache.poi.xssf.streaming.SXSSFRow;import org.apache.poi.xssf.streaming.SXSSFWorkbook;import ermodel.XSSFCellStyle;import ermodel.XSSFFont;import org.springframework.util.StringUtils;/*** Created by dell、 on 2017/10/12.*/public class ExportUtil {private SXSSFWorkbook wb = null;//⼤数据导出格式private Sheet sheet = null;private String sheetName;private String[] headers;//表头字段private List<Object[]> dataList = new ArrayList<Object[]>();//表内容数据//构造public ExportUtil(SXSSFWorkbook wb, Sheet sheet) {this.wb = wb;this.sheet = sheet;}//构造public ExportUtil(String sheetName, String[] headers, List<Object[]> dataList) { this.dataList = dataList;this.headers = headers;this.sheetName = sheetName;}//不知道做什么public void setRegionStyle(CellRangeAddress region, XSSFCellStyle cs) {int toprowNum = region.getFirstRow();for (int i = toprowNum; i <= region.getLastRow(); i++) {SXSSFRow row = (SXSSFRow) sheet.getRow(i);for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++) {SXSSFCell cell = (SXSSFCell) row.getCell(j);cell.setCellStyle(cs);}}}// 设置表头的单元格样式public CellStyle getHeadStyle() {// 创建单元格样式CellStyle cellStyle = wb.createCellStyle();// 设置单元格的背景颜⾊为淡蓝⾊cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index);// 设置填充字体的样式cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);// 设置单元格居中对齐cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);// 设置单元格垂直居中对齐cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 创建单元格内容显⽰不下时⾃动换⾏cellStyle.setWrapText(false);// 设置单元格字体样式XSSFFont font = (XSSFFont) wb.createFont();// font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);// 这是字体加粗font.setFontName("宋体");// 设置字体的样式font.setFontHeight(14);// 设置字体的⼤⼩cellStyle.setFont(font);// 将字体填充到表格中去// 设置单元格边框为细线条(上下左右)cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);return cellStyle;}// 设置表体的单元格样式public CellStyle getBodyStyle() {// 创建单元格样式CellStyle cellStyle = wb.createCellStyle();// 设置单元格居中对齐cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);// 设置单元格居中对齐cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 创建单元格内容不显⽰⾃动换⾏cellStyle.setWrapText(false);// 设置单元格字体样式XSSFFont font = (XSSFFont) wb.createFont();font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);// 这是字体加粗font.setFontName("宋体");// 设置字体font.setFontHeight(12);// 设置字体的⼤⼩cellStyle.setFont(font);// 将字体添加到表格中去// 设置单元格边框为细线条cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);return cellStyle;}//似乎没⽤到public Cell setHeadStyle(String[] titles) {Cell cell = null;CellStyle headStyle = getHeadStyle();Row headRow = sheet.createRow(0);// 构建表头for (int i = 0; i < titles.length; i++) {cell = headRow.createCell(i);cell.setCellStyle(headStyle);cell.setCellValue(titles[i]);}return cell;}/** 导出数据*/public SXSSFWorkbook export() throws Exception {// String nsheetName = new String(sheetName.getBytes("UTF-8"));/** response.setCharacterEncoding("utf-8");* response.setContentType("application/x-msdownload");* response.setHeader("Content-disposition", "attachment; filename=" +* sheetName + ".xlsx");// 组装附件名称和格式*/Integer rowaccess = 1000;// 内存中缓存记录⾏数,以免内存溢出SXSSFWorkbook workbook = new SXSSFWorkbook(rowaccess);try {Sheet sheet = workbook.createSheet(sheetName);// 产⽣表格标题⾏Row titleRow = sheet.createRow(0);Cell cellTiltle = titleRow.createCell(0);CellStyle columnTopStyle = this.getColumnTopStyle(workbook);// 获取列头样式对象 sheet.setDefaultColumnWidth(100);sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (headers.length - 1)));cellTiltle.setCellStyle(columnTopStyle);cellTiltle.setCellValue(sheetName);Cell cell = null;CellStyle headStyle = this.getHeadStyle(workbook);// 定义所需列数int columnNum = headers.length;Row headRow = sheet.createRow(2); // 在索引2的位置创建⾏(最顶端的⾏开始的第⼆⾏)//表头for (int n = 0; n < columnNum; n++) {Cell cellRowName = headRow.createCell(n); // 创建列头对应个数的单元格cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING); // 设置列头单元格的数据类型 HSSFRichTextString text = new HSSFRichTextString(headers[n]);cellRowName.setCellValue(headers[n]); // 设置列头单元格的值cellRowName.setCellStyle(headStyle); // 设置列头单元格样式sheet.setColumnWidth(n,256*20);}CellStyle bodyStyle = this.getBodyStyle(workbook);// 表体数据for (int i = 0; i < dataList.size(); i++) {Object[] obj = dataList.get(i);Row row = sheet.createRow(i + 3);// 创建所需的⾏数for (int j = 0; j < obj.length; j++) {cell = row.createCell(j);String str = String.valueOf(StringUtils.isEmpty(obj[j]) ? "" : obj[j]);cell.setCellValue(str); // 单元格的值cell.setCellStyle(bodyStyle); // 单元格的样式}}} catch (Exception e) {e.printStackTrace();}return workbook;}// 设置表头的单元格样式public CellStyle getHeadStyle(SXSSFWorkbook workbook) {// 创建单元格样式CellStyle cellStyle = workbook.createCellStyle();// 设置单元格的背景颜⾊为淡蓝⾊cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index);// 设置填充字体的样式cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);// 设置单元格居中对齐cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);// 设置单元格垂直居中对齐cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// cellStyle.setShrinkToFit(true);// 创建单元格内容显⽰不下时⾃动换⾏//cellStyle.setWrapText(true);// 设置单元格字体样式XSSFFont font = (XSSFFont) workbook.createFont();// font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);// 这是字体加粗font.setFontName("宋体");// 设置字体的样式font.setFontHeight(12);// 设置字体的⼤⼩cellStyle.setFont(font);// 将字体填充到表格中去// 设置单元格边框为细线条(上下左右)cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);return cellStyle;}// 设置表体的单元格样式public CellStyle getBodyStyle(SXSSFWorkbook workbook) {// 创建单元格样式CellStyle cellStyle = workbook.createCellStyle();// 设置单元格居中对齐cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);// 设置单元格居中对齐cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 创建单元格内容不显⽰⾃动换⾏//cellStyle.setWrapText(true);// 设置单元格字体样式XSSFFont font = (XSSFFont) workbook.createFont();// font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);// 这是字体加粗 font.setFontName("宋体");// 设置字体font.setFontHeight(10);// 设置字体的⼤⼩cellStyle.setFont(font);// 将字体添加到表格中去// 设置单元格边框为细线条cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);return cellStyle;}public Cell setHeadStyle(String[] titles, SXSSFWorkbook workbook) {Cell cell = null;CellStyle headStyle = getHeadStyle(workbook);Row headRow = sheet.createRow(0);// 构建表头for (int i = 0; i < titles.length; i++) {cell = headRow.createCell(i);cell.setCellStyle(headStyle);cell.setCellValue(titles[i]);}return cell;}/** 列头单元格样式*/public CellStyle getColumnTopStyle(SXSSFWorkbook workbook) {// 设置字体Font font = workbook.createFont();// 设置字体⼤⼩font.setFontHeightInPoints((short) 18);// 字体加粗font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置字体名字font.setFontName("Courier New");// 设置样式;CellStyle style = workbook.createCellStyle();// 设置底边框;style.setBorderBottom(HSSFCellStyle.BORDER_THIN);// 设置底边框颜⾊;style.setBottomBorderColor(HSSFColor.BLACK.index);// 设置左边框;style.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 设置左边框颜⾊;style.setLeftBorderColor(HSSFColor.BLACK.index);// 设置右边框;style.setBorderRight(HSSFCellStyle.BORDER_THIN);// 设置右边框颜⾊;style.setRightBorderColor(HSSFColor.BLACK.index);// 设置顶边框;style.setBorderTop(HSSFCellStyle.BORDER_THIN);// 设置顶边框颜⾊;style.setTopBorderColor(HSSFColor.BLACK.index);// 在样式⽤应⽤设置的字体;style.setFont(font);// 设置⾃动换⾏;style.setWrapText(false);// 设置⽔平对齐的样式为居中对齐;style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 设置垂直对齐的样式为居中对齐;style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);return style;}}三 csv/** 导出委外催收中EXCEL ⼤数据量csv导出* @return*/@RequestMapping("/excel")public Object exportExcel111(Page page, HttpServletResponse response ) {PageData pd = new PageData();pd = this.getPageData();try {//检索条件===========PageData pageData = service.setPdWithTrim(this.getPageData());page.setPd(pageData);//检索条件===========Map<String, Object> dataMap = service.AssignMiddleExcel(page);String sheetName = "逾期客户表";List<Object> headlist = (List<Object>)dataMap.get("titles");List<List<Object>> dataList = new ArrayList<>();List<PageData> varList = new ArrayList<PageData>();varList = (List<PageData>)dataMap.get("varList");varList.forEach(e ->{List<Object> ObjectList = new ArrayList<>();for(int i=0;i<headlist.size();i++){ObjectList.add(e.get("var"+(i+1))==null?null:e.getString("var"+(i+1)));}dataList.add(ObjectList);});File csvFile =CSVUtils.createCSVFile(headlist,dataList,sheetName);BufferedInputStream bis = null;BufferedOutputStream bos = null;response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(csvFile.getName(), "UTF-8")); response.setHeader("Content-Length", String.valueOf(csvFile.length()));bis = new BufferedInputStream(new FileInputStream(csvFile));bos = new BufferedOutputStream(response.getOutputStream());byte[] buff = new byte[2048];while (true) {int bytesRead;if (-1 == (bytesRead = bis.read(buff, 0, buff.length))) break;bos.write(buff, 0, bytesRead);}bis.close();bos.close();csvFile.delete();}catch (Exception e){e.printStackTrace();}return new Object();}package com.fh.controller.assign_out;import javax.servlet.http.HttpServletRequest;import java.io.*;import java.util.*;/*** Created by dell、 on 2017/10/12.*/public class CSVUtils {/*** CSV⽂件⽣成⽅法* @param head* @param dataList* @param filename* @return*/public static File createCSVFile(List<Object> head, List<List<Object>> dataList,String filename) {File csvFile = null;BufferedWriter csvWtriter = null;try {csvFile = new File( "temp123/"+ File.separator + filename + ".csv");File parent = csvFile.getParentFile();if (parent != null && !parent.exists()) {parent.mkdirs();}csvFile.createNewFile();// GB2312使正确读取分隔符","csvWtriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile), "GB2312"), 1024);// 写⼊⽂件头部writeRow(head, csvWtriter);// 写⼊⽂件内容for (List<Object> row : dataList) {writeRow(row, csvWtriter);}csvWtriter.flush();} catch (Exception e) {e.printStackTrace();} finally {try {csvWtriter.close();} catch (IOException e) {e.printStackTrace();}}return csvFile;}/*** 写⼀⾏数据⽅法* @param row* @param csvWriter* @throws IOException*/private static void writeRow(List<Object> row, BufferedWriter csvWriter) throws IOException { // 写⼊⽂件头部for (Object data : row) {StringBuffer sb = new StringBuffer();String rowStr = sb.append("\"").append(data).append("\",").toString();csvWriter.write(rowStr);}csvWriter.newLine();}public static File createCSVFile(HttpServletRequest request){List< Map<String,Object>> list = new ArrayList<>();for(int i =0;i<10;i++){Map<String,Object> mao = new HashMap<>();mao.put("cutomerName","zhangsan"+i);mao.put("cutomerNam1","zhangsan"+i);mao.put("cutomerNam2","zhangsan"+i);mao.put("cutomerNam3","zhangsan"+i);mao.put("cutomerNam4","zhangsan"+i);mao.put("cutomerNam5","zhangsan"+i);mao.put("cutomerNam6","zhangsan"+i);mao.put("cutomerNam7","zhangsan"+i);mao.put("cutomerNam8","zhangsan"+i);mao.put("cutomerNam9", "2017-10-17 22:33:33 12.00");mao.put("cutomerNam10",555555556);/* mao.put("cutomerNam11","zhangsan"+i);mao.put("cutomerNam12","zhangsan"+i);mao.put("cutomerNam13","zhangsan"+i);mao.put("cutomerNam14","zhangsan"+i);mao.put("cutomerNam15","zhangsan"+i);mao.put("cutomerNam16","zhangsan"+i);mao.put("cutomerNam17","zhangsan"+i);mao.put("cutomerNam18","zhangsan"+i);mao.put("cutomerNam19","zhangsan"+i);mao.put("cutomerNam20","zhangsan"+i);mao.put("cutomerNam21","zhangsan"+i);mao.put("cutomerNam22","zhangsan"+i);mao.put("cutomerNam23","zhangsan"+i);mao.put("cutomerNam24","zhangsan"+i);mao.put("cutomerNam25","zhangsan"+i);mao.put("cutomerNam26","zhangsan"+i);mao.put("cutomerNam27","zhangsan"+i);mao.put("cutomerNam28","zhangsan"+i);mao.put("cutomerNam29","zhangsan"+i);mao.put("cutomerNam30","zhangsan"+i);mao.put("cutomerNam31","zhangsan"+i);mao.put("cutomerNam32","zhangsan"+i);mao.put("cutomerNam33","zhangsan"+i);mao.put("cutomerNam34","zhangsan"+i);mao.put("cutomerNam35","zhangsan"+i);mao.put("cutomerNam36","zhangsan"+i);mao.put("cutomerNam37","zhangsan"+i);mao.put("cutomerNam38","zhangsan"+i);mao.put("cutomerNam39","zhangsan"+i);mao.put("cutomerNam40","zhangsan"+i);mao.put("cutomerNam41","zhangsan"+i);mao.put("cutomerNam42","zhangsan"+i);mao.put("cutomerNam43","zhangsan"+i);mao.put("cutomerNam44","zhangsan"+i);mao.put("cutomerNam45","zhangsan"+i);*/list.add(mao);}// 设置表格头Object[] head = {"客户姓名", "证件类型", "证件号码", "银⾏账号", "理财账号", "客户类型", "风险等级", "归属状况", "归属机构", "客户经理", "营销⽐例(%)" }; List<Object> headList = Arrays.asList(head);// 设置数据List<List<Object>> dataList = new ArrayList<List<Object>>();List<Object> rowList = null;for (int i = 0; i < list.size(); i++) {rowList = new ArrayList<Object>();Map<String,Object> maovo = list.get(i);rowList.add(maovo.get("cutomerName"));rowList.add(maovo.get("cutomerNam1"));rowList.add(maovo.get("cutomerNam2"));rowList.add(maovo.get("cutomerNam3"));rowList.add(maovo.get("cutomerNam4"));rowList.add(maovo.get("cutomerNam5"));rowList.add(maovo.get("cutomerNam6"));rowList.add(maovo.get("cutomerNam7"));rowList.add(maovo.get("cutomerNam8"));rowList.add(maovo.get("cutomerNam9"));rowList.add(maovo.get("cutomerNam10"));dataList.add(rowList);}// 导出⽂件路径// String downloadFilePath = request.getContextPath();// 导出⽂件名称String fileName = "客户列表_";// 导出CSV⽂件File csvFile = CSVUtils.createCSVFile(headList, dataList, fileName);return csvFile;}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2010-08-08
2 本文翻译自 /spreadsheet/quick-guide.html 欢迎交流指正
岑坚(高凯)
POI3.5 HSSF&XSSF Excel 操作快速入门
POI3.5 HSSF&XSSF Excel 操作快速入门
岑坚(高凯)翻译 2010-08-08
1 本文翻译自 /spreadsheet/quick-guide.html 欢迎交流指正
岑坚(高凯)
POI3.5 HSSF&XSSF Excel 操作快速入门
写在前面
想尽快的使用 HSSF 和 XSSF 对电子表格进行操作吗?这个指南正是您所需要的。 现在稳定的 POI 的版本为 3.6。但最近在查阅 POI 的资料时发现,虽然资料很多, 但是大都局限于 2.x 的版本,3.x 中文资料比较少,查阅 apache 网站的时候发 现了这份文档,看着不错,就翻译了一下,希望能够对大家有所帮助。由于时间 仓促难免有翻译不当之处,还望不吝赐教,费神指正,感激不尽!
3 本文翻译自 /spreadsheet/quick-guide.html 欢迎交流指正
岑坚(高凯)
POI3.5 HSSF&XSSF Excel 操作快速入门
图形和 Graphics2d 类 ................................................................................................... 24 提纲 ................................................................................................................................. 25 图像处理 ......................................................................................................................... 26 关联范围和关联单元格 ................................................................................................. 27 为单元格添加注释 ......................................................................................................... 30 根据内容调整单元格的宽度 ......................................................................................... 31 超级链接 ......................................................................................................................... 31 数据验证 ......................................................................................................................... 33 嵌入其他资源对象 ......................................................................................................... 35