• Apache POI使用指南(HSSFWorkbook生成excel)


    说 明:

    • 由于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

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

  • 相关阅读:
    LeetCode 183. Customers Who Never Order (从不订购的客户)
    LeetCode 182. Duplicate Emails (查找重复的电子邮箱)
    LeetCode 181. Employees Earning More Than Their Managers (超过经理收入的员工)
    LeetCode 176. Second Highest Salary (第二高的薪水)
    CMake Tutorial
    osx c++连接mysql
    为mysql 表重新设置自增的主键id
    更改pandas dataframe 列的顺序
    会场安排问题
    nlpir分词器过期处理
  • 原文地址:https://www.cnblogs.com/whqworld/p/10564916.html
Copyright © 2020-2023  润新知