说 明:

 

  • 由于poi的功能多样,可以生成ppt、word、excel.......,本文就以生成excel为例进行说明,相信聪明的你一定能举一反三

 

  • 使用的版本4.0.1

 

  • maven依赖

      <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.0.1</version>
     </dependency>

  •    poi组件说明
Apache POI组件
组件 组件类型
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格式档案

 

  

 

 

 

 

 

 

 

 

 

  • 生成一个excel文档demo

代码

public static void hssfDemo1() throws Exception{
        
        //1.创建一个文档对象HSSFWorkbook (一个excel文档就对应一个HSSFWorkbook实例), 有两种创建方式
        //方式一
        HSSFWorkbook wb = new HSSFWorkbook();
        //方式二
//        HSSFWorkbook wb = HSSFWorkbookFactory.createWorkbook();  
        
        //2.我们都知道excel文档里面对应了sheet(可以有多个sheet),所以第二个步骤就是生成sheet对象
        HSSFSheet sheet1 = wb.createSheet("sheet1");  //"sheet1"未对应的sheet的名称
        
        //3.sheet里面的内容都是一行一行的格子组成,所以需要创建“行对象”
        HSSFRow row0 = sheet1.createRow(0);    //创建第一行,"0"为行号的下标
        
        //4.生成列
        HSSFCell cell0 = row0.createCell(0);   //生成第一行的第一列
        HSSFCell cell1 = row0.createCell(1);   //生成第一行的第二列
        HSSFCell cell2 = row0.createCell(2);   //生成第一行的第三列
        HSSFCell cell3 = row0.createCell(3);   //生成第一行的第四列
        
        //5.给列进行赋值
        cell0.setCellValue("姓名");
        cell1.setCellValue("年龄");
        cell2.setCellValue("地址");
        cell3.setCellValue("电话");
        
        
        //6.输出excel文件
        FileOutputStream fileOut = new FileOutputStream("C:/workbook.xls");
        wb.write(fileOut);
    }

 

生成文件结果

           

 

              

  • 相信聪明的你看了上面的demo,对生成excel有了一个感性的认识,下面来生成一个有点样子的excel文档(合并单元格、设置样式、设置字体。。。。。。)

 

 

public static void hssfDemo2() throws Exception{
        
        //创建文档对象HSSFWorkbook
        HSSFWorkbook wb = HSSFWorkbookFactory.createWorkbook();

        //创建sheet
        HSSFSheet sheet1 = wb.createSheet("我是sheet1");
        HSSFSheet sheet2 = wb.createSheet("我是sheet2");

        
        //由于此方式创建行和列需要很大的代码量,我们可以采用循环的方式进行构建
        /* 
        //创建sheet1里面的行
        HSSFRow row0 = sheet1.createRow(0); // 创建第一行,"0"为行号的下标
        HSSFRow row1 = sheet1.createRow(1); // 创建第一行,"0"为行号的下标
        HSSFRow row2 = sheet1.createRow(2); // 创建第一行,"0"为行号的下标

        // 4.生成列
        HSSFCell cell0 = row0.createCell(0); // 生成第一行的第一列
        HSSFCell cell1 = row0.createCell(1); // 生成第一行的第二列
        HSSFCell cell2 = row0.createCell(2);   //生成第一行的第三列
        HSSFCell cell3 = row0.createCell(3);   //生成第一行的第四列
        */
        
        //for循环方式进行构建"行和列"
        //分别给sheet1和sheet2构建10行
        for(int i = 0; i < 10; i++){   //生成10行
            HSSFRow a = sheet1.createRow(i);  //sheet1的行
            HSSFRow b = sheet2.createRow(i);  //sheet2的行
        }
        
        //给行设置标题
        HSSFRow row0OnSheet1 = sheet1.getRow(0);
        HSSFRow row1OnSheet1 = sheet1.getRow(1);
        
        row0OnSheet1.createCell(0).setCellValue("姓名");
        row0OnSheet1.createCell(1).setCellValue("年龄");
        row0OnSheet1.createCell(2).setCellValue("联系方式");
        row0OnSheet1.createCell(3);
        row0OnSheet1.createCell(4);
        
        
        row1OnSheet1.createCell(2).setCellValue("QQ");
        row1OnSheet1.createCell(3).setCellValue("微信");
        row1OnSheet1.createCell(4).setCellValue("手机");
        
        //合并单元格
        //上下单元格合并操作 (将"姓名"、"年龄"两列每个单元格上下合并)
        sheet1.addMergedRegion(new CellRangeAddress(0, 1, 0, 0));  //将第一列的“第一行与第二行”合并       参数说明:(0, 1, 0, 0) -->(第一行下标, 第二行下标, 第一列, 第一列下标)
        sheet1.addMergedRegion(new CellRangeAddress(0, 1, 1, 1)); 
        
        //左右单元格合并 (将第一行的三个单元格(下标为2 3 4)合并成一个单元格,"联系方式")
        sheet1.addMergedRegion(new CellRangeAddress(0, 0, 2, 4)); 
        
        
        //设置样式
        //创建字体样式
        HSSFFont font = wb.createFont(); 
        font.setBold(true);                     //加粗
        font.setColor((short)50);               //设置字体颜色
        font.setFontHeightInPoints((short) 12); //字体大小
        //构建列的样式
        HSSFCellStyle cs = wb.createCellStyle();
        cs.setFont(font);                                   //列的字体
        cs.setAlignment(HorizontalAlignment.CENTER);        //水平居中对齐
        cs.setVerticalAlignment(VerticalAlignment.CENTER);  //垂直居中对齐
        
        //给excel列加上样式
        for(int i = 0; i < 10; i++){
            sheet1.setColumnWidth(i, 20 * 256);
            HSSFCell cell = row0OnSheet1.getCell(i);
            HSSFCell cell1 = row1OnSheet1.getCell(i);
            if(cell != null){
                cell.setCellStyle(cs);
            }
            if(cell1 != null){
                cell1.setCellStyle(cs);
            }
        }
        
        
        //输出excel文件
          FileOutputStream fileOut = new FileOutputStream("C:/workbook.xls");
          wb.write(fileOut);
        
    }

 

 

生成文件结果

 

 

 本文地址:https://www.cnblogs.com/whqworld/p/10564916.html

 

 

如果你有更简介的方式欢迎留言  !谢谢