义乌网站建站,深圳住建网站,idc网站建设,动漫网站在线免费观看生命无罪#xff0c;健康万岁#xff0c;我是laity。
我曾七次鄙视自己的灵魂#xff1a;
第一次#xff0c;当它本可进取时#xff0c;却故作谦卑#xff1b;
第二次#xff0c;当它在空虚时#xff0c;用爱欲来填充#xff1b;
第三次#xff0c;在困难和容易之…生命无罪健康万岁我是laity。
我曾七次鄙视自己的灵魂
第一次当它本可进取时却故作谦卑
第二次当它在空虚时用爱欲来填充
第三次在困难和容易之间它选择了容易
第四次它犯了错却借由别人也会犯错来宽慰自己
第五次它自由软弱却把它认为是生命的坚韧
第六次当它鄙夷一张丑恶的嘴脸时却不知那正是自己面具中的一副
第七次它侧身于生活的污泥中虽不甘心却又畏首畏尾。 动态数据生成word报表其实是前端的活(前端做简单)如果这个活现在担任在各位后端身上就希望本文能够给予你一定的帮助吧 Java操作Word
方案一
使用easypoi jfree 操作比较简单如果你的报表生成也简单的情况推荐使用 有需要的小伙伴可以直接看Java生成Word
问题
这个是比较好实现的但easypoi问题太多而且版本兼容性差的很有兴趣的小伙伴可以去看开源仓库就是按下葫芦浮起瓢你懂我的意思吧。
方案二
poi-tl 个人认为是比较好用但是如果后端动态数据过多的情况下建议还是由前端来做为好双方都可以轻松。 官方文档 文档很详细该有的都有就是封装几个poi-tl相关工具类
依赖导入 dependencygroupIdcom.deepoove/groupIdartifactIdpoi-tl/artifactIdversion1.10.0/version/dependency工具类
/*** Poi-tl模板引擎官方文档http://deepoove.com/poi-tl/1.10.x/* author: Laity* Project: JavaLaity* Description: word工具类*/
Slf4j
public class WordUtil {/*** 根据模板填充内容生成word并下载*/public static void downloadWord(HttpServletResponse response, XWPFTemplate template) {ServletOutputStream outputStream;try {//out new FileOutputStream(filePath);//输出路径(下载到指定路径)// 将填充之后的模板写入filePathoutputStreamresponse.getOutputStream();//将template写到OutputStream中template.write(outputStream);outputStream.flush();outputStream.close();template.close();} catch (Exception e) {e.printStackTrace();}}/*** 只得到这个对象本身的所有属性名及属性值* param target 目标对象* return Map集合* throws IntrospectionException 反射异常*/public static MapString,Object getOnlySelfFieldNameAndValue(Object target) throws IntrospectionException {MapString,Object mapnew HashMap();Class? clazz target.getClass();Field[] tableFields clazz.getDeclaredFields();getAllFieldNameAndValue(target,map,tableFields,clazz);return map;}/*** 递归获取某个类及其所有父类的所有字段*/private static Field[] getSuperClassFields(Field[] tableFields, Class? clazz) {Class? superClazz clazz.getSuperclass();if (superClazz.equals(Object.class)) {return tableFields;}Field[] tableSuperFields superClazz.getDeclaredFields();Field[] c new Field[tableFields.length tableSuperFields.length];System.arraycopy(tableFields, 0, c, 0, tableFields.length);System.arraycopy(tableSuperFields, 0, c, tableFields.length, tableSuperFields.length);getSuperClassFields(c, superClazz);return c;}
}Controller层
/*** https://deepoove.com/poi-tl/1.10.x/#hack-loop-table* author: Laity* Project: JavaLaity* Description: word导出接口层*/
RestController
RequestMapping(/word)
Slf4j
public class WordController {Value(${file.readPath})private String basePath;GetMapping(/test)public void jiangDu(HttpServletResponse response){response.setContentType(application/vnd.ms-excel);response.setHeader(Content-Disposition, attachment;fileNametest.docx);/* word模板地址*/String resourcebasePathtest.docx;MapString, Object mapnew HashMap();// 放测试数据 - 也可以嵌套map也可以放对象根据自己的数据进行数据处理map.put(title, 测试);// 读取模板templatePath并将paramMap的内容填充进模板即编辑模板(compile)渲染数据(render)/*-------------------策略渲染---------------------*/LoopRowTableRenderPolicy policy new LoopRowTableRenderPolicy(); // 这个有很多方式有需要直接看文档// Configure config Configure.builder().bind(你设置的标签名, 你的渲染策略:policy).build();XWPFTemplate template XWPFTemplate.compile(resource, config).render(map);//这里进行导出WordUtil.downloadWord(response,template);}
}文章中的逻辑代码较为简单建议去看官方文档来进行使用 问题
资源消耗相比较之下较大些
前端Vue操作Word(easy)
jszip jszip是一个用于创建、读取和编辑.zip文件的JavaScript库且API的使用也很简单。 jszip-utils jszip-utils是与jszip一起使用的跨浏览器的工具库 使用getBinaryContent()读取并获得模板文件的二进制内容 docxtemplater docxtemplater是一种邮件合并工具它以编程方式使用处理条件、循环并且可以扩展为表格、HTML、图像等。 FileSaver FileSaver.js 是在客户端保存文件的解决方案非常适合需要生成文件或者保存不应该发送到外部服务器的敏感信息的应用。 使用saveAs(blob, “test.docx”)将目标文件对象保存为目标类型的文件并命名
人生如一场修行。得意时一日看尽长安花艰难时潦倒新停浊酒杯。但生命的跋涉不能回头哪怕畏途巉岩不可攀也要会当凌绝顶哪怕无人会登临意也要猛志固常在。我是Laity正在前行的Laity。