设定excel导出时单元格的格式

news/2024/7/21 3:56:39 标签: excel

一、需求

要求excel导出时,对应列里面的内容格式为日期,数值格式并有精度要求 ,如下图:

使用alibaba,easyexcel,默认的导出数据格式为文本,excel显示为常规,使用数据规范注解@NumberFormat一直不生效,无奈选择原生的apache.poi。

二、具体实现

   public void writePoi(List<Export> exportList) {
        // 1.在内存中创建一个excel文件,excel2003之前版本使用HSSFWorkbook,之后版本使用XSSFWorkbook
        HSSFWorkbook workbook = new HSSFWorkbook();
//        XSSFWorkbook workbook = new XSSFWorkbook();
        // 2.创建工作簿
        HSSFSheet sheet = workbook.createSheet("已开具发票");
        //设置列宽
        sheet.setDefaultColumnWidth(15);
        // 3.创建标题行

        HSSFRow titlerRow = sheet.createRow(0);

        titlerRow.createCell(0).setCellValue("开票日期");
        titlerRow.createCell(1).setCellValue("发票号码");
        titlerRow.createCell(2).setCellValue("购方税号");
        titlerRow.createCell(3).setCellValue("购方名称");
        titlerRow.createCell(4).setCellValue("规格型号");
        titlerRow.createCell(5).setCellValue("计量单位");
        titlerRow.createCell(6).setCellValue("单价");
        titlerRow.createCell(7).setCellValue("数量");
        titlerRow.createCell(8).setCellValue("金额");
        titlerRow.createCell(9).setCellValue("税额");
        
        //4.设置需要的格式
        DataFormat dataFormat = workbook.createDataFormat();
        CellStyle dateStyle = workbook.createCellStyle();
        dateStyle.setDataFormat(dataFormat.getFormat("yyyy-m-d;@")); // 设置日期格式,注意日期格式规范之后不会直接显示单元格式为日期,但是使用筛选功能时可以按照日期范围进行筛选。
        dateStyle.setAlignment(HorizontalAlignment.CENTER); // 设置水平居中

        CellStyle doubleStyle = workbook.createCellStyle();
        doubleStyle.setDataFormat(dataFormat.getFormat("0.00_ ")); // 设置数值格式
        doubleStyle.setAlignment(HorizontalAlignment.CENTER); // 设置水平居中

        CellStyle floatStyle = workbook.createCellStyle();
        floatStyle.setDataFormat(dataFormat.getFormat("0.00000000_ ")); // 设置单价格式
        floatStyle.setAlignment(HorizontalAlignment.CENTER); // 设置水平居中

        // 5.遍历数据,创建数据行
        for (Export export : exportList) {
            // 获取最后一行的行号
            int lastRowNum = sheet.getLastRowNum();
            // 添加新行
            HSSFRow dataRow = sheet.createRow(lastRowNum + 1);
            HSSFCell hssfCell0 = dataRow.createCell(0);
            hssfCell0.setCellStyle(dateStyle);
            hssfCell0.setCellValue(export.getKprq());
            dataRow.createCell(1).setCellValue(export.getFphm());
            dataRow.createCell(2).setCellValue(export.getGfsh());
            dataRow.createCell(3).setCellValue(export.getGfmc());
            dataRow.createCell(4).setCellValue(export.getGgxh());
            dataRow.createCell(5).setCellValue(export.getJldw());
            HSSFCell hssfCell6 = dataRow.createCell(6);
            hssfCell6.setCellStyle(floatStyle);
            hssfCell6.setCellValue(export.getDj());

            HSSFCell hssfCell7 = dataRow.createCell(7);
            hssfCell7.setCellStyle(doubleStyle);
            hssfCell7.setCellValue(export.getSl());

            HSSFCell hssfCell8 =dataRow.createCell(8);
            hssfCell8.setCellStyle(doubleStyle);
            hssfCell8.setCellValue(export.getJe());

            HSSFCell hssfCell9 =dataRow.createCell(9);
            hssfCell9.setCellStyle(doubleStyle);
            hssfCell9.setCellValue(export.getSe());
        }
        // 设置自适应列宽
        for (int i = 0; i < sheet.getRow(0).getLastCellNum(); i++) {
            sheet.autoSizeColumn(i);
        }
        // 5.创建文件名
        String fileName = "已开发票明细导出_" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xls";
        // 6.获取输出流对象
        OutputStream outputStream;
        try {
            outputStream = new FileOutputStream(excelFilePath + "\\" + fileName);
        // 7.写出文件,关闭流
            workbook.write(outputStream);
            workbook.close();
            outputStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();

        }
    }

注:数据规范所需的format规则可从excel中的格式设置看到,具体步骤为:

右键单击单元格,选择设置单元格格式,1选择你需要的格式,2设定好精度,

3直接点击自定义,即可看到format规范,注意数值格式的规范后面必须有一个空格,否则不生效,可以看到下图的下划线与光标之间是有一个空格的。


http://www.niftyadmin.cn/n/5021944.html

相关文章

Excel显示列号

默认表格打开列以字母显示 设置方法 文件 -> 工具 -> 选项 -> 常规与保存 设置后效果如下图

YOLO目标检测——路标数据集+已标注voc和yolo格式标签下载分享

实际项目应用&#xff1a;自动驾驶、视频监控和安防、物体识别和分类、城市规划和地理信息系统等等数据集说明&#xff1a;YOLO路标目标检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;图片格式为jpg&#xff0c;共900张图片&#xff0c;…

【数据结构】长篇详解堆,堆的向上/向下调整算法,堆排序及TopK问题

文章目录 堆的概念性质图解 向上调整算法算法分析代码整体实现 向下调整算法算法分析整体代码实现 堆的接口实现初始化堆销毁堆插入元素删除元素打印元素判断是否为空取首元素实现堆 堆排序创建堆调整堆整合步骤 TopK问题 堆的概念 堆就是将一组数据所有元素按完全二叉树的顺序…

TikTok挑战:社交模式对现实友情的冲击

随着社交媒体平台的崛起&#xff0c;我们的社交模式正在经历着前所未有的变革。TikTok&#xff0c;作为最具代表性的短视频分享应用之一&#xff0c;已经深刻地改变了我们的社交方式和互动模式。然而&#xff0c;这种改变并不总是带来积极的影响&#xff0c;特别是当我们思考Ti…

元宇宙全球市场规模到2030年将达9805亿美元!

元宇宙是一种新兴的概念&#xff0c;它指的是一个虚拟的世界&#xff0c;由人工智能、虚拟现实、区块链等技术构建而成。元宇宙的起源可以追溯到上世纪90年代的虚拟世界“第二人生”&#xff0c;但直到近年来&#xff0c;随着技术的不断发展&#xff0c;它才逐渐成为了人们关注…

vim编辑器 用法

命令模式 gg 将光标定位到最开始行 G 将光标定位到最结尾行 nG 将光标定位到指定任意行 shift$ 将光标定位到当前行的最右边 shift^ 将光标定…

笔记本选购指南

大学生笔记本电脑选购指南 文章目录 笔记本分类指标排行 了解自身需求理工科文科艺术总结 参考指标品牌CPU显卡屏幕其他 购买渠道推荐游戏本Redmi G 锐龙版联想G5000惠普光影精灵9天选4锐龙版联想R7000P暗影精灵9联想拯救者R9000P 全能本华硕无畏PRO15联想小新Pro14 2023 轻薄本…