表格操作1 -- 写入
导入包
<!-- 表格 -->
<!-- xls(03)-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<!-- xls(07)-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<!-- 日期格式化工具 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.1</version>
</dependency>
<!-- test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
内容
表格
- 工作薄
- 工作表
- 行
- 列
类
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();