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();
相关推荐
fqbqrr1 小时前
2601Mfc,自动化excel
自动化·excel·mfc
tlwlmy1 小时前
python excel图片批量导出
开发语言·python·excel
TracyDemo20 小时前
excel 透视图怎么进行删除透视图
excel
骆驼爱记录20 小时前
Excel邮件合并嵌入图片技巧
自动化·word·excel·wps·新人首发
avi91111 天前
Unity Data Excel读取方法+踩坑记;和WPS Excel的一些命令
unity·游戏引擎·excel·wps·data
梦幻通灵1 天前
Excel多个sheet合并透视表实现方案【持续更新】
excel
开开心心就好1 天前
键盘映射工具改键位,绿色版设置后重启生效
网络·windows·tcp/ip·pdf·计算机外设·电脑·excel
恬淡如雪1 天前
Excel接口测试自动化实战
爬虫·python·excel
速易达网络1 天前
linux命令大全
linux·运维·excel
Leisure -_-1 天前
新建时没有excel选项,如何添加?
excel