zoukankan      html  css  js  c++  java
  • poi 操作Excel 以及大数据量导出

    maven 依赖 (版本必须一致,否则使用SXSSFworkbook 时程序会报错)

    <dependency>
          <groupId>org.apache.poi</groupId>
          <artifactId>poi</artifactId>
          <version>3.9</version>
        </dependency>
        <dependency>
          <groupId>org.apache.poi</groupId>
          <artifactId>poi-ooxml</artifactId>
          <version>3.9</version>
        </dependency>

    HSSFworkbook,XSSFworkbook,SXSSFworkbook 三者 区别

    HSSFworkbook:操作Excel2003版本,扩展名为xls

    XSSFworkbook:操作Excel2007版本,扩展名为xlsx

    SXSSFworkbook :用于大数据量导出,当数据量超过 65536后 程序 会报错:Invalid row number (65536) outside allowable range (0..65535)

    例子1:简单导出Excel

     @Test
        public void test1() throws IOException {
            // 读取文件
            POIFSFileSystem fs = new POIFSFileSystem(Thread.currentThread().getContextClassLoader().getResourceAsStream("test.xls"));
            // 创建一个工作簿
            HSSFWorkbook workbook = new HSSFWorkbook(fs);
            // 获取第一个sheet
            HSSFSheet sheet = workbook.getSheetAt(0);
            System.out.println(sheet.getSheetName());
            // 获取第一行
            HSSFRow row = sheet.getRow(0);
            // 获取第一行第一列
            HSSFCell cell = row.getCell(0);
            System.out.println(cell.getStringCellValue());
    
            // 创建一行
            HSSFRow row1 = sheet.createRow(1);
            // 创建单元格
            HSSFCell cell1 = row1.createCell(0);
            // 单元格赋值
            cell1.setCellValue("我是程序创建的内容");
            System.out.println(cell1.getStringCellValue());
    
            // 创建输出流
            FileOutputStream os = new FileOutputStream(new File("D:\8888.xls"));
            // 输出文件
            workbook.write(os);
        }

    例子2:导出查询数据

     @Test
        public void test2() {
            // 模拟导出数据
            Object[] obj = new Object[]{"哈哈", "呵呵", "哼哼"};
            List<Object[]> list = new ArrayList<Object[]>();
            // HSSFWorkbook 只支持2003版本及以下版本Excel 且容量最大为65536
            for (int i = 0; i < 65536; i++) {
                list.add(obj);
            }
    
            export("test.xls", list, 2);
        }
    
        /**
         * poi 导出
         * @param fileName
         * @param objs
         * @param rowIndex
         */
        private void export(String fileName, List<Object[]> objs, int rowIndex) {
            POIFSFileSystem fs = null;
            FileOutputStream os = null;
            try {
                fs = new POIFSFileSystem(Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName));
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 创建一个工作簿
            try {
                HSSFWorkbook workbook = new HSSFWorkbook(fs);
                HSSFCellStyle style = setCellStyle(workbook);
                // 获取一个sheet页
                HSSFSheet sheet = workbook.getSheetAt(0);
    
                for (int i = rowIndex - 1; i < objs.size(); i++) {
                    // 创建行
                    HSSFRow row = sheet.createRow(i);
    
                    // 创建列
                    for (int j = 0; j < objs.get(i).length; j++) {
                        HSSFCell cell = row.createCell(j);
                        // 设置单元格样式
                        cell.setCellStyle(style);
                        cell.setCellValue(objs.get(i)[j].toString());
                    }
                }
                // 创建输出流
                 os = new FileOutputStream(new File("D:\8888.xls"));
                // 输出文件
                workbook.write(os);
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if (os != null) {
                    try {
                        os.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
    
        /**
         * 设置样式
         * @param workbook
         */
        private HSSFCellStyle setCellStyle(HSSFWorkbook workbook) {
            HSSFCellStyle style = workbook.createCellStyle();
            HSSFFont font = workbook.createFont();
            // 字号
            font.setFontHeightInPoints((short) 12);
            style.setFont(font);
            // 左右居中 上下居中
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
            return style;
        }

    例子3:大数据量导出

    /**
         * 大数据量导出
         * @throws IOException
         */
        @Test
        public void text2() throws IOException {
    
            XSSFWorkbook xssfWorkbook = new   XSSFWorkbook(Thread.currentThread().getContextClassLoader().getResourceAsStream("bigdata.xlsx"));
            SXSSFWorkbook wb = new SXSSFWorkbook(xssfWorkbook, 100);
    
            Sheet sh = wb.getSheetAt(0);
            for(int rownum = 1; rownum < 75537; rownum++){
                Row row = sh.createRow(rownum);
                for(int cellnum = 0; cellnum < 10; cellnum++){
                    Cell cell = row.createCell(cellnum);
                    String address = new CellReference(cell).formatAsString();
                    cell.setCellValue(address);
                }
    
            }
    
    //        // Rows with rownum < 900 are flushed and not accessible
    //        for(int rownum = 0; rownum < 900; rownum++){
    //            Assert.assertNull(sh.getRow(rownum));
    //        }
    //
    //        // ther last 100 rows are still in memory
    //        for(int rownum = 900; rownum < 1000; rownum++){
    //            Assert.assertNotNull(sh.getRow(rownum));
    //        }
    
            FileOutputStream out = new FileOutputStream("D:\sxssf.xlsx");
            wb.write(out);
            out.close();
    
            // dispose of temporary files backing this workbook on disk
            wb.dispose();
        }
  • 相关阅读:
    css常见小问题(个人的积累总结)
    YQBlogs1.2的解读与使用VS2012&LocalDB版本(跟进贴)
    asp.net mvc 用自定义的RazorViewEngine实现主题的自由切换遇到的问题!
    求解?命令行下操作LocalDb的诸多问题
    CentOS7下docker安装
    IIS 应用程序池设置,避免IIS假死
    .NET 将数据输出到WORD、EXCEL、TXT、HTM
    iframe高度动态自适应
    .net利用SQLBulkCopy进行数据库之间的大批量数据传递
    Datatable.Select()用法简介
  • 原文地址:https://www.cnblogs.com/jack-Star/p/8445645.html
Copyright © 2011-2022 走看看