java操作表格(POI、EasyExcel)

java操作表格

easyExcle在线文档

POI

  • maven依赖
<!--xls(03)-->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.17</version>
		</dependency>
<!--xls(07)-->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.17</version>
		</dependency>
<!--日期格式化工具-->
		<dependency>
			<groupId>joda-time</groupId>
			<artifactId>joda-time</artifactId>
			<version>2.10.1</version>
		</dependency>

创建表

  • 创建一个表写入数据:
    • 03版本:最多65536行数据(new HSSFWorkbook())xls文件名后缀
    • 07版本:无限制行数据:(new XSSFWorkBook())xlsx文件名后缀
	public void test03(){
		//创建一个工作簿:03版:最多65536行数据
		//07版:无限制行数据:new XSSFWorkBook();
		WorkBook workbook = new HSSFWorkbook();
		//创建一个工作表
		Sheet sheet = workbook.createSheet("表名");
		//创建一行
		Row rol1 = sheet.createRow(0);
		//创建一个单元格
		Cell cell = rol1.createCell(0);
		//写入一个数据
		cell.setCellValue("数据");
		//joda-time里的时间类
		String s = new DataTime().toString("yyyy-MM-dd HH:mm:ss");
		//生成一张表输出:xls版本
		FileOutputStream file = new FileOutputStream("path/name.xsl");
		workBook.write(file);
		//关闭流
		file.close();
	}
  • 数据批量导入:
    • HSSF
      • 最多只能处理65536行数据
      • 过程中写入缓存,不操作磁盘,最后一次性写入磁盘,速度快
    • XSSF
      • 速度慢,耗内存,也会发生内存溢出
      • 可以写较大的数据量
    • SXSSF
      • 加速版的XSSF
      • 过程中会产生临时文件,需要清理临时文件
      • 默认100条记录保存在内存中,超过写入
      • 如果要自定义内存中的数据量:new SXSSFWorkBook(数量);
      • 清除临时文件:==((SXSSFWorkBook)workBook).dispose();

读取表

  • 不同版本使用不同的WorkBook
	public void test03(){
		FileInputStream file = new FileInputStream("path/name.xsl");
		//创建一个工作簿
		WorkBook workbook = new HSSFWorkbook(file);
		//创建一个工作表
		Sheet sheet = workbook.getSheetat("表名");
		//创建一行
		Row rol1 = sheet.getRow(0);
		//创建一个单元格
		Cell cell = rol1.getCell(0);
		//获取数据
		System.out.println(cell.getNumericCellValue());
		//关闭流
		file.close();
	}
  • 表格中的不同类型的获取
    • 得到列数:row.getPhysicalNumberOfCells();
    • 得到行数:sheet.getPhyscicalNumperOfRows();
    • String类型数据获取:cell.getStringCellValue();
    • 对于不知道数据类型的匹配列数据类型
// getCell 获取单元格数据
if (row.getCell(k) != null) { 
		switch (row.getCell(k).getCellType()) {
			case Cell.CELL_TYPE_BOOLEAN://布尔
				System.out.println(row.getCell(k).getBooleanValue());
				break;
			case Cell.CELL_TYPE_NUMERIC:{//数字、日期
					if (HSSFDateUtil.isCellDateFormatted(cell)) {//日期
						Date date = cell.getDateCellValue();
						cellValue = new DateTime(date).toString("yyyy-MM-dd");
					} else {
							//不是日期转换成String类型输出
							cell.setCellType(HSSFCell.CELL_TYPE_STRING);
							cellValue = cell.toString();
					}
					break;
				}
			case Cell.CELL_TYPE_STRING://字符串
				System.out.println(row.getCell(k).getStringValue());
				break;
			case Cell.CELL_TYPE_BLANK://break;
			case Cell.CELL_TYPE_ERROR://错误
				System.out.println(row.getCell(k).getErrorCellValue());
				break;
			case Cell.CELL_TYPE_FORMULA://公式
				System.out.println(evaluator.evaluate(row.getCell(k)).getNumberValue());
				break;
			}
			System.out.print(row.getCell(k) + "\t");
		} else {
			System.out.print("\t");
		}
  • 计算公式的使用
    • 得到计算工具:FormulaEvaluatornew formulaEvaluator = HSSFFormulaEvaluator((HSSFWorkBook)workBook);
    • 得到表格公式:String formula=cell.getCellFormula()
    • 计算表格:CellValue evaluate = formulaEvaluator.evaluate(cell)
    • 转换为字符串:String cellValue = evaluate.formatAsString();

easyExcel

参考文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值