Java读写Excel之POI超入门
程序员文章站
2022-05-02 09:56:19
...
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。
Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件。Apache POI 提供Java操作Excel解决方案(适用于Excel97-2008)。
如果处理.xlsx、docx、pptx的话可以试试Docx4j 。
Docx4j is a Java library for creating and manipulating Microsoft Open XML (Word docx, Powerpoint pptx, and Excel xlsx) files.
http://poi.apache.org/
Busy Developers' Guide to HSSF and XSSF Features
版本:poi-3.8-20120326.jar
1、生成Workbook
2、生成Workbook OOXML形式(.xlsx)
3、打开Workbook
4、打开加密的Workbook(读加密)
5、追加Sheet
6、复制Sheet
7、修改Sheet名称
8、删除Sheet
9、设置下部Sheet名的Tab的第一个可见Tab
10、调整Sheet顺序
11、设置当前Sheet
t.setActiveSheet();
12、固定窗口
13、分割窗口
14、Sheet缩放
15、行列分组
16、关闭分组
17、插入行
18、删除行
19、移动行
20、修改行高
21、修改列宽
22、不显示网格线
23、设置分页
24、添加,删除,合并单元格
25、设置Header,Footer
26、设置单元格值
27、设置单元格边线
28、设置单元格背景填充
29、设置单元格注释
30、设置单元格字体(斜体,粗体,下线,取消线,字体,大小,背景色)
31、设置超链接
32、设置单元格横向对齐,纵向对齐
33、设置单元格旋转角度
34、设置单元格自动折行
35、设置单元格文字缩进
36、自定义格式
37、设置公式
38、画直线,圆圈(椭圆),正方形(长方形),Textbox
39、插入图片
40、设置可输入List
41、设置输入提示信息
Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件。Apache POI 提供Java操作Excel解决方案(适用于Excel97-2008)。
如果处理.xlsx、docx、pptx的话可以试试Docx4j 。
Docx4j is a Java library for creating and manipulating Microsoft Open XML (Word docx, Powerpoint pptx, and Excel xlsx) files.
- HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
- XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
- HWPF - 提供读写Microsoft Word DOC格式档案的功能。
- HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
- HDGF - 提供读Microsoft Visio格式档案的功能。
- HPBF - 提供读Microsoft Publisher格式档案的功能。
- HSMF - 提供读Microsoft Outlook格式档案的功能。
http://poi.apache.org/
Busy Developers' Guide to HSSF and XSSF Features
版本:poi-3.8-20120326.jar
1、生成Workbook
//生成Workbook HSSFWorkbook wb = new HSSFWorkbook(); //添加Worksheet(不添加sheet时生成的xls文件打开时会报错) @SuppressWarnings("unused") Sheet sheet1 = wb.createSheet(); @SuppressWarnings("unused") Sheet sheet2 = wb.createSheet(); @SuppressWarnings("unused") Sheet sheet3 = wb.createSheet("new sheet"); @SuppressWarnings("unused") Sheet sheet4 = wb.createSheet("rensanning"); //保存为Excel文件 FileOutputStream out = null; try { out = new FileOutputStream("c:\\text.xls"); wb.write(out); } catch (IOException e) { System.out.println(e.toString()); } finally { try { out.close(); } catch (IOException e) { System.out.println(e.toString()); } }
2、生成Workbook OOXML形式(.xlsx)
//生成Workbook XSSFWorkbook wb = new XSSFWorkbook(); //......
3、打开Workbook
//方法一:使用WorkbookFactory FileInputStream in = null; Workbook wb = null; try { in = new FileInputStream(TEST_WORKBOOK_NAME); wb = WorkbookFactory.create(in); } catch (IOException e) { System.out.println(e.toString()); } catch (InvalidFormatException e) { System.out.println(e.toString()); } finally { try { in.close(); } catch (IOException e) { System.out.println(e.toString()); } } System.out.println("====================Workbook===================="); System.out.println("Number of Sheets:" + wb.getNumberOfSheets()); System.out.println("Sheet3's name:" + wb.getSheetName(3)); System.out.println(); //方法二:使用POIFSFileSystem try { in = new FileInputStream(TEST_WORKBOOK_NAME); POIFSFileSystem fs = new POIFSFileSystem(in); wb = new HSSFWorkbook(fs); } catch (IOException e) { System.out.println(e.toString()); } finally { try { in.close(); } catch (IOException e) { System.out.println(e.toString()); } } System.out.println("====================Workbook===================="); System.out.println("Number of Sheets:" + wb.getNumberOfSheets()); System.out.println("Sheet3's name:" + wb.getSheetName(3)); System.out.println();
4、打开加密的Workbook(读加密)
FileInputStream input = new FileInputStream(TEST_WORKBOOK_NAME_ENCRYPTED); BufferedInputStream binput = new BufferedInputStream(input); POIFSFileSystem poifs = new POIFSFileSystem(binput); Biff8EncryptionKey.setCurrentUserPassword(TEST_WORKBOOK_PASSWORD); HSSFWorkbook wb = new HSSFWorkbook(poifs); System.out.println("====================EncryptedWorkbook===================="); System.out.println("Number of Sheets:" + wb.getNumberOfSheets()); System.out.println("Sheet0's name:" + wb.getSheetName(0)); System.out.println();
5、追加Sheet
Sheet sheet = wb.createSheet("append sheet");
6、复制Sheet
wb.cloneSheet(1);
7、修改Sheet名称
wb.setSheetName(i, "SheetName new");
8、删除Sheet
wb.removeSheetAt(1);
9、设置下部Sheet名的Tab的第一个可见Tab
//设置下部Sheet名的Tab的第一个可见Tab(以左的Sheet看不见) wb.setFirstVisibleTab(2);
10、调整Sheet顺序
wb.setSheetOrder("SheetName3", 1); wb.setSheetOrder(wb.getSheetName(4), 0);
11、设置当前Sheet
t.setActiveSheet();
//设置当前Sheet wb.setActiveSheet(wb.getNumberOfSheets() - 1); //(Excel的当前Sheet被设置,需要结合setSelected使用,不然下部Sheet名的Tab还是默认为第一个) //(需要选择多个Sheet的话,每个Sheet调用setSelected(true)即可) wb.getSheetAt(wb.getNumberOfSheets() - 1).setSelected(true);
12、固定窗口
wb.getSheet("SheetName4").createFreezePane(2, 2);
13、分割窗口
wb.getSheet("SheetName5").createSplitPane(2000, 2000, 0, 0, HSSFSheet.PANE_LOWER_LEFT);
14、Sheet缩放
//setZoom(int numerator, int denominator) //"numerator"÷"denominator" 例如: 3÷1=3 那就是设置为300% //扩大(200%) wb.getSheet("sheetname1").setZoom(2, 1); //缩小(50%) wb.getSheet("sheetname2").setZoom(1, 2);
15、行列分组
wb.getSheet("sheetname3").groupColumn(4, 7); wb.getSheet("sheetname3").groupColumn(9, 12); wb.getSheet("sheetname3").groupColumn(10, 11); wb.getSheet("sheetname3").groupRow(5, 14); wb.getSheet("sheetname3").groupRow(7, 13); wb.getSheet("sheetname3").groupRow(16, 19);
16、关闭分组
wb.getSheet("sheetname3").setColumnGroupCollapsed(10, true); wb.getSheet("sheetname3").setRowGroupCollapsed(7, true);
17、插入行
Row row1 = wb.getSheet("sheetname4").createRow(1); Cell cell1_1 = row1.createCell(1); cell1_1.setCellValue(123); Row row4 = wb.getSheet("sheetname4").createRow(4); Cell cell4_3 = row4.createCell(3); cell4_3.setCellValue("中国");
18、删除行
Row row = wb.getSheet("sheetname4").getRow(1); wb.getSheet("sheetname4").removeRow(row);
19、移动行
//******移动行只移动内容,不牵扯行的删除和插入 //移动行(把第1行和第2行移到第5行之后) wb.getSheet("sheetname5").shiftRows(0, 1, 5); //移动行(把第3行和第4行往上移动1行) wb.getSheet("sheetname5").shiftRows(2, 3, -1);
20、修改行高
//设置默认行高 wb.getSheet("sheetname6").setDefaultRowHeight((short)100); //设置行高 wb.getSheet("sheetname6").getRow(2).setHeight((short)(100 * 20));
21、修改列宽
//设置默认列宽 wb.getSheet("sheetname7").setDefaultColumnWidth(12); //设置列宽 wb.getSheet("sheetname7").setColumnWidth(0, 5 * 256);
22、不显示网格线
//不显示网格线 wb.getSheet("sheetname8").setDisplayGridlines(false);
23、设置分页
//设置第一页:3行2列 (可以多次设置) wb.getSheet("sheetname9").setRowBreak(2); wb.getSheet("sheetname9").setColumnBreak(1);
24、添加,删除,合并单元格
//追加行 for (int i = 0; i < 10; i++) { Row row = wb.getSheet("sheetname10").createRow(i); for (int j = 0; j < 10; j++) { //添加单元格 Cell cell = row.createCell(j); cell.setCellValue(i + 1); } //删除单元格 row.removeCell(row.getCell(5)); } //合并单元格 //CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol) wb.getSheet("sheetname10").addMergedRegion(new CellRangeAddress(1, 4, 2, 3));
25、设置Header,Footer
//Header Header header = wb.getSheet("sheetname11").getHeader(); header.setLeft(HSSFHeader.startUnderline() + HSSFHeader.font("宋体", "Italic") + "文字文字" + HSSFHeader.endUnderline()); header.setCenter(HSSFHeader.fontSize((short)16) + HSSFHeader.startDoubleUnderline() + HSSFHeader.startBold() + "汉字汉字" + HSSFHeader.endBold() + HSSFHeader.endDoubleUnderline()); header.setRight("打印时间:" + HSSFHeader.date() + " " + HSSFHeader.time()); //Footer Footer footer = wb.getSheet("sheetname11").getFooter(); footer.setLeft("Copyright @ rensanning"); footer.setCenter("Page:" + HSSFFooter.page() + " / " + HSSFFooter.numPages()); footer.setRight("File:" + HSSFFooter.file());
26、设置单元格值
//boolean Cell cell00 = rows[0].createCell(0); boolean val00 = true; cell00.setCellValue(val00); //Calendar 格式化 CellStyle styleCalendar = wb.createCellStyle(); DataFormat formatCalendar = wb.createDataFormat(); styleCalendar.setDataFormat(formatCalendar.getFormat("yyyy/mm/dd")); Cell cell11 = rows[1].createCell(0); Calendar val11 = Calendar.getInstance(); cell11.setCellStyle(styleCalendar); cell11.setCellValue(val11); //Date 格式化 CellStyle styleDate = wb.createCellStyle(); DataFormat formatDate = wb.createDataFormat(); styleDate.setDataFormat(formatDate.getFormat("yyyy/mm/dd hh:mm")); Cell cell21 = rows[2].createCell(0); Date val21 = new Date(); cell21.setCellStyle(styleDate); cell21.setCellValue(val21); //double Cell cell30 = rows[3].createCell(0); double val30 = 1234.56; cell30.setCellValue(val30); //double 格式化 CellStyle styleDouble = wb.createCellStyle(); DataFormat formatDouble = wb.createDataFormat(); styleDouble.setDataFormat(formatDouble.getFormat("#,##0.00")); Cell cell31 = rows[3].createCell(1); double val31 = 1234.56; cell31.setCellStyle(styleDouble); cell31.setCellValue(val31); //String Cell cell40 = rows[4].createCell(0); HSSFRichTextString val40 = new HSSFRichTextString("Test汉字"); cell40.setCellValue(val40);
27、设置单元格边线
wb.getSheet("sheetname2").setColumnWidth(1, 4096); Row row1 = wb.getSheet("sheetname2").createRow(1); row1.setHeightInPoints(70); Cell cell1_1 = row1.createCell(1); cell1_1.setCellValue("Sample"); CellStyle style = wb.createCellStyle(); style.setBorderTop(CellStyle.BORDER_DASHED); style.setBorderBottom(CellStyle.BORDER_DOUBLE); style.setBorderLeft(CellStyle.BORDER_MEDIUM_DASH_DOT); style.setBorderRight(CellStyle.BORDER_MEDIUM); style.setTopBorderColor(IndexedColors.MAROON.getIndex()); style.setBottomBorderColor(IndexedColors.SKY_BLUE.getIndex()); style.setLeftBorderColor(IndexedColors.ORANGE.getIndex()); style.setRightBorderColor(IndexedColors.BLUE_GREY.getIndex()); cell1_1.setCellStyle(style);
28、设置单元格背景填充
wb.getSheet("sheetname3").setColumnWidth(0, 4096); wb.getSheet("sheetname3").setColumnWidth(1, 4096); wb.getSheet("sheetname3").setColumnWidth(2, 4096); Row row1 = wb.getSheet("sheetname3").createRow(1); row1.setHeightInPoints(70); Cell cell1_0 = row1.createCell(0); Cell cell1_1 = row1.createCell(1); Cell cell1_2 = row1.createCell(2); cell1_0.setCellValue("THIN_VERT_BANDS"); cell1_1.setCellValue("BIG_SPOTS"); cell1_2.setCellValue("THICK_HORZ_BANDS"); CellStyle style1 = wb.createCellStyle(); style1.setFillPattern(CellStyle.THIN_VERT_BANDS); style1.setFillForegroundColor(IndexedColors.WHITE.getIndex()); style1.setFillBackgroundColor(IndexedColors.BLUE.getIndex()); CellStyle style2 = wb.createCellStyle(); style2.setFillPattern(CellStyle.BIG_SPOTS); style2.setFillForegroundColor(IndexedColors.RED.getIndex()); style2.setFillBackgroundColor(IndexedColors.WHITE.getIndex()); CellStyle style3 = wb.createCellStyle(); style3.setFillPattern(CellStyle.THICK_HORZ_BANDS); style3.setFillForegroundColor(IndexedColors.PINK.getIndex()); style3.setFillBackgroundColor(IndexedColors.BROWN.getIndex()); cell1_0.setCellStyle(style1); cell1_1.setCellStyle(style2); cell1_2.setCellStyle(style3);
29、设置单元格注释
HSSFCreationHelper createHelper = (HSSFCreationHelper)wb.getCreationHelper(); Drawing patriarch = wb.getSheet("sheetname4").createDrawingPatriarch(); //注释 Row row = wb.getSheet("sheetname4").createRow(1); Cell cell = row.createCell(1); HSSFClientAnchor clientAnchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5); Comment comment = patriarch.createCellComment(clientAnchor); comment.setString(createHelper.createRichTextString("注释注释111")); comment.setAuthor("rensanning"); cell.setCellComment(comment); //带字体的注释 Row row2 = wb.getSheet("sheetname4").createRow(2); Cell cell2 = row2.createCell(1); Font font = wb.createFont(); font.setFontName("宋体"); font.setFontHeightInPoints((short)10); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); font.setColor(HSSFColor.RED.index); Comment comment2 = patriarch.createCellComment(clientAnchor); HSSFRichTextString text = new HSSFRichTextString("注释注释222"); text.applyFont(font); comment2.setString(text); comment2.setAuthor("rensanning"); cell2.setCellComment(comment2);
30、设置单元格字体(斜体,粗体,下线,取消线,字体,大小,背景色)
Font font = null; CellStyle style = null; //斜体 font = wb.createFont(); font.setItalic(true); style = wb.createCellStyle(); style.setFont(font); wb.getSheet("sheetname5").getRow(1).getCell(1).setCellStyle(style); //粗体 font = wb.createFont(); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); style = wb.createCellStyle(); style.setFont(font); wb.getSheet("sheetname5").getRow(2).getCell(1).setCellStyle(style); //字体名 font = wb.createFont(); font.setFontName("Courier New"); style = wb.createCellStyle(); style.setFont(font); wb.getSheet("sheetname5").getRow(3).getCell(1).setCellStyle(style); //字体大小 font = wb.createFont(); font.setFontHeightInPoints((short)20); style = wb.createCellStyle(); style.setFont(font); wb.getSheet("sheetname5").getRow(4).getCell(1).setCellStyle(style); //文字颜色 font = wb.createFont(); font.setColor(HSSFColor.YELLOW.index); style = wb.createCellStyle(); style.setFont(font); wb.getSheet("sheetname5").getRow(5).getCell(1).setCellStyle(style); //上标 font = wb.createFont(); font.setTypeOffset(HSSFFont.SS_SUPER); style = wb.createCellStyle(); style.setFont(font); wb.getSheet("sheetname5").getRow(6).getCell(1).setCellStyle(style); //下标 font = wb.createFont(); font.setTypeOffset(HSSFFont.SS_SUB); style = wb.createCellStyle(); style.setFont(font); wb.getSheet("sheetname5").getRow(7).getCell(1).setCellStyle(style); //删除线 font = wb.createFont(); font.setStrikeout(true); style = wb.createCellStyle(); style.setFont(font); wb.getSheet("sheetname5").getRow(8).getCell(1).setCellStyle(style); //下划线 font = wb.createFont(); font.setUnderline(HSSFFont.U_SINGLE); style = wb.createCellStyle(); style.setFont(font); wb.getSheet("sheetname5").getRow(9).getCell(1).setCellStyle(style); //背景色 style = wb.createCellStyle(); style.setFillForegroundColor(HSSFColor.SEA_GREEN.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setFont(font); wb.getSheet("sheetname5").getRow(10).getCell(1).setCellStyle(style);
31、设置超链接
HSSFCreationHelper createHelper = (HSSFCreationHelper)wb.getCreationHelper(); CellStyle style = wb.createCellStyle(); Font font = wb.createFont(); font.setUnderline(HSSFFont.U_SINGLE); font.setColor(HSSFColor.BLUE.index); style.setFont(font); //追加行 Row[] rows = new Row[10]; for (int i = 0; i < 10; i++) { rows[i] = wb.getSheet("sheetname6").createRow(i); } //URL rows[0].createCell(0).setCellValue("URL Link"); HSSFHyperlink link1 = createHelper.createHyperlink(HSSFHyperlink.LINK_URL); link1.setAddress("http://poi.apache.org/"); rows[0].getCell(0).setHyperlink(link1); rows[0].getCell(0).setCellStyle(style); //Mail rows[1].createCell(0).setCellValue("Email Link"); HSSFHyperlink link2 = createHelper.createHyperlink(HSSFHyperlink.LINK_EMAIL); link2.setAddress("mailto:poi@apache.org?subject=Hyperlinks"); rows[1].getCell(0).setHyperlink(link2); rows[1].getCell(0).setCellStyle(style); //File rows[2].createCell(0).setCellValue("File Link"); HSSFHyperlink link3 = createHelper.createHyperlink(HSSFHyperlink.LINK_FILE); link3.setAddress("link.xls"); rows[2].getCell(0).setHyperlink(link3); rows[2].getCell(0).setCellStyle(style); //Workbook内 rows[3].createCell(0).setCellValue("Worksheet Link"); HSSFHyperlink link4 = createHelper.createHyperlink(HSSFHyperlink.LINK_DOCUMENT); link4.setAddress("sheetname1!A1"); rows[3].getCell(0).setHyperlink(link4); rows[3].getCell(0).setCellStyle(style);
32、设置单元格横向对齐,纵向对齐
//横向对齐 wb.getSheet("sheetname7").setColumnWidth(2, 3072); Row[] row = new Row[7]; Cell[] cell = new Cell[7]; for (int i = 0 ; i < 7 ; i++){ row[i] = wb.getSheet("sheetname7").createRow(i + 1); cell[i] = row[i].createCell(2); cell[i].setCellValue("Please give me a receipt"); } CellStyle style0 = wb.createCellStyle(); style0.setAlignment(CellStyle.ALIGN_GENERAL); cell[0].setCellStyle(style0); CellStyle style1 = wb.createCellStyle(); style1.setAlignment(CellStyle.ALIGN_LEFT); cell[1].setCellStyle(style1); CellStyle style2 = wb.createCellStyle(); style2.setAlignment(CellStyle.ALIGN_CENTER); cell[2].setCellStyle(style2); CellStyle style3 = wb.createCellStyle(); style3.setAlignment(CellStyle.ALIGN_RIGHT); cell[3].setCellStyle(style3); CellStyle style4 = wb.createCellStyle(); style4.setAlignment(CellStyle.ALIGN_FILL); cell[4].setCellStyle(style4); CellStyle style5 = wb.createCellStyle(); style5.setAlignment(CellStyle.ALIGN_JUSTIFY); cell[5].setCellStyle(style5); CellStyle style6 = wb.createCellStyle(); style6.setAlignment(CellStyle.ALIGN_CENTER_SELECTION); cell[6].setCellStyle(style6); //纵向对齐 Row row2 = wb.getSheet("sheetname8").createRow(1); row2.setHeightInPoints(70); Cell[] cell2 = new Cell[4]; for (int i = 0 ; i < 4 ; i++){ cell2[i] = row2.createCell(i + 1); cell2[i].setCellValue("Please give me a receipt"); } CellStyle style02 = wb.createCellStyle(); style02.setVerticalAlignment(CellStyle.VERTICAL_TOP); cell2[0].setCellStyle(style02); CellStyle style12 = wb.createCellStyle(); style12.setVerticalAlignment(CellStyle.VERTICAL_CENTER); cell2[1].setCellStyle(style12); CellStyle style22 = wb.createCellStyle(); style22.setVerticalAlignment(CellStyle.VERTICAL_BOTTOM); cell2[2].setCellStyle(style22); CellStyle style32 = wb.createCellStyle(); style32.setVerticalAlignment(CellStyle.VERTICAL_JUSTIFY); cell2[3].setCellStyle(style32);
33、设置单元格旋转角度
Row[] row = new Row[4]; Cell[] cell = new Cell[4]; for (int i = 0 ; i < 4 ; i++){ row[i] = wb.getSheet("sheetname9").createRow(i + 1); cell[i] = row[i].createCell(2); cell[i].setCellValue("Coffee"); } CellStyle style0 = wb.createCellStyle(); style0.setRotation((short)45); cell[0].setCellStyle(style0); CellStyle style1 = wb.createCellStyle(); style1.setRotation((short)0); cell[1].setCellStyle(style1); CellStyle style2 = wb.createCellStyle(); style2.setRotation((short)-45); cell[2].setCellStyle(style2); CellStyle style3 = wb.createCellStyle(); style3.setRotation((short)-90); cell[3].setCellStyle(style3);
34、设置单元格自动折行
Row[] row = new Row[2]; Cell[] cell = new Cell[2]; for (int i = 0 ; i < 2 ; i++){ row[i] = wb.getSheet("sheetname10").createRow(i + 1); cell[i] = row[i].createCell(2); cell[i].setCellValue("Thank you very much."); } CellStyle style0 = wb.createCellStyle(); style0.setWrapText(true); cell[0].setCellStyle(style0); CellStyle style1 = wb.createCellStyle(); style1.setWrapText(false); cell[1].setCellStyle(style1);
35、设置单元格文字缩进
Row[] row = new Row[4]; Cell[] cell = new Cell[4]; for (int i = 0 ; i < 4 ; i++){ row[i] = wb.getSheet("sheetname11").createRow(i + 1); cell[i] = row[i].createCell(2); cell[i].setCellValue("Coffee"); } CellStyle style1 = wb.createCellStyle(); style1.setIndention((short)1); style1.setAlignment(CellStyle.ALIGN_LEFT); cell[1].setCellStyle(style1); CellStyle style2 = wb.createCellStyle(); style2.setIndention((short)2); style2.setAlignment(CellStyle.ALIGN_LEFT); cell[2].setCellStyle(style2); CellStyle style3 = wb.createCellStyle(); style3.setIndention((short)3); style3.setAlignment(CellStyle.ALIGN_LEFT); cell[3].setCellStyle(style3);
36、自定义格式
Row[] rows = new Row[2]; for (int i = 0; i < rows.length; i++) { rows[i] = wb.getSheet("sheetname12").createRow(i + 1); } DataFormat format = wb.createDataFormat(); CellStyle[] styles = new CellStyle[2]; for (int i = 0; i < styles.length; i++) { styles[i] = wb.createCellStyle(); } styles[0].setDataFormat(format.getFormat("0.0")); styles[1].setDataFormat(format.getFormat("#,##0.000")); Cell[] cells = new Cell[2]; for (int i = 0; i < cells.length; i++) { cells[i] = rows[i].createCell(1); cells[i].setCellValue(1111.25); cells[i].setCellStyle(styles[i]); }
37、设置公式
Row row1 = wb.getSheet("sheetname13").createRow(1); Row row2 = wb.getSheet("sheetname13").createRow(2); Cell cell1_1 = row1.createCell(1); Cell cell1_2 = row1.createCell(2); Cell cell1_3 = row1.createCell(3); Cell cell2_3 = row2.createCell(3); cell1_1.setCellValue(30); cell1_2.setCellValue(25); cell1_3.setCellFormula("B2+C2"); cell2_3.setCellFormula("MOD(B2,C2)");
38、画直线,圆圈(椭圆),正方形(长方形),Textbox
HSSFPatriarch patriarch = ((HSSFSheet)wb.getSheet("sheetname14")).createDrawingPatriarch(); //直线 HSSFClientAnchor clientAnchor1 = new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5); HSSFSimpleShape shape1 = patriarch.createSimpleShape(clientAnchor1); shape1.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE); //圆圈(椭圆) HSSFClientAnchor clientAnchor2 = new HSSFClientAnchor(0, 0, 0, 0, (short) 8, 4, (short) 6, 5); HSSFSimpleShape shape2 = patriarch.createSimpleShape(clientAnchor2); shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_OVAL); //正方形(长方形) HSSFClientAnchor clientAnchor3 = new HSSFClientAnchor(0, 0, 0, 0, (short) 12, 6, (short) 6, 5); HSSFSimpleShape shape3 = patriarch.createSimpleShape(clientAnchor3); shape3.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE); //Textbox HSSFClientAnchor clientAnchor4 = new HSSFClientAnchor(0, 0, 0, 0, (short) 14, 8, (short) 6, 5); HSSFTextbox textbox = patriarch.createTextbox(clientAnchor4); textbox.setString(new HSSFRichTextString("This is a test"));
39、插入图片
//需要commons-codec-1.6.jar FileInputStream jpeg = new FileInputStream("resource/test.jpg"); byte[] bytes = IOUtils.toByteArray(jpeg); int pictureIndex = wb.addPicture(bytes, HSSFWorkbook.PICTURE_TYPE_JPEG); jpeg.close(); HSSFCreationHelper helper = (HSSFCreationHelper) wb.getCreationHelper(); HSSFPatriarch patriarch = ((HSSFSheet)wb.getSheet("sheetname15")).createDrawingPatriarch(); HSSFClientAnchor clientAnchor = helper.createClientAnchor(); clientAnchor.setCol1(3); clientAnchor.setRow1(2); HSSFPicture picture = patriarch.createPicture(clientAnchor, pictureIndex); picture.resize();
40、设置可输入List
CellRangeAddressList addressList = new CellRangeAddressList( 0, 0, 0, 0); final String[] DATA_LIST = new String[] { "10", "20", "30", }; DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(DATA_LIST); HSSFDataValidation dataValidation = new HSSFDataValidation(addressList, dvConstraint); dataValidation.setSuppressDropDownArrow(false); wb.getSheet("sheetname16").addValidationData(dataValidation);
41、设置输入提示信息
CellRangeAddressList addressList = new CellRangeAddressList( 0, 0, 0, 0); final String[] DATA_LIST = new String[] { "10", "20", "30", }; DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(DATA_LIST); HSSFDataValidation dataValidation = new HSSFDataValidation(addressList, dvConstraint); dataValidation.setSuppressDropDownArrow(false); dataValidation.createPromptBox("输入提示", "请从下拉列表中选择!"); dataValidation.setShowPromptBox(true); wb.getSheet("sheetname17").addValidationData(dataValidation);