java中excel的导出——基于PO

用户信息批量导出至EXCEL 用户信息批量导出至EXCEL说明:批量导出信息就是将页面查询到的结果,写出到EXCEL文件中。 操作步骤: 一、预备工作0、引入包XLS文件解析:poi-3.7-20101029.jar1、建表userscreate table users( id int primary key auto_increment, name varchar(20) not null, password varcha 阅读详情

目录

1.servlet类

2.导出处理类

第一部分

第二部分

3.excel生成类


1.servlet类

下面为导出的servlet类,继承了HttpServlet,实现了service方法,关键代码为红色部分,excelBook = export(request);

是根据请求参数查询结果并的到Workbook的实体,response用两个set方法设置好之后,用getOutputStream 得到输出流,最后将excelBook写出输出流,在别处看到过

这种写法,用bufferedOutPut可以提高一定性能,但当数据较少时可忽略。下面就是servlet类的源码。


@Named("/servlet/exportBarometerServlet/export")
public class ExportBarometerServlet  extends HttpServlet
{
    private static final ILogger logger = JalorLoggerFactory.getLogger(ExportBarometerServlet.class);
    //excelName加上导出的时间为excel的名称
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
    
    @Inject
    private IRiskBigScreenService riskBigScreenService;
    @Inject
    private IAosService AosService;
    @Override
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException{
         Workbook excelBook = null;
        try
        {
            excelBook = export(request);
        }
        catch (WholeException e)
        {
            throw new ServletException(e);
        } catch (ApplicationException e) {
            e.printStackTrace();
        }
        
        if (excelBook != null)
        {
            String excelName = "IPMO-RiskProjectListMS";
            Date date = new Date();            
            response.setContentType("application/mx-excel");
            response.setHeader("Content-Disposition", "attachment;filename=\"" + excelName+dateFormat.format(date)
                + ".xlsx\"");

            OutputStream out = null;
            try
            {
                out = response.getOutputStream();
                excelBook.write(out);
                out.flush();

            }
            finally
            {
                if (out != null)
                {
                    out.close();
                }
            }
        }
    }


2.导出处理类

第一部分

excelBook = export(request);export()方法我分为两个部分,第一个部分根据request获得List或者Map形式的结果(根据需要转换格式)


private Workbook export(HttpServletRequest request) throws ApplicationException
    {
        String paramsJson = request.getParameter("paramsJson");
        Map map = null;
        try {
            map = JsonUtil.stringToObject(paramsJson, Map.class);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        XiAnQueryConditionVO vo = new XiAnQueryConditionVO();
        if( null != map)
        {
            vo.setPeriod(map.get("period").toString());
            vo.setOrgLevel(map.get("orgLevel").toString());
            vo.setOrgCode(map.get("orgCode").toString());
            vo.setL_proj_bu(map.get("l_proj_bu").toString());
        }


由请求获得json字符串,转化为map,得到入参的vo,调用service方法查询数据,可根据需求选择是否分页。


pagedResult = riskBigScreenService.findBarometerList(vo, pageVO);

List<XiAnBigScreenVO> list = pagedResult.getResult();


将list转化为LinkedHashMap<String,List<String>>,这种格式而不是HashMap是因为LinkedHashMap有序,顺序与getMap(list);中list的顺序一致。也可以转化为List<List<String>>保证顺序。无论哪种,都是为了为excel表格赋值时有序。


LinkedHashMap<String,List<String>> mapresult = getMap(list);


LinkedHashMap<String, List<String>>的String可选择两种,一种是可以确定唯一数据的标识,来自于一条list中的某一字段。

另一种就是直接1,2,3...。


private LinkedHashMap<String, List<String>> getMap(List<XiAnBigScreenVO> resultlist) {
        LinkedHashMap<String, List<String>> map = new LinkedHashMap<>();
        for(XiAnBigScreenVO resultVO : resultlist)
        {
            List<String> list = new ArrayList<>();
            list.add(resultVO.getRegionName());
            list.add(resultVO.getRepofficeName());
            list.add(resultVO.getProjNum());
            list.add(resultVO.getProjName());
            list.add(resultVO.getProjLevel());
                            
            list.add(resultVO.getYtd_complete_rate());
            list.add(resultVO.getGap());
            list.add(resultVO.getYtd_aos_complete_rate());
            list.add(resultVO.getYtd_aos_gap());
            
            list.add(resultVO.getDe_lctd_cgp());
            list.add(resultVO.getDe_ytm_cgp());
            list.add(resultVO.getEx_lctd_ser_cost());
            list.add(resultVO.getEx_ytm_ser_cost());
            
            list.add(resultVO.getOperat_warning());
            //未有对应的服务出参
            list.add("");
            list.add("");
            list.add(resultVO.getProjProgressScorePercent());
            list.add(resultVO.getEhsScorePercent());
            
            list.add(resultVO.getCustomercomplaintsray());
            list.add(resultVO.getNontechnicalray());
            list.add(resultVO.getCyberaccidentsowner());
            list.add(resultVO.getCyberaccidentsother());
            list.add(resultVO.getItrmangementray());
            
            list.add(null !=resultVO.getQualitTechScore()?resultVO.getQualitTechScore()+"":"");
            list.add(null !=resultVO.getRationTechScore()?resultVO.getRationTechScore()+"":"");
            //list.add(null !=resultVO.getInternalControlScore()?resultVO.getInternalControlScore()+"":"");
            list.add(resultVO.getRiskTopItems());
            list.add(null !=resultVO.getCooperativeResourceScore()?resultVO.getCooperativeResourceScore()+"":"");
            map.put(resultVO.getProjNum(), list);
        }
        return map;
    }


 

第二部分

第二个部分就是wb = ExportBarometer.getXSSFWorkbook(mapresult,list,title1,title2);调用getXSSFWorkbook()这个方法,需要说明的是,入参可以根据需要灵活变化,一般来说,入参应该有标题行,查询的结果List集合,sheetName。


XSSFWorkbook wb =null;
        //用数组也可以用list    
         if ("zh_CN".equals(BaseSdcpUtils.getCurrentLanguage()))
         {
             String[] title1 = {"地区部","代表处","项目编码","项目名称","项目级别","进度","","","","经营","","","","","","","质量","","客满","","","","","技术","","合同","合作"};
             String[] title2 = {"","","","","",

                    "改良计划完成率",
                    "改良实际完成值",
                    "AOS改良计划完成率",
                    "AOS改良实际完成值",
                    "全周期预测贡献毛利(拨备前)和预算偏差(扣除设备的影响)",
                    "YTD预测贡献毛利(拨备前)和预算偏差(扣除设备的影响)",
                    "ITD服务成本超预算",
                    "YTD服务成本超预算",
                    "ITD的贡毛偏差",
                    "收入完成率(YTD)",
                    "经营预警",
                    "SLA达标率",
                    "网络可用率",
                    "重大客户投诉",
                    "非技术问题",
                    "网络事故",
                    "MV重大故障",
                    "管理升级",
                    "未关闭重大风险数量",
                    "未关闭重大问题数量",
                    "关键假设闭环率",
                    "(合作)/自有租赁资源使用资源SLA(自有&租赁)"};
              wb = ExportBarometer.getXSSFWorkbook(mapresult,list,title1,title2);
         }else
         {
             //英文状态下的列标题
             String[] title1 = {"Region","RepOffice","Project Code","Project Name","Project Level","Plan&Execution","","","","Operation","","","","","","","Quality","","Customer","","","","","Technical","","Agreement","Cooperation"};
             String[] title2 = {"","","","","",

                    "Transformation Plan Achievement Rate",
                    "Transformation Actual",
                    "AOS Transformation Plan Achievement Rate",
                    "AOS Transformation Actual",
                    "LIFECYCLE CGP Forecasts (Before Loss Provision)Compared With Latest Budgets (ex.equipment)",
                    "YTD LCGP Forecasts (Before Loss Provision)Compared With Latest Budgets (ex.equipment)",
                    "ITD Service Cost Over Lifecycle Budget",
                    "YTD Service Cost Over Annual Budget",
                    "ITD Contribution Gross Profit GAP",
                    "Revenue Achieving Rate (YTD)",
                    "Operation Alert",
                    "SLA Standard Rate",
                    "Network Availability",
                    "ok",
                    "Non-Tech Issue",
                    "Accident",
                    "MV Critical Incident",
                    "Management Escalation",
                    "Unclosed Major Risk Amount",
                    "Unclosed Major Issue Amount",
                    "MS Key Assumptions Closed Rate",
                    "TFPR /Timely Fulfillment of Partner Resources"};
             wb = ExportBarometer.getXSSFWorkbook(mapresult,list,title1,title2);
         }
        
        
        return wb;
        


3.excel生成类

getXSSFWorkbook()方法的具体实现。

与XSSFWorkbook并列的是HSSFWorkbook,这取决于excel格式是xlsx还是xls,一个是2007,一个是2003版本。


 

//标题行有可能为第一行或者第二行 所以不定长传参
    public static XSSFWorkbook getXSSFWorkbook(LinkedHashMap<String, List<String>> map,List<XiAnBigScreenVO> listResult, String[]... title) {
        XSSFWorkbook wb = new XSSFWorkbook();
        String sheetName = "";
        if ("zh_CN".equals(BaseSdcpUtils.getCurrentLanguage()))
        {
            sheetName = "MS晴雨表项目明细";
        }else
        {
            sheetName = "MsFindBarometerList";
        }
        
        XSSFSheet sheet = wb.createSheet(sheetName);
        //冻结窗格
        sheet.createFreezePane(0, 2);
        XSSFRow row = sheet.createRow(0);
        row.setHeightInPoints(30);
//        XSSFCellStyle style = wb.createCellStyle();
//      style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        XSSFCellStyle style = getColumnTopStyleX(wb);
        XSSFCell cell = null;
        for (int i = 0; i < title[0].length; i++) 
        {
            cell = row.createCell(i);
            cell.setCellStyle(style);
            cell.setCellValue(title[0][i]);
            //9000对应34.5 ,则框架导出的宽度20.88对应5447
            sheet.setColumnWidth(i, 5447);
        }
        
        row = sheet.createRow(1);
        row.setHeightInPoints(40);
        for (int i = 0; i < title[1].length; i++) 
        {
            cell = row.createCell(i);
            cell.setCellStyle(style);
            cell.setCellValue(title[1][i]);
        }
        
        for(int j=0;j<=4;j++)
        {
            //合并单元格,四个参数代表起始行结束行起始列结束列
            CellRangeAddress region = new CellRangeAddress(0,1,j,j);
            sheet.addMergedRegion(region);
        }
        //根据标题合并单元格  修改麻烦 可考虑优化
        CellRangeAddress region = new CellRangeAddress(0,0,5,8);
        sheet.addMergedRegion(region);        
        region = new CellRangeAddress(0,0,9,15);
        sheet.addMergedRegion(region);
        region = new CellRangeAddress(0,0,16,17);
        sheet.addMergedRegion(region);
        region = new CellRangeAddress(0,0,18,22);
        sheet.addMergedRegion(region);
        region = new CellRangeAddress(0,0,23,24);
        sheet.addMergedRegion(region);

        

        
        
        //写入实体数据 ,list中字符串的顺序必须和数组strArray中的顺序一致
        int i = 1;
        for (String str : map.keySet()) {
            row = sheet.createRow((int) i + 1);
            List<String> list = map.get(str);

            // 创建单元格,并设置值
            for (int j = 0; j < title[0].length; j++) {
                XSSFCell datecell = row.createCell(j);                
                datecell.setCellValue(list.get(j));
                //为单元格设置颜色
                setColor(i+1,j,datecell,listResult.get(i-1),wb);
            }
            i++;
        }        
        return wb;
    }
    


sheet,row,cell为三个关键对象,除了完成基本的赋值之外,有时需要设置单元格大小,颜色,字体,字体颜色大小等,合并单元格,冻结窗格(一般冻结标题行)等。以上是最原始的版本,根据个人习惯可以自由封装方法,使代码看起来更加条理清晰。

华为私有云HCS 8.1.1实战:从镜像制作到云主机发放全流程指南 本文详细解析了华为私有云HCS 8.1.1从镜像制作到云主机发放的全流程实战指南。内容涵盖制作标准化QCOW2镜像、配置云主机规格与主机组、规划外部网络,以及在运营面为租户初始化资源、配置审批流与产品目录。最后,通过用户视角演示了从创建VPC网络到申请、审批并最终绑定EIP访问云主机的完整操作步骤,为运维人员和架构师提供了一套清晰、可落地的HCS部署与管理实践方案。 阅读详情

相关推荐

UE5与Cesium for Unreal结合:打造高效离线地图解决方案

本文详细介绍了如何利用UE5与Cesium for Unreal结合打造高效离线地图解决方案,特别适用于数字孪生、军事仿真等网络不稳定场景。通过优化配置、数据处理和性能调优,实现TB级地形数据的流畅渲染,并结合实战案例展示了在油田巡检等复杂环境中的应用效果。

weixin_29007135的博客 493

电子表格 随笔 导出

0. 照例引用 csv和xlsx区别 by CSND-weixin_30535565 autopoi导出xls/xlsx by 看云-jeecg Java端轻量级CSV读写库javacsv by maven-respository 1. 简而言之 xlsx、xls(早期的版本)均是Microsoft office下的Excel所维护的电子表格的文件格式 csv则为更加通用的、更加简洁的电子表格的文件格式 接下来将展现一波.csv文件的结构之简洁: Excel 打开方式 记事本 打开方式 2. Autop

hyoka的博客 1150

【有啥问啥】智能座舱CPD技术:毫米波雷达如何守护儿童安全?

本文深入探讨了智能座舱中CPD(Child Presence Detection)技术如何通过毫米波雷达保障儿童安全。毫米波雷达凭借其穿透性检测、微动感知等优势,成为儿童遗留车内的有效解决方案。文章详细解析了技术原理、系统集成方案及安装指南,为智能座舱安全技术提供了实用参考。

weixin_29193259的博客 357

【以视图的方式返回导出excel】

以视图的方式返回导出excel

weixin_50230823的博客 785

从配置文件加载顺序揭秘:为什么你的logback.xml读不到application.yml?

本文深入解析了Spring Boot中logback.xml无法读取application.yml配置的原因,揭示了Spring Boot配置加载机制与日志系统初始化的时序问题。通过对比logback.xml与logback-spring.xml的差异,提供了使用springProperty标签和系统属性传递等解决方案,帮助开发者有效解决日志配置问题。

weixin_29214335的博客 364

mmpretrain学习笔记

(4)数据集路径 data_root=‘data/imagenet’–》data_root=‘data/Fruits Dataset/images’(7)适当的修改num_workers、epochs、batch_size、lr等。3、训练优化 :梯度下降算法、学习率参数、训练总轮次、学习率变化策略等。my_resnet18_8xb32_in1k.py 完整的配置文件。(6)split=‘train’、split='val’注释掉。2、数据:数据集划分、数据文件路径、批大小、数据增强策略等。

吃葡萄不吐葡萄皮 936

后端生成excel表格导出(新人使用)

@RequestMapping(“exportExcel”) public ModelAndView exportExcel(HttpServletRequest request, HttpServletResponse response) { try { // 获取数据, List<Map<String, Object>> dataList = new Arr...

weixin_40496191的博客 1738

昇腾910B+MindIE部署Qwen模型避坑指南:从镜像下载到推理测试全流程

本文详细介绍了在昇腾910B硬件环境中使用MindIE推理工具部署Qwen系列模型的全流程指南。从环境准备、镜像下载到模型部署与性能优化,提供一站式解决方案,帮助开发者高效完成AI模型推理任务。

weixin_29219189的博客 766

导出excel

页面的excel导出

pdy826531689的博客 302

MFC Windows 程序设计[105]之彩色滚动条(附源码)

MFC是微软公司提供的一个类库(class libraries),用以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。有很多初学MFC的小伙伴们都觉得MFC比较难学,看书吧,看了就忘了,网上的一些教程又是写的含糊不清,故而学习起来很吃力...... 故此,本专栏亲自研究,实践,由易到难,层层深入,将调试过程中所遭所遇进行详细讲解,注意事项进行一一列举,希望能够帮助到各位初学MFC的小伙伴,避免走弯路,费时费力。

hnjzfwy的博客 518

Autosar代码包初识 2 - 如何编译Vector包内Demo工程

Vetcor autosar代码包Demo工程编译,GreenHills,RH850,Autosar,Davinci COnfigurator

weixin_42412049的博客 5183

Java导入导出Excel

Controller层。

weixin_47467550的博客 395

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Excel导出动态一级二级表头

导出Excel动态显示一级或二级表头 1、引人po相关i依赖包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.0</version> </dependency> <dependency> <group

Aaron-x的博客 1560

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

查询数据库(或有条件),导出Excel表格

依赖 <!-- poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.15</version> </dependency> <dependency> <groupId>org.apache.poi</

weixin_52925162的博客 521

java生成excel

需求描述(我想,应该很多公司的商务都需要这种类型的excel) 以其中一个excel为例。 先说商务的要求,商务要管理所有的项目的各种各样的钱,其中有一项是已付金额,要求是这个项目的实际付款日期只要填写上了,比如是2007-11-11,那么这个项目的已付金额就应该出现在生成的excel的11月份的那一栏。 整个excel(第一行所有列名)需要显示:项目编号,项目名称,所属部门(ODC),po

TongFn的专栏 622

Java 实现导出excel表 POI

1.首先下载poi-3.6-20091214.jar,下载地址如下:http://download.youkuaiyun.com/detail/evangel_z/3895051 2.Student.javaimport java.util.Date; public class Student { private int id; private String name;

473

再见EasyExcel,拥抱Apache POI深度实践指南

Apache POI 是 Java 生态中处理 Excel 文件的底层核心库,基于 SAX 与流式模型(SXSSF)实现内存可控、格式兼容、样式精确的读写能力。其原理在于直接操作 Excel 的 OOXML 结构,绕过高层封装带来的反射开销与抽象泄漏,从而在动态表头、百万行导出、公式保留、单元格换行等高阶场景中展现确定性性能与调试透明性。技术价值体现在可控性提升、OOM 风险降低、版本演进清晰及企业级稳定性保障。典型应用场景覆盖金融对账、监管报送、BI 自助导出与跨系统数据交换。本文聚焦 Apache PO

weixin_34337381的博客 337

java项目中Excel文件的导入导出

1 package poi.excel; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.lang.reflect.Field; 7 import java.lang.reflect.Method; 8

poazlimeng的博客 285

Java导出Excel(附完整源码)

导出excel是咱Java开发的必备技能啦,之前项目有这个功能,现在将其独立出来,分享一下。 所用技术就是SpringBoot,然后是MVC架构模式。 废话不多说,直接上代码了,源码点末尾链接就可以下载。 (1)新建一个SpringBoot项目(可以官网https://start.spring.io/直接生成下载,然后导入eclipse),项目结构如下: (2)修改pom文件,添加依赖; &lt...

tanwenfang的博客 5万+

Java POI 3.17导出EXCEL并下载(带进度条提示)

  导出数据 共4590条 只需要 5 秒左右,性能还算可以   我们再来测试一下 50000 条的性能...  

weixin_34101784的博客 2482

java导出Excel

分享一个关于java使用poi导出Excel的方法和使用jsp页面导出的方法: /* *  * 导出数据 *  * */ public void exportData(String organId, String monthId, String organCode, String dataChoose, boolean flag, HttpServletResponse res

我是IT小菜鸟的博客 422

java的导出excel_java实现导出Excel的功能

导出excel是咱Java开发的必备技能啦,之前项目有这个功能,现在将其独立出来,分享一下。所用技术就是SpringBoot,然后是MVC架构模式。废话不多说,直接上代码了,源码点末尾链接就可以下载。(1)新建一个SpringBoot项目(可以官网https://start.spring.io/直接生成下载,然后导入eclipse),项目结构如下:(2)修改pom文件,添加依赖;org.sprin...

weixin_27531501的博客 799

java如何进行excel的导入导出

java如何进行excel的导入导出

kerryqpw的博客 808

Java导出Excel表合并行、合并列

Controller层代码 @RequestMapping(value = "/productExportExcel", method = RequestMethod.GET) public void productExportExcel(HttpServletRequest request,HttpServletResponse response) throws Exception { Record rd = this.getCurrentUser(); try { List<Int

bestQz的博客 4093

Java POI导出excel经典实现 测试(获取工作日列表+导出Excel)

Java使用poi组件导出excel报表,能导出excel报表的还可以使用jxl组件,但jxl想对于poi功能有限,jxl应该不能载excel插入浮动层图片,poi能很好的实现输出excel各种功能,介绍poi导出excel功能实现案例,算比较常用的功能实现以及导出excel需要注意的地方,采用的是poi-3.8-20120326.jar,poi-ooxml-3.8-20120326.jar,po

csdnzhangpan0113的博客 1396

java Excel导出功能

最近在做Excel文件导出的功能,花了一个小时研究了一下这个功能,并应用在了项目中,在小数据量导出方面符合项目需求,花个时间整理一下,方便以后使用及遗忘。  1. 首先是jar的引用,次示例通过maven引入所需要的jar包 org.apache.poi poi 3.9 org.apache.poi poi-ooxml 3

zhengyangzkr的博客 687
上一篇: java中excel的导出——基于jalor5框架
下一篇: eclipse快捷键
醉淸風
博客等级 码龄10年 36粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值