简单实现POI操作Excel生成数据透视图
简单实现POI操作Excel生成数据透视图
- 需求
- 思考
- 尝试
- 实现
- 搞完收工,去画模板了
需求
财务部门需要做一自动导出数据报表的功能,其中要有指定格式的数据透视图(柱状图、饼状图等等)
思考
正常来讲,工作三年多以来,POI导出导入数据表用的写的确实不少了(合并单元格、改背景色我还是会的),但是要用POI导出数据透视图(不是跟财务打过交道我连透视图是啥都搞不清楚)需求还是第一次遇见。遇事不决问百度,慢慢来不急。
尝试
知己知彼。想用POI导出数据透视图,先试着用excel自己做个数据透视图试试。耗时半小时,加上度娘的谆谆诱导,终于明白了一些做透视图的诀窍,行列区分啥的(又学新东西了,舒服)。
之后就是百度用POI实现了,网上大神确实写的不少
其中 这位大佬的博客实在是良心
链接: 使用POI在Excel中动态生成图表工具类(支持柱状、组合、环状图、折线图、等常用图).
直接cv代码执行,嘿,柱状图、饼状图、折线图还真老老实实出来了!
接下来就是扒代码了(半小时,我放弃了,发现平时对这一块了解少,看不太懂。。。)
继续逛gai ,之后也是这位大佬的另一篇链接: poi在Word中生成各种图表(支持柱状、组合、环状图、折线图、等常用图). 通过在word模板文档中添加占位符,读取模板替换占位符的方式实现word文档中导入图表,想着也可以用这种方案试着写excel模板替换。
实现
1、先做一个excel生成数据透视图的模板,先模拟数据生成一次
看下是否达到预期效果(调整图表名啥的)
2、替换数据对应的单元格为特殊标识,保证不要重复就行
3、代码测试
// An highlighted block
import com.alibaba.fastjson.JSONObject;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Set;/*** @ClassName MyTest* 描述 :* @Date 2020/6/11 17:32*/
public class MyTest {public static void main(String args[]) throws Exception{String s = "{\n" +"\t\"#a1\": \"月份\",\n" +"\t\"#a2\": \"1月\",\n" +"\t\"#a3\": \"2月\",\n" +"\t\"#a4\": \"3月\",\n" +"\t\"#a5\": \"4月\",\n" +"\t\"#a6\": \"5月\",\n" +"\t\"#b1\": \"销售数据\",\n" +"\t\"#b2\": \"210\",\n" +"\t\"#b3\": \"220\",\n" +"\t\"#b4\": \"230\",\n" +"\t\"#b5\": \"240\",\n" +"\t\"#b6\": \"250\",\n" +"\t\"#c1\": \"销售金额\",\n" +"\t\"#c2\": \"2312\",\n" +"\t\"#c3\": \"2145\",\n" +"\t\"#c4\": \"5431\",\n" +"\t\"#c5\": \"2234\",\n" +"\t\"#c6\": \"1111\",\n" +"\t\"#d1\": \"投入人员\",\n" +"\t\"#d2\": \"4\",\n" +"\t\"#d3\": \"7\",\n" +"\t\"#d4\": \"9\",\n" +"\t\"#d5\": \"10\",\n" +"\t\"#d6\": \"22\",\n" +"}";JSONObject jsonObject = JSONObject.parseObject(s);Set<String> kays = jsonObject.keySet();//读取excel提前制定的excel模板
// File file = new File("D:\\excel\\ccc.xlsx");FileInputStream is = new FileInputStream("D:\\excel\\ccc.xlsx");XSSFWorkbook workbook = new XSSFWorkbook(is);FileOutputStream out = new FileOutputStream("D:\\excel\\ddd.xlsx");try {XSSFSheet sheet = workbook.getSheetAt(0);int lastRowNum = sheet.getLastRowNum();for(int i = 0;i<=lastRowNum;i++){XSSFRow row = sheet.getRow(i);for(int j = 0;j<4;j++){XSSFCell cell = row.getCell(j);String z = cell.getStringCellValue();if(null != z ){if(kays.contains(z)){if(z.contains("1") || z.contains("a")){String d = jsonObject.getString(z);cell.setCellValue(d);}else{Integer d = jsonObject.getInteger(z);cell.setCellValue(d);}}else{row.removeCell(cell);}}}}workbook.write(out);}catch (Exception e){e.printStackTrace();}finally {out.flush();is.close();out.close();}}
}
4、生成的效果还好,基本上跟自己想的差不多。数据内容要确认好内容格式,行列标题String格式,数据内容数值格式,不然数据透视表无法生成
搞完收工,去画模板了
简单实现POI操作Excel生成数据透视图相关推荐
- POI 操作 Excel -大数据量高效读写
前言 poi的读取的三种模式 模式 说明 读写性 SXSSF 内存中保留一定行数数据,超过行数,将索引最低的数据刷入硬盘 只写 eventmodel 基于事件驱动,SAX的方式解析excel,cup和 ...
- poi操作excel之填充数据、删除行
poi操作excel之填充数据.删除行 每篇一句励志:有人说,这世间有两种浪漫,一种是相濡以沫,另一种是相忘于江湖. 废话不多说,直接上代码! // 获取到你要填充数据的sheet XSSFSheet ...
- Java - Poi 操作 Excel
Java - Poi 操作 Excel 关注 "弋凡"(YiFan)微信公众号吧 记录简单笔记 做你的最爱 注意 XSSFWorkbook 对象是操作 .xlsx 格式的表格 HS ...
- 简单封装POI导出excel
简单封装POI导出excel Apache POI是一套根据Office Open XML标准(OOXML)和Microsoft OLE 2复合文档格式(OLE2)来处理各种文件格式的Java API ...
- java apache.poi_Java利用apache的POI操作Excel
最近在写一些报表的活,顺便总结下...第一篇博文,希望多多指教. 项目中经常会设计到一些数据的报表问题,目前java中操作Excel的插件也有很多 ,我说下用apache的POI操作Excel的方法. ...
- POI 操作Excel的单元格样式超过64000的异常问题解决
文章目录 POI 操作Excel的单元格样式超过64000的异常问题解决 问题描述 问题原因 问题分析和解决 简单的Excel文件生成Demo 最终的解决方案 POI 操作Excel的单元格样式超过6 ...
- execle java,Java使用POI操作Excel
Java使用POI操作Excel 1. POI操作Excel 1.1. 依赖 org.apache.poi poi 4.1.0 org.apache.poi poi-ooxml 4.1.0 org.a ...
- POI操作excel基本使用
不用多说,下面的一个类中就是一些POI操作Excel (xls) 的常见操作.但是真正要生成一些如报表等复杂格式Excel的时候,通常的做法都是事先把格式一切的东西都手动制作好("数据模板& ...
- 自己封装的poi操作Excel工具类
在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完成的功能是:读取Excel.汇总Exc ...
最新文章
- linux定时器多次,Spring 定时器执行两次
- nuxt渲染html文件,Nuxt页面级缓存
- 第八周实践项目9 算法库——广义表
- 华兴数控g71外圆循环编程_华兴数控系统代码
- python动态生成html报表_Python应用phy模块生成html表格
- C语言中数组越界访问造成死循环现象
- 【Error】Less-loader 版本过高,TypeError: this.getOptions is not a function
- VCL已死,RAD已死(插播)
- Nginx图片防盗链、缓存和压缩的示例
- 强连通分量(tarjan求强连通分量)
- 前端使用 geetest 行为验证 web-部署教程
- Atitit.http代理的实现 代码java php c# python
- Cisco 路由器破解密码
- MFC下实现的简单随机点名器
- 10 个步骤让你的应用提升 10 倍性能
- U盘格式化后 容量变小如何解决
- 最小生成树 Kruskal
- 学习笔记二:接口与继承(内部类)
- 【Java】所有做过的面试题
- 资源网站模板Emlog程序zytheme模板