apache-poi

excel类型

excel分为03版本和07版本

  • 03版本 new HSSFWorkbook();
    优点:速度快
    缺点:只能写入65536行数据
    文件类型:.xls
  • 07版本 new XSSFWorkbook();
    优点:不限制写入数量
    缺点:容易造成内存溢出(OOM),速度慢
    文件类型:.xlsx
  • 07加速版 new SXSSFWorkbook();
    在写入过程中会产生临时文件,需要手动清除:((SXSSFWorkbook)wb).dispose();
    文件类型:.xlsx

依赖

xml 复制代码
<!--03-->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.12</version>
</dependency>
<!--07-->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.12</version>
</dependency>

写入

java 复制代码
private static void write(){
	// 创建一个工作簿
	Workbook wb = new HSSFWorkbook();
	// 创建一个工作表
	Sheet sheet = wb.createSheet("sheet页名称");
	// 创建一行
	Row row = sheet.createRow(0);
	// 创建一个单元格
	Cell cell = row.createCell(0);
	// 生成一张表
	FileOutputStream outputStream = new FileOutputStream(PATH + "demo.xls");
	wb.write(outputStream);
}

读取

java 复制代码
private static void read(){
	FileInputStream inputStream = new FileInputStream(PATH + "demo.xls");
	Workbook wb = new HSSFWorkbook(inputStream);
	Sheet sheet = wb.getSheetAt(0);
	Row row = sheet.getRow(0);
	Cell cell = row.getCell(0);
	// 获取sheet页总行数
	int rowCount = sheet.getPhysicalNumberOfRows();
	// 获取一行的列数
	int cellCount = row.getPhysicalNumberOfCells();
	// 获取单元格的数据类型
	int cellType = cell.getCellType();
	switch (cellType) {
	    case HSSFCell.CELL_TYPE_STRING:cell.getStringCellValue();break;// 读字符串
	    case HSSFCell.CELL_TYPE_BOOLEAN:cell.getBooleanCellValue();break;// 读布尔值
	    case HSSFCell.CELL_TYPE_FORMULA:cell.getCellFormula();break;// 读公式
	    case HSSFCell.CELL_TYPE_BLANK:break;
	    case HSSFCell.CELL_TYPE_ERROR:break;
	    case HSSFCell.CELL_TYPE_NUMERIC:
	        if (HSSFDateUtil.isCellDateFormatted(cell)) {
	            cell.getDateCellValue();// 读日期
	        } else {
	            // 为防止数字过长,将数字以字符串的格式输出
	            cell.setCellType(HSSFCell.CELL_TYPE_STRING);
	            cell.getStringCellValue();
	        }
	        break;
	}
}

通用版-写入

java 复制代码
private void autoWrite(){
    FileOutputStream outputStream = null;
    try {
        创建工作簿
        HSSFWorkbook wb = new HSSFWorkbook();
        
        创建一种字体
        HSSFFont font = wb.createFont();
        // 粗体
        font.setBold(true);
        // 设置字号
        font.setFontHeightInPoints((short) 14);
        
        创建一种风格
        HSSFCellStyle style = wb.createCellStyle();
        // 设置边框:双线
        style.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);// 上
        style.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);// 下
        style.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);// 左
        style.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);// 右
        // 顶端对齐
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP);
        // 垂直居中
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        // 水平居中
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        // 设置字体
        style.setFont(font);
        // 设置背景颜色
        style.setFillBackgroundColor(HSSFColor.GREY_40_PERCENT.index);
        // 设置前景颜色:excel一般使用前景色
        style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
        // 设置模式
        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        // 设置自动换行
        style.setWrapText(true);
        
        创建sheet页
        HSSFSheet sheet = wb.createSheet("sheet页名称");
        // 设置某列为自动列宽
        sheet.autoSizeColumn(0);
        // 设置默认列宽
        sheet.setDefaultColumnWidth(20);
        // 设置列宽(列索引,字节长度 * 2 * 256)
        sheet.setColumnWidth(0,4 * 2 * 256);
        // 合并单元格
        sheet.addMergedRegion(new Region(0,(short)1,0,(short)2));
        
        创建一行
        HSSFRow row = sheet.createRow(0);
        // 设置行高
        row.setHeight((short) 1000);
        
        创建一个单元格
        HSSFCell cell = row.createCell(0);
        // 设置单元格风格
        cell.setCellStyle(style);
        cell.setCellValue(new HSSFRichTextString("支持富文本"));
        
        生成文件
        outputStream = new FileOutputStream(PATH + "demo.xls");
        wb.write(outputStream);
        outputStream.flush();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (outputStream != null) {
            try {
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

计算公式

java 复制代码
// 创建公式计算器
FormulaEvaluator formulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) wb);
// 执行计算
CellValue evaluate = formulaEvaluator.evaluate(cell);
evaluate.formatAsString();
相关推荐
进阶的猿猴2 小时前
easyExcel实现单元格合并
java·excel
黄色茶杯4 小时前
解决WPS的word文件嵌入EXCEL无法双击打开
word·excel·wps
YDS82915 小时前
苍穹外卖 —— 数据统计和使用Apache_POI库导出Excel报表
java·spring boot·后端·excel
办公解码器20 小时前
Excel工作表打开一次后自动销毁文件,回收站中都找不到
数据库·excel
mudtools1 天前
.NET驾驭Excel之力:工作簿与工作表操作基础
c#·.net·excel
mudtools1 天前
.NET驾驭Excel之力:单元格与区域操作详解
c#·.net·excel
秋天之落叶1 天前
使用ADO将excel表内容加载到mssql表中的长度问题
数据库·sqlserver·excel
1314lay_10071 天前
SAP ABAP 导入excel表,导多个sheet
excel·abap
玩泥巴的1 天前
.NET驾驭Excel之力:工作簿与工作表操作基础
c#·excel·二次开发·office·com互操作
mysusheng2 天前
2025 批量下载微博内容/图片/视频,导出word和pdf,微博点赞/评论/转发等数据导出excel
pdf·word·excel