POI 表格操作1 -- 写入

表格操作1 -- 写入

参考视频

导入包




    org.apache.poi
    poi
    3.9



    org.apache.poi
    poi-ooxml
    3.9



    joda-time
    joda-time
    2.10.1



    junit
    junit
    4.12

内容

表格

  1. 工作薄
  2. 工作表

HSSFWorkbook: 操作 03 版本的

public static void main(String[] args) throws IOException {
    /** 创建一个工作薄 */
    HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
    /** 创建一个工作表 */
    Sheet sheet = hssfWorkbook.createSheet("马铃薯统计表");
    /** 创建一个行 */
    Row row1 = sheet.createRow(0);
    /** 创建一个单元格 */
    Cell cell1 = row1.createCell(0);
    cell1.setCellValue("今日新增观众");
    /** 第二个单元格, 放入当前时间 */
    String s = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
    Cell cell2 = row1.createCell(1);
    cell2.setCellValue(s);

    /** 生成一张表 */
    // 路径
    String PATH = "F:\\dome\\dome-one\\myBatismls";
    // 生成一张表 (IO流)   03 版本就是使用 xls 结尾
    FileOutputStream fileOutputStream = new FileOutputStream(PATH + "表.xls");
    // 流 输出
    hssfWorkbook.write(fileOutputStream);
    // 关闭流
    fileOutputStream.close();
    System.err.println("输出完毕");

}
遇见的问题:

运行的时候控制台报错:

Sharing is only supported for boot loader classes because bootstrap classpat

解决方法:

解决方法的地址

在idea 中,依次点击 Run >> Edit configurations… 找到 VM options 配置选项 , 另外解释几个参数的意思,你可以使用命令提示符 java -X来查看更多信息

-Xshare:auto 在可能的情况下使用共享类数据(默认值)
-Xshare:off 不尝试使用共享类数据
-Xshare:on 要求使用共享类数据,否则将失败。这是一个测试选项,可能导致间歇性故障。不应在生产环境中使用它。

XSSFWorkbook : 操作 07 版本的

与 03 版本的区别就是, 对象不同, 文件结尾的后缀不同 .xlsx

public static void testWrite03() throws IOException {
    /** 创建一个工作薄 */
    XSSFWorkbook hssfWorkbook = new XSSFWorkbook();
    /** 创建一个工作表 */
    Sheet sheet = hssfWorkbook.createSheet("马铃薯统计表");
    /** 创建一个行 */
    Row row1 = sheet.createRow(0);
    /** 创建一个单元格 */
    Cell cell1 = row1.createCell(0);
    cell1.setCellValue("今日新增观众");
    /** 第二个单元格, 放入当前时间 */
    String s = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
    Cell cell2 = row1.createCell(1);
    cell2.setCellValue(s);

    /** 生成一张表 */
    // 路径
    String PATH = "F:\\dome\\dome-one\\myBatismls\\intercept";
    // 生成一张表 (IO流)   07 版本就是使用 xlsx 结尾
    FileOutputStream fileOutputStream = new FileOutputStream(PATH + "表.xlsx");
    // 流 输出
    hssfWorkbook.write(fileOutputStream);
    // 关闭流
    fileOutputStream.close();
    System.err.println("输出完毕");
}

SXSSFWorkbook : 加快速度

大文件写入 SXSSFWorkbook : 加快速度

03 最大有 行, 但是速度快!

07 无限制行数, 但是速度慢!

加快速度的办法: SXSSFWorkbook

public static void testWrite03() throws IOException {
    /** 创建一个工作薄 */
    SXSSFWorkbook hssfWorkbook = new SXSSFWorkbook();
    /** 创建一个工作表 */
    Sheet sheet = hssfWorkbook.createSheet("马铃薯统计表");
    /** 创建一个行 */
    Row row1 = sheet.createRow(0);
    /** 创建一个单元格 */
    Cell cell1 = row1.createCell(0);
    cell1.setCellValue("今日新增观众");
    /** 第二个单元格, 放入当前时间 */
    String s = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
    Cell cell2 = row1.createCell(1);
    cell2.setCellValue(s);

    /** 生成一张表 */
    // 路径
    String PATH = "F:\\dome\\dome-one\\myBatismls\\intercept";
    // 生成一张表 (IO流)   03 版本就是使用 xls 结尾
    FileOutputStream fileOutputStream = new FileOutputStream(PATH + "表.xlsx");
    // 流 输出
    hssfWorkbook.write(fileOutputStream);
    // 关闭流
    fileOutputStream.close();
    /** 清除临时文件 */
    hssfWorkbook.dispose();
    System.err.println("输出完毕");
}

原理:

过程中会产生临时文件, 需要清理临时文件.

默认由100条记录被保存在内存中, 如果超过这个数量, 则最前面的数据被写入临时文件

如果自定内存中数据的数量, 可以使用 new SXSSFWorkbook ( 数量 )

获取当前时间:

System.currentTimeMillis();

你可能感兴趣的:(POI 表格操作1 -- 写入)