前言:
此刻同学们对“netnpoi读取excel文件”都比较关注,咱们都想要学习一些“netnpoi读取excel文件”的相关内容。那么小编在网上汇集了一些关于“netnpoi读取excel文件””的相关知识,希望各位老铁们能喜欢,你们快快来学习一下吧!背景:数据治理项目。
POI-读取Word生成Excel 的功能是读取行业标准Word文档,生成Excel文档,然后加工Excel文档,加入领域等字段,表现形式为Column对应数据库表的Field字段,为后面生成建表sql语句做准备。
读取Excel生成Word是读取上面Excel,生成Word文档,汇报归档用。
Excel文档结构,第一个sheet是所有表汇总,然后每格表有个sheet,sheetName为表的中文说明(非实际表名,因为不同的领域的表有同名情况),sheet里面是具体的Field信息
读取Excel
首先定义三个内部类接收Excel表的数据
// TableCategory:表类别。因为业务上会用到两套领域编码,所以定义了两个domain属性@Setter@Getterpublic class TableCategory { private String domain; private String domain2; List<Table> tables; public void addTable(Table table) if (tables == null) { tables = new ArrayList<>(); } tables.add(table); }}
//Table:表。因为Excel的sheet名称不能包含冒号,*号,做替换@Getter@Setterpublic class Table { private String category; private String name; private String enName; 。。。。 // 其他属性 private List<Field> fields; public String getName() { if (name == null) { return ""; } String str = name.trim().replace(":", "·").replace(":", "·"); str = str.replaceAll("\\*", ""); return str; } public void addField(Field field) { if (fields == null) { fields = new ArrayList<>(); } fields.add(field); }}
// Field:列@Getter@Setterpublic class Field { private String name; //源字段名 private String type; //字段类型及长度 。。。。 // 其他属性}
读取Excel的内容按套路一行一行,一列一列读,然后赋值。
项目时间紧,要和客户汇报,数据组有些表还没有归并到Excel,有些还没拆成每表一个sheet的结构;针对每种情况单独做一个解析,解析后的内容都是按照上面三个类来接收处理。除了繁琐点,也都顺利。
后面还有一种场景就是数据组为了赶时间在生成的Word上直接修改Field内容,同时另外的同事又在Excel里面修改了领域的属性,需要合并Excel的领域属性+Word文档的Field内容。因为有前面的Word转Excel的代码,复用解决。
输出Word文档
// 读取模版的style,用里面的项目编号的样式FileInputStream fis = new FileInputStream("d:/template.docx");XWPFDocument template = new XWPFDocument(fis);CTStyles templateStyles = template.getStyle();XWPFDocument document = new XWPFDocument();XWPFStyles newStyels = document.createStyles();newStyels.setStyles(templateStyles);for (TableCategory category : tableCategories) { paragraph = document.createParagraph(); paragraph.setStyle("2"/*debug 看一下模版文档的style*/); run = paragraph.createRun(); if (idx == 0) { //两套领域 run.setText(category.domain + "域"); } else { run.setText(category.domain2 + "域"); } for (Table tableData : category.getTables()) { paragraph = document.createParagraph(); paragraph.setStyle("3"/*debug 看一下模版文档的style*/); run = paragraph.createRun(); run.setText(tableData.name + "(" + tableData.getEnName() + ")"); table = document.createTable(); // 遍历 tableData的fields, // 创建行createRow(); // 创建列createCell(); }}//执行output输出到Word文档
最近的工作内容,公司的代码不能全部粘贴,记录下关键步骤。
数据结构定义好了,TableCategory,Table,Field,虽然数据的来源会变,只需要开发不同的解析方法,最后输出到Word的代码不用动
标签: #netnpoi读取excel文件