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)。

  • 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/

版本:poi-3.8-20120326.jar

1、生成Workbook

Java代码  
  1. //生成Workbook
        // 第一步,创建一个webbook,对应一个Excel文件  HSSFWorkbook wb = new HSSFWorkbook();  // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet  HSSFSheet sheet = wb.createSheet("学生表一");  sheet.setDefaultColumnWidth(20);// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short  HSSFRow row = sheet.createRow(0);  // 第四步,创建单元格,并设置值表头 设置表头居中  HSSFCellStyle style = wb.createCellStyle();  style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式  HSSFCell cell = row.createCell(0);  cell.setCellValue("学号");  cell.setCellStyle(style);  cell = row.createCell( 1);  cell.setCellValue("姓名");  cell.setCellStyle(style);  cell = row.createCell(2);  cell.setCellValue("年龄");  cell.setCellStyle(style);  cell = row.createCell(3);  cell.setCellValue("生日");  cell.setCellStyle(style);  // 第五步,写入实体数据 实际应用中这些数据从数据库得到,  List list = CreateSimpleExcelToDisk.getStudent();  for (int i = 0; i < list.size(); i++)  {  row = sheet.createRow(i + 1);  Student stu = (Student) list.get(i);  // 第四步,创建单元格,并设置值  row.createCell(0).setCellValue(stu.getId());  row.createCell(1).setCellValue(stu.getName());  row.createCell(2).setCellValue(stu.getAge());  cell = row.createCell(3);  cell.setCellValue(new SimpleDateFormat("yyyy-mm-dd").format(stu  .getBirth()));  }  // 第六步,将文件存到指定位置  try  {  FileOutputStream fout = new FileOutputStream("D:/students.xls");  wb.write(fout);  fout.close();  }  catch (Exception e)  {  e.printStackTrace();  }  

2、生成Workbook OOXML形式(.xlsx)

Java代码  
  1. //生成Workbook
  2. XSSFWorkbook wb = new XSSFWorkbook();
  3. //......

3、打开Workbook

Java代码  
  1. //方法一:使用WorkbookFactory
  2. FileInputStream in = null;
  3. Workbook wb = null;
  4. try {
  5. in = new FileInputStream(TEST_WORKBOOK_NAME);
  6. wb = WorkbookFactory.create(in);
  7. } catch (IOException e) {
  8. System.out.println(e.toString());
  9. } catch (InvalidFormatException e) {
  10. System.out.println(e.toString());
  11. } finally {
  12. try {
  13. in.close();
  14. } catch (IOException e) {
  15. System.out.println(e.toString());
  16. }
  17. }
  18. System.out.println("====================Workbook====================");
  19. System.out.println("Number of Sheets:" + wb.getNumberOfSheets());
  20. System.out.println("Sheet3's name:" + wb.getSheetName(3));
  21. System.out.println();
  22. //方法二:使用POIFSFileSystem
  23. try {
  24. in = new FileInputStream(TEST_WORKBOOK_NAME);
  25. POIFSFileSystem fs = new POIFSFileSystem(in);
  26. wb = new HSSFWorkbook(fs);
  27. } catch (IOException e) {
  28. System.out.println(e.toString());
  29. } finally {
  30. try {
  31. in.close();
  32. } catch (IOException e) {
  33. System.out.println(e.toString());
  34. }
  35. }
  36. System.out.println("====================Workbook====================");
  37. System.out.println("Number of Sheets:" + wb.getNumberOfSheets());
  38. System.out.println("Sheet3's name:" + wb.getSheetName(3));
  39. System.out.println();

4、打开加密的Workbook(读加密)

Java代码  
  1. FileInputStream input = new FileInputStream(TEST_WORKBOOK_NAME_ENCRYPTED);
  2. BufferedInputStream binput = new BufferedInputStream(input);
  3. POIFSFileSystem poifs = new POIFSFileSystem(binput);
  4. Biff8EncryptionKey.setCurrentUserPassword(TEST_WORKBOOK_PASSWORD);
  5. HSSFWorkbook wb = new HSSFWorkbook(poifs);
  6. System.out.println("====================EncryptedWorkbook====================");
  7. System.out.println("Number of Sheets:" + wb.getNumberOfSheets());
  8. System.out.println("Sheet0's name:" + wb.getSheetName(0));
  9. System.out.println();

5、追加Sheet

Java代码  
  1. Sheet sheet = wb.createSheet("append sheet");

6、复制Sheet

Java代码  
  1. wb.cloneSheet(1);

7、修改Sheet名称

Java代码  
  1. wb.setSheetName(i, "SheetName new");

8、删除Sheet

Java代码  
  1. wb.removeSheetAt(1);

9、设置下部Sheet名的Tab的第一个可见Tab

Java代码  
  1. //设置下部Sheet名的Tab的第一个可见Tab(以左的Sheet看不见)
  2. wb.setFirstVisibleTab(2);

10、调整Sheet顺序

Java代码  
  1. wb.setSheetOrder("SheetName3", 1);
  2. wb.setSheetOrder(wb.getSheetName(4), 0);

11、设置当前Sheet

Java代码  
  1. //设置当前Sheet
  2. Integer active = wb.getActiveSheetIndex();
    wb.setActiveSheet(wb.getNumberOfSheets() - 1);
    wb.getSheetAt(wb.getNumberOfSheets() - 1).setSelected(true);
    wb.getSheetAt(active).setSelected(false);

12、固定窗口

Java代码  
  1. wb.getSheet("SheetName4").createFreezePane(2, 2);

13、分割窗口

Java代码  
  1. wb.getSheet("SheetName5").createSplitPane(2000, 2000, 0, 0, HSSFSheet.PANE_LOWER_LEFT);

14、Sheet缩放

Java代码  
  1. //setZoom(int numerator, int denominator)
  2. //"numerator"÷"denominator"  例如: 3÷1=3 那就是设置为300%
  3. //扩大(200%)
  4. wb.getSheet("sheetname1").setZoom(2, 1);
  5. //缩小(50%)
  6. wb.getSheet("sheetname2").setZoom(1, 2);

15、行列分组

Java代码  
  1. wb.getSheet("sheetname3").groupColumn(4, 7);
  2. wb.getSheet("sheetname3").groupColumn(9, 12);
  3. wb.getSheet("sheetname3").groupColumn(10, 11);
  4. wb.getSheet("sheetname3").groupRow(5, 14);
  5. wb.getSheet("sheetname3").groupRow(7, 13);
  6. wb.getSheet("sheetname3").groupRow(16, 19);

16、关闭分组

Java代码  
  1. wb.getSheet("sheetname3").setColumnGroupCollapsed(10, true);
  2. wb.getSheet("sheetname3").setRowGroupCollapsed(7, true);

17、插入行

Java代码  
  1. Row row1 = wb.getSheet("sheetname4").createRow(1);
  2. Cell cell1_1 = row1.createCell(1);
  3. cell1_1.setCellValue(123);
  4. Row row4 = wb.getSheet("sheetname4").createRow(4);
  5. Cell cell4_3 = row4.createCell(3);
  6. cell4_3.setCellValue("中国");

18、删除行

Java代码  
  1. Row row = wb.getSheet("sheetname4").getRow(1);
  2. wb.getSheet("sheetname4").removeRow(row);

19、移动行

Java代码  
  1. //******移动行只移动内容,不牵扯行的删除和插入
  2. //移动行(把第1行和第2行移到第5行之后)
  3. wb.getSheet("sheetname5").shiftRows(0, 1, 5);
  4. //移动行(把第3行和第4行往上移动1行)
  5. wb.getSheet("sheetname5").shiftRows(2, 3, -1);

20、修改行高

Java代码  
  1. //设置默认行高
  2. wb.getSheet("sheetname6").setDefaultRowHeight((short)100);
  3. //设置行高
  4. wb.getSheet("sheetname6").getRow(2).setHeight((short)(100 * 20));

21、修改列宽

Java代码  
  1. //设置默认列宽
  2. wb.getSheet("sheetname7").setDefaultColumnWidth(12);
  3. //设置列宽
  4. wb.getSheet("sheetname7").setColumnWidth(0, 5 * 256);
  5. //第一个参数是指第几列,从0开始,第二个参数是的单位是1/256个字符宽度,也就是说,这里是把B列的宽度设置为了40个字符
  6. sheet.setColumnWidth(1,40 * 256);
  7. //自适应宽度
  8. sheet.autoSizeColumn((short)0); //调整第一列宽度

22、不显示网格线

Java代码  
  1. //不显示网格线
  2. wb.getSheet("sheetname8").setDisplayGridlines(false);

23、设置分页

Java代码  
  1. //设置第一页:3行2列 (可以多次设置)
  2. wb.getSheet("sheetname9").setRowBreak(2);
  3. wb.getSheet("sheetname9").setColumnBreak(1);

24、添加,删除,合并单元格

Java代码  
  1. //追加行
  2. for (int i = 0; i < 10; i++) {
  3. Row row = wb.getSheet("sheetname10").createRow(i);
  4. for (int j = 0; j < 10; j++) {
  5. //添加单元格
  6. Cell cell = row.createCell(j);
  7. cell.setCellValue(i + 1);
  8. }
  9. //删除单元格
  10. row.removeCell(row.getCell(5));
  11. }
  12. //合并单元格
  13. //CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
  14. wb.getSheet("sheetname10").addMergedRegion(new CellRangeAddress(1, 4, 2, 3));

25、设置Header,Footer

Java代码  
  1. //Header
  2. Header header = wb.getSheet("sheetname11").getHeader();
  3. header.setLeft(HSSFHeader.startUnderline() +
  4. HSSFHeader.font("宋体", "Italic") +
  5. "文字文字" +
  6. HSSFHeader.endUnderline());
  7. header.setCenter(HSSFHeader.fontSize((short)16) +
  8. HSSFHeader.startDoubleUnderline() +
  9. HSSFHeader.startBold() +
  10. "汉字汉字" +
  11. HSSFHeader.endBold() +
  12. HSSFHeader.endDoubleUnderline());
  13. header.setRight("打印时间:" + HSSFHeader.date() +  " " + HSSFHeader.time());
  14. //Footer
  15. Footer footer = wb.getSheet("sheetname11").getFooter();
  16. footer.setLeft("Copyright @ rensanning");
  17. footer.setCenter("Page:" + HSSFFooter.page() + " / " + HSSFFooter.numPages());
  18. footer.setRight("File:" + HSSFFooter.file());


26、设置单元格值

Java代码  
  1. //boolean
  2. Cell cell00 = rows[0].createCell(0);
  3. boolean val00 = true;
  4. cell00.setCellValue(val00);
  5. //Calendar 格式化
  6. CellStyle styleCalendar = wb.createCellStyle();
  7. DataFormat formatCalendar = wb.createDataFormat();
  8. styleCalendar.setDataFormat(formatCalendar.getFormat("yyyy/mm/dd"));
  9. Cell cell11 = rows[1].createCell(0);
  10. Calendar val11 = Calendar.getInstance();
  11. cell11.setCellStyle(styleCalendar);
  12. cell11.setCellValue(val11);
  13. //Date 格式化
  14. CellStyle styleDate = wb.createCellStyle();
  15. DataFormat formatDate = wb.createDataFormat();
  16. styleDate.setDataFormat(formatDate.getFormat("yyyy/mm/dd hh:mm"));
  17. Cell cell21 = rows[2].createCell(0);
  18. Date val21 = new Date();
  19. cell21.setCellStyle(styleDate);
  20. cell21.setCellValue(val21);
  21. //double
  22. Cell cell30 = rows[3].createCell(0);
  23. double val30 = 1234.56;
  24. cell30.setCellValue(val30);
  25. //double 格式化
  26. CellStyle styleDouble = wb.createCellStyle();
  27. DataFormat formatDouble = wb.createDataFormat();
  28. styleDouble.setDataFormat(formatDouble.getFormat("#,##0.00"));
  29. Cell cell31 = rows[3].createCell(1);
  30. double val31 = 1234.56;
  31. cell31.setCellStyle(styleDouble);
  32. cell31.setCellValue(val31);
  33. //String
  34. Cell cell40 = rows[4].createCell(0);
  35. HSSFRichTextString val40 = new HSSFRichTextString("Test汉字");
  36. cell40.setCellValue(val40);

27、设置单元格边线

Java代码  
  1. wb.getSheet("sheetname2").setColumnWidth(1, 4096);
  2. Row row1 = wb.getSheet("sheetname2").createRow(1);
  3. row1.setHeightInPoints(70);
  4. Cell cell1_1 = row1.createCell(1);
  5. cell1_1.setCellValue("Sample");
  6. CellStyle style = wb.createCellStyle();
  7. style.setBorderTop(CellStyle.BORDER_DASHED);
  8. style.setBorderBottom(CellStyle.BORDER_DOUBLE);
  9. style.setBorderLeft(CellStyle.BORDER_MEDIUM_DASH_DOT);
  10. style.setBorderRight(CellStyle.BORDER_MEDIUM);
  11. style.setTopBorderColor(IndexedColors.MAROON.getIndex());
  12. style.setBottomBorderColor(IndexedColors.SKY_BLUE.getIndex());
  13. style.setLeftBorderColor(IndexedColors.ORANGE.getIndex());
  14. style.setRightBorderColor(IndexedColors.BLUE_GREY.getIndex());
  15. cell1_1.setCellStyle(style);

28、设置单元格背景填充

Java代码  
  1. wb.getSheet("sheetname3").setColumnWidth(0, 4096);
  2. wb.getSheet("sheetname3").setColumnWidth(1, 4096);
  3. wb.getSheet("sheetname3").setColumnWidth(2, 4096);
  4. Row row1 = wb.getSheet("sheetname3").createRow(1);
  5. row1.setHeightInPoints(70);
  6. Cell cell1_0 = row1.createCell(0);
  7. Cell cell1_1 = row1.createCell(1);
  8. Cell cell1_2 = row1.createCell(2);
  9. cell1_0.setCellValue("THIN_VERT_BANDS");
  10. cell1_1.setCellValue("BIG_SPOTS");
  11. cell1_2.setCellValue("THICK_HORZ_BANDS");
  12. CellStyle style1 = wb.createCellStyle();
  13. style1.setFillPattern(CellStyle.THIN_VERT_BANDS);
  14. style1.setFillForegroundColor(IndexedColors.WHITE.getIndex());
  15. style1.setFillBackgroundColor(IndexedColors.BLUE.getIndex());
  16. CellStyle style2 = wb.createCellStyle();
  17. style2.setFillPattern(CellStyle.BIG_SPOTS);
  18. style2.setFillForegroundColor(IndexedColors.RED.getIndex());
  19. style2.setFillBackgroundColor(IndexedColors.WHITE.getIndex());
  20. CellStyle style3 = wb.createCellStyle();
  21. style3.setFillPattern(CellStyle.THICK_HORZ_BANDS);
  22. style3.setFillForegroundColor(IndexedColors.PINK.getIndex());
  23. style3.setFillBackgroundColor(IndexedColors.BROWN.getIndex());
  24. cell1_0.setCellStyle(style1);
  25. cell1_1.setCellStyle(style2);
  26. cell1_2.setCellStyle(style3);

29、设置单元格注释

Java代码  
  1. HSSFCreationHelper createHelper =
  2. (HSSFCreationHelper)wb.getCreationHelper();
  3. Drawing patriarch = wb.getSheet("sheetname4").createDrawingPatriarch();
  4. //注释
  5. Row row = wb.getSheet("sheetname4").createRow(1);
  6. Cell cell = row.createCell(1);
  7. HSSFClientAnchor clientAnchor = new HSSFClientAnchor(0, 0, 0, 0,
  8. (short) 4, 2, (short) 6, 5);
  9. Comment comment = patriarch.createCellComment(clientAnchor);
  10. comment.setString(createHelper.createRichTextString("注释注释111"));
  11. comment.setAuthor("rensanning");
  12. cell.setCellComment(comment);
  13. //带字体的注释
  14. Row row2 = wb.getSheet("sheetname4").createRow(2);
  15. Cell cell2 = row2.createCell(1);
  16. Font font = wb.createFont();
  17. font.setFontName("宋体");
  18. font.setFontHeightInPoints((short)10);
  19. font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  20. font.setColor(HSSFColor.RED.index);
  21. Comment comment2 = patriarch.createCellComment(clientAnchor);
  22. HSSFRichTextString text = new HSSFRichTextString("注释注释222");
  23. text.applyFont(font);
  24. comment2.setString(text);
  25. comment2.setAuthor("rensanning");
  26. cell2.setCellComment(comment2);

30、设置单元格字体(斜体,粗体,下线,取消线,字体,大小,背景色)

Java代码  
  1. Font font = null;
  2. CellStyle style = null;
  3. //斜体
  4. font = wb.createFont();
  5. font.setItalic(true);
  6. style = wb.createCellStyle();
  7. style.setFont(font);
  8. wb.getSheet("sheetname5").getRow(1).getCell(1).setCellStyle(style);
  9. //粗体
  10. font = wb.createFont();
  11. font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  12. style = wb.createCellStyle();
  13. style.setFont(font);
  14. wb.getSheet("sheetname5").getRow(2).getCell(1).setCellStyle(style);
  15. //字体名
  16. font = wb.createFont();
  17. font.setFontName("Courier New");
  18. style = wb.createCellStyle();
  19. style.setFont(font);
  20. wb.getSheet("sheetname5").getRow(3).getCell(1).setCellStyle(style);
  21. //字体大小
  22. font = wb.createFont();
  23. font.setFontHeightInPoints((short)20);
  24. style = wb.createCellStyle();
  25. style.setFont(font);
  26. wb.getSheet("sheetname5").getRow(4).getCell(1).setCellStyle(style);
  27. //文字颜色
  28. font = wb.createFont();
  29. font.setColor(HSSFColor.YELLOW.index);
  30. style = wb.createCellStyle();
  31. style.setFont(font);
  32. wb.getSheet("sheetname5").getRow(5).getCell(1).setCellStyle(style);
  33. //上标
  34. font = wb.createFont();
  35. font.setTypeOffset(HSSFFont.SS_SUPER);
  36. style = wb.createCellStyle();
  37. style.setFont(font);
  38. wb.getSheet("sheetname5").getRow(6).getCell(1).setCellStyle(style);
  39. //下标
  40. font = wb.createFont();
  41. font.setTypeOffset(HSSFFont.SS_SUB);
  42. style = wb.createCellStyle();
  43. style.setFont(font);
  44. wb.getSheet("sheetname5").getRow(7).getCell(1).setCellStyle(style);
  45. //删除线
  46. font = wb.createFont();
  47. font.setStrikeout(true);
  48. style = wb.createCellStyle();
  49. style.setFont(font);
  50. wb.getSheet("sheetname5").getRow(8).getCell(1).setCellStyle(style);
  51. //下划线
  52. font = wb.createFont();
  53. font.setUnderline(HSSFFont.U_SINGLE);
  54. style = wb.createCellStyle();
  55. style.setFont(font);
  56. wb.getSheet("sheetname5").getRow(9).getCell(1).setCellStyle(style);
  57. //背景色
  58. style = wb.createCellStyle();
  59. style.setFillForegroundColor(HSSFColor.SEA_GREEN.index);
  60. style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  61. style.setFont(font);
  62. wb.getSheet("sheetname5").getRow(10).getCell(1).setCellStyle(style);

31、设置超链接

Java代码  
  1. HSSFCreationHelper createHelper =
  2. (HSSFCreationHelper)wb.getCreationHelper();
  3. CellStyle style = wb.createCellStyle();
  4. Font font = wb.createFont();
  5. font.setUnderline(HSSFFont.U_SINGLE);
  6. font.setColor(HSSFColor.BLUE.index);
  7. style.setFont(font);
  8. //追加行
  9. Row[] rows = new Row[10];
  10. for (int i = 0; i < 10; i++) {
  11. rows[i] = wb.getSheet("sheetname6").createRow(i);
  12. }
  13. //URL
  14. rows[0].createCell(0).setCellValue("URL Link");
  15. HSSFHyperlink link1 = createHelper.createHyperlink(HSSFHyperlink.LINK_URL);
  16. link1.setAddress("http://poi.apache.org/");
  17. rows[0].getCell(0).setHyperlink(link1);
  18. rows[0].getCell(0).setCellStyle(style);
  19. //Mail
  20. rows[1].createCell(0).setCellValue("Email Link");
  21. HSSFHyperlink link2 = createHelper.createHyperlink(HSSFHyperlink.LINK_EMAIL);
  22. link2.setAddress("mailto:poi@apache.org?subject=Hyperlinks");
  23. rows[1].getCell(0).setHyperlink(link2);
  24. rows[1].getCell(0).setCellStyle(style);
  25. //File
  26. rows[2].createCell(0).setCellValue("File Link");
  27. HSSFHyperlink link3 = createHelper.createHyperlink(HSSFHyperlink.LINK_FILE);
  28. link3.setAddress("link.xls");
  29. rows[2].getCell(0).setHyperlink(link3);
  30. rows[2].getCell(0).setCellStyle(style);
  31. //Workbook内
  32. rows[3].createCell(0).setCellValue("Worksheet Link");
  33. HSSFHyperlink link4 = createHelper.createHyperlink(HSSFHyperlink.LINK_DOCUMENT);
  34. link4.setAddress("sheetname1!A1");
  35. rows[3].getCell(0).setHyperlink(link4);
  36. rows[3].getCell(0).setCellStyle(style);

32、设置单元格横向对齐,纵向对齐

Java代码  
  1. //横向对齐
  2. wb.getSheet("sheetname7").setColumnWidth(2, 3072);
  3. Row[] row = new Row[7];
  4. Cell[] cell = new Cell[7];
  5. for (int i = 0 ; i < 7 ; i++){
  6. row[i] = wb.getSheet("sheetname7").createRow(i + 1);
  7. cell[i] = row[i].createCell(2);
  8. cell[i].setCellValue("Please give me a receipt");
  9. }
  10. CellStyle style0 = wb.createCellStyle();
  11. style0.setAlignment(CellStyle.ALIGN_GENERAL);
  12. cell[0].setCellStyle(style0);
  13. CellStyle style1 = wb.createCellStyle();
  14. style1.setAlignment(CellStyle.ALIGN_LEFT);
  15. cell[1].setCellStyle(style1);
  16. CellStyle style2 = wb.createCellStyle();
  17. style2.setAlignment(CellStyle.ALIGN_CENTER);
  18. cell[2].setCellStyle(style2);
  19. CellStyle style3 = wb.createCellStyle();
  20. style3.setAlignment(CellStyle.ALIGN_RIGHT);
  21. cell[3].setCellStyle(style3);
  22. CellStyle style4 = wb.createCellStyle();
  23. style4.setAlignment(CellStyle.ALIGN_FILL);
  24. cell[4].setCellStyle(style4);
  25. CellStyle style5 = wb.createCellStyle();
  26. style5.setAlignment(CellStyle.ALIGN_JUSTIFY);
  27. cell[5].setCellStyle(style5);
  28. CellStyle style6 = wb.createCellStyle();
  29. style6.setAlignment(CellStyle.ALIGN_CENTER_SELECTION);
  30. cell[6].setCellStyle(style6);
  31. //纵向对齐
  32. Row row2 = wb.getSheet("sheetname8").createRow(1);
  33. row2.setHeightInPoints(70);
  34. Cell[] cell2 = new Cell[4];
  35. for (int i = 0 ; i < 4 ; i++){
  36. cell2[i] = row2.createCell(i + 1);
  37. cell2[i].setCellValue("Please give me a receipt");
  38. }
  39. CellStyle style02 = wb.createCellStyle();
  40. style02.setVerticalAlignment(CellStyle.VERTICAL_TOP);
  41. cell2[0].setCellStyle(style02);
  42. CellStyle style12 = wb.createCellStyle();
  43. style12.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
  44. cell2[1].setCellStyle(style12);
  45. CellStyle style22 = wb.createCellStyle();
  46. style22.setVerticalAlignment(CellStyle.VERTICAL_BOTTOM);
  47. cell2[2].setCellStyle(style22);
  48. CellStyle style32 = wb.createCellStyle();
  49. style32.setVerticalAlignment(CellStyle.VERTICAL_JUSTIFY);
  50. cell2[3].setCellStyle(style32);

33、设置单元格旋转角度

Java代码  
  1. Row[] row = new Row[4];
  2. Cell[] cell = new Cell[4];
  3. for (int i = 0 ; i < 4 ; i++){
  4. row[i] = wb.getSheet("sheetname9").createRow(i + 1);
  5. cell[i] = row[i].createCell(2);
  6. cell[i].setCellValue("Coffee");
  7. }
  8. CellStyle style0 = wb.createCellStyle();
  9. style0.setRotation((short)45);
  10. cell[0].setCellStyle(style0);
  11. CellStyle style1 = wb.createCellStyle();
  12. style1.setRotation((short)0);
  13. cell[1].setCellStyle(style1);
  14. CellStyle style2 = wb.createCellStyle();
  15. style2.setRotation((short)-45);
  16. cell[2].setCellStyle(style2);
  17. CellStyle style3 = wb.createCellStyle();
  18. style3.setRotation((short)-90);
  19. cell[3].setCellStyle(style3);

34、设置单元格自动折行

Java代码  
  1. Row[] row = new Row[2];
  2. Cell[] cell = new Cell[2];
  3. for (int i = 0 ; i < 2 ; i++){
  4. row[i] = wb.getSheet("sheetname10").createRow(i + 1);
  5. cell[i] = row[i].createCell(2);
  6. cell[i].setCellValue("Thank you very much.");
  7. }
  8. CellStyle style0 = wb.createCellStyle();
  9. style0.setWrapText(true);
  10. cell[0].setCellStyle(style0);
  11. CellStyle style1 = wb.createCellStyle();
  12. style1.setWrapText(false);
  13. cell[1].setCellStyle(style1);

35、设置单元格文字缩进

Java代码  
  1. Row[] row = new Row[4];
  2. Cell[] cell = new Cell[4];
  3. for (int i = 0 ; i < 4 ; i++){
  4. row[i] = wb.getSheet("sheetname11").createRow(i + 1);
  5. cell[i] = row[i].createCell(2);
  6. cell[i].setCellValue("Coffee");
  7. }
  8. CellStyle style1 = wb.createCellStyle();
  9. style1.setIndention((short)1);
  10. style1.setAlignment(CellStyle.ALIGN_LEFT);
  11. cell[1].setCellStyle(style1);
  12. CellStyle style2 = wb.createCellStyle();
  13. style2.setIndention((short)2);
  14. style2.setAlignment(CellStyle.ALIGN_LEFT);
  15. cell[2].setCellStyle(style2);
  16. CellStyle style3 = wb.createCellStyle();
  17. style3.setIndention((short)3);
  18. style3.setAlignment(CellStyle.ALIGN_LEFT);
  19. cell[3].setCellStyle(style3);

36、自定义格式

Java代码  
  1. Row[] rows = new Row[2];
  2. for (int i = 0; i < rows.length; i++) {
  3. rows[i] = wb.getSheet("sheetname12").createRow(i + 1);
  4. }
  5. DataFormat format = wb.createDataFormat();
  6. CellStyle[] styles = new CellStyle[2];
  7. for (int i = 0; i < styles.length; i++) {
  8. styles[i] = wb.createCellStyle();
  9. }
  10. styles[0].setDataFormat(format.getFormat("0.0"));
  11. styles[1].setDataFormat(format.getFormat("#,##0.000"));
  12. Cell[] cells = new Cell[2];
  13. for (int i = 0; i < cells.length; i++)  {
  14. cells[i] = rows[i].createCell(1);
  15. cells[i].setCellValue(1111.25);
  16. cells[i].setCellStyle(styles[i]);
  17. }

37、设置公式

Java代码  
  1. Row row1 = wb.getSheet("sheetname13").createRow(1);
  2. Row row2 = wb.getSheet("sheetname13").createRow(2);
  3. Cell cell1_1 = row1.createCell(1);
  4. Cell cell1_2 = row1.createCell(2);
  5. Cell cell1_3 = row1.createCell(3);
  6. Cell cell2_3 = row2.createCell(3);
  7. cell1_1.setCellValue(30);
  8. cell1_2.setCellValue(25);
  9. cell1_3.setCellFormula("B2+C2");
  10. cell2_3.setCellFormula("MOD(B2,C2)");

38、画直线,圆圈(椭圆),正方形(长方形),Textbox

Java代码  
  1. HSSFPatriarch patriarch = ((HSSFSheet)wb.getSheet("sheetname14")).createDrawingPatriarch();
  2. //直线
  3. HSSFClientAnchor clientAnchor1 = new HSSFClientAnchor(0, 0, 0, 0,
  4. (short) 4, 2, (short) 6, 5);
  5. HSSFSimpleShape shape1 = patriarch.createSimpleShape(clientAnchor1);
  6. shape1.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
  7. //圆圈(椭圆)
  8. HSSFClientAnchor clientAnchor2 = new HSSFClientAnchor(0, 0, 0, 0,
  9. (short) 8, 4, (short) 6, 5);
  10. HSSFSimpleShape shape2 = patriarch.createSimpleShape(clientAnchor2);
  11. shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_OVAL);
  12. //正方形(长方形)
  13. HSSFClientAnchor clientAnchor3 = new HSSFClientAnchor(0, 0, 0, 0,
  14. (short) 12, 6, (short) 6, 5);
  15. HSSFSimpleShape shape3 = patriarch.createSimpleShape(clientAnchor3);
  16. shape3.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
  17. //Textbox
  18. HSSFClientAnchor clientAnchor4 = new HSSFClientAnchor(0, 0, 0, 0,
  19. (short) 14, 8, (short) 6, 5);
  20. HSSFTextbox textbox = patriarch.createTextbox(clientAnchor4);
  21. textbox.setString(new HSSFRichTextString("This is a test"));

39、插入图片

Java代码  
  1. //需要commons-codec-1.6.jar
  2. FileInputStream jpeg = new FileInputStream("resource/test.jpg");
  3. byte[] bytes = IOUtils.toByteArray(jpeg);
  4. int pictureIndex = wb.addPicture(bytes, HSSFWorkbook.PICTURE_TYPE_JPEG);
  5. jpeg.close();
  6. HSSFCreationHelper helper = (HSSFCreationHelper) wb.getCreationHelper();
  7. HSSFPatriarch patriarch = ((HSSFSheet)wb.getSheet("sheetname15")).createDrawingPatriarch();
  8. HSSFClientAnchor clientAnchor = helper.createClientAnchor();
  9. clientAnchor.setCol1(3);
  10. clientAnchor.setRow1(2);
  11. HSSFPicture picture = patriarch.createPicture(clientAnchor, pictureIndex);
  12. picture.resize();

40、设置可输入List

Java代码  
  1. CellRangeAddressList addressList = new CellRangeAddressList(
  2. 0,
  3. 0,
  4. 0,
  5. 0);
  6. final String[] DATA_LIST = new String[] {
  7. "10",
  8. "20",
  9. "30",
  10. };
  11. DVConstraint dvConstraint =
  12. DVConstraint.createExplicitListConstraint(DATA_LIST);
  13. HSSFDataValidation dataValidation = new HSSFDataValidation(addressList, dvConstraint);
  14. dataValidation.setSuppressDropDownArrow(false);
  15. wb.getSheet("sheetname16").addValidationData(dataValidation);

41、设置输入提示信息

Java代码  
  1. CellRangeAddressList addressList = new CellRangeAddressList(
  2. 0,
  3. 0,
  4. 0,
  5. 0);
  6. final String[] DATA_LIST = new String[] {
  7. "10",
  8. "20",
  9. "30",
  10. };
  11. DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(DATA_LIST);
  12. HSSFDataValidation dataValidation =
  13. new HSSFDataValidation(addressList, dvConstraint);
  14. dataValidation.setSuppressDropDownArrow(false);
  15. dataValidation.createPromptBox("输入提示", "请从下拉列表中选择!");
  16. dataValidation.setShowPromptBox(true);
  17. wb.getSheet("sheetname17").addValidationData(dataValidation);

41、设置表格边框

HSSFCellStyle style = wb.createCellStyle();

style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框

43.POI的HSSFRichTextString的使用简介
在使用Apache的POI库生成EXCEL文件时,经常会遇到这样的情况:使用不同的格式格式化一个单元格中的内容,比如说:一个单元格的内容是“first, second”,现在要分别使用红色带删除线格式化"first", 使用蓝色格式化“second",在这种情况下可以使用HSSFRichText来实现这一目的,下面的代码简单的示例了上述需求的实现:

//创建工作簿  HSSFWorkbook wb = new HSSFWorkbook();  //创建工作表  HSSFSheet sheet = wb.createSheet();  //为工作表添加行  HSSFRow row = sheet.createRow(0);  //添加单元格  HSSFCell cell = row.createCell(0);  //创建字体  HSSFFont ftRed = wb.createFont();  ftRed.setStrikeout(true);  ftRed.setColor(HSSFColor.RED.index);  HSSFFont ftBlue = wb.createFont();  ftBlue.setColor(HSSFColor.BLUE.index);  //往单元格中写入的内容,并使用ft格式化"second"单词  String[] subStr = {  "first", "second"  };  String sText = subStr[0] + "," + subStr[1];  HSSFRichTextString textString = new HSSFRichTextString(sText);  textString.applyFont(  sText.indexOf(subStr[0]),  sText.indexOf(subStr[0]) + subStr[0].length(),  ftRed  );  textString.applyFont(  sText.indexOf(subStr[1]),  sText.indexOf(subStr[1]) + subStr[1].length(),  ftBlue  );  cell.setCellValue(textString);  

上述代码片段的生成效果为:

java读写EXCEL之poi相关推荐

  1. Java读写Excel之POI超入门(转)

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能.Apache POI ...

  2. java读写excel文件poi_Java利用POI读写Excel文件工具类

    本文实例为大家分享了Java读写Excel文件工具类的具体代码,供大家参考,具体内容如下 package com.test.app.utils; import java.io.File; import ...

  3. Java操作Excel之POI:java读写excel文件以及打印设置

    Java操作Excel之POI:java读写excel文件以及打印设置 POI的jar包下载地址:http://poi.apache.org/download.html 注意:项目中导入poi 4.0 ...

  4. Java读写Excel原来这么简单

    前言 相信现在很多搞后端的同学大部分做的都是后台管理系统,那么管理系统就肯定免不了 Excel 的导出导入功能,今天我们就来介绍一下 Java 如何实现 Excel 的导入导出功能. Java领域解析 ...

  5. Java读写Excel之HSSFWorkbook、XSSFWorkbook、Workbook

    Java读写Excel之HSSFWorkbook.XSSFWorkbook.Workbook 引入maven依赖 <dependency><groupId>org.apache ...

  6. java读写excel表格数据

    java读写excel表格数据 java读写excel表格数据 excel类 package excel;import java.io.File; import jxl.Cell; import jx ...

  7. Java读写Excel简介

    Java读写Excel简介 作者:曹祺 Email:Qi.Cao@Sun.Com Blog: http://blogs.sun.com/greysh  本文难度:入门  本文链接: http://de ...

  8. java写入excel文件poi

    java写入excel文件 java写入excel文件poi,支持xlsx与xls,没有文件自动创建 package com.utils;import java.io.File; import jav ...

  9. 手把手教你用java读写excel表格文件(POI,EasyExcel)

    视频链接-我是学习之星我为狂神打call~ [狂神说Java]POI及EasyExcel一小时搞定通俗易懂 想给项目添加一个表格导入导出功能吗? "xxx管理系统"没有导入导出功能 ...

最新文章

  1. FLEX是什么及与FLASH的关系的介绍
  2. 如何把Word里的公式放到PowerPoint里
  3. 云计算的台前幕后 ——微云网络
  4. windows 技术篇 - 启动项里没有的程序设置为开机启动方法
  5. Java八大基本数据类型和对应的封装类型
  6. win10开始不显示python_Win 10 使用 Python遇到奇怪的问题
  7. Java学习进度(2013.03.13)—Struts2学习一
  8. liunx版mysql服务无法启动_linux环境下mysql无法启动
  9. 启动azkaban报错_解决启动Azkaban报错问题:java.lang.NoSuchMethodError: com.google.comm
  10. DevExpress 程序启动设置
  11. JS JQ 页面加载顺序方法的区别
  12. Docker学习笔记之Docker应用于服务化开发
  13. bat脚本监控tomcat并启动_windows使用批处理发布web到tomcat并启动tomcat脚本分享
  14. 人脸识别考勤机选型验收标准
  15. Pale Blue Dot/暗淡蓝点------Carl Sagan/卡尔萨根
  16. 《经济学通识》二、管制的愿望与结果
  17. 一作发表6篇论文,他博三才出科研成果,厚积薄发终获成功
  18. win7系统启动到一半停止_win7系统装一半死机的解决方法
  19. Penn Treebank词性标记集(符号说明)
  20. 本地缓存:为什么要用本地缓存?用它会有什么问题?

热门文章

  1. idea中使用git更新代码,导致未提交代码被覆盖的解决办法
  2. 【蓝桥杯】交换瓶子(临阵磨枪,不快也光 一看就懂的简单图论)
  3. linux7inittab文件不存在,嵌入式linux启动时运行的inittab文件
  4. IntelliJ IDEA 下的SVN使用
  5. 第六章 C语言数组_C语言变长数组:使用变量指明数组的长度
  6. c语言中数组长度的计算
  7. Gerrit推送代码失败
  8. 如何用画图将另一个图片的成分复制粘贴?
  9. 使用NG-ZORRO(Angular 组件库)中Table组件,通过columnTable属性固定列,结果每行数据内容穿透了两遍的固定列;鼠标滑过该条数据时,两侧固定列的背景色不跟着改变~
  10. 猫猫向前冲【排名】【拓扑排序】【图】