网页数据导出为Excel(带图片)

将网页数据导出为Excel恐怕是日常开发遇到非常多的需求了,以往的操作可能会稍显复杂,今天学习了一个新的神器,分享给大家,话不多说,上代码

  • 我们选用easyExcel作为技术栈,首先引入依赖

     <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version></dependency>
    
  • 为了方便操作,我们首先建立一个与Excel对应的实体类

    package com.****.energy.nat.entity;/*** @author ascool_zh* @create 2021-02-9:59*/
    @Data
    @ContentRowHeight(35)
    @HeadRowHeight(20)
    public class ExcelModel {@ExcelProperty(value="条码号",index = 0)@ColumnWidth(23)private String barCode;@ExcelProperty(value="条形码",index = 1)@ColumnWidth(23)private File barCodeImg;
    }
    /*** ExcelProperty index 指定写到第几列,默认根据成员变量排序。value指定写入的名称,默认成员变量的名字,多个value可以参照快速开始中的复杂头* ExcelIgnore 默认所有字段都会写入excel,这个注解会忽略这个字段* DateTimeFormat 日期转换,将Date写到excel会调用这个注解。里面的value参照java.text.SimpleDateFormat* NumberFormat 数字转换,用Number写excel会调用这个注解。里面的value参照java.text.DecimalFormat* ExcelIgnoreUnannotated 默认不加ExcelProperty的注解的都会参与读写,加了不会参与*/
    
  • 写Excel

  1. 一个简单的例子

    @Data
    public class DemoData {@ExcelProperty("字符串标题")private String string;@ExcelProperty("日期标题")private Date date;@ExcelProperty("数字标题")private Double doubleData;/*** 忽略这个字段*/@ExcelIgnoreprivate String ignore;
    }
    
     /*** 指定写入的列* <p>1. 创建excel对应的实体对象 参照{@link IndexData}* <p>2. 使用{@link ExcelProperty}注解指定写入的列* <p>3. 直接写即可*/@Testpublic void indexWrite() {//文件名,文件会被存入到这个路径String fileName = TestFileUtil.getPath() + "indexWrite" + System.currentTimeMillis() + ".xlsx";// 这里 需要指定写用哪个class去写,DemoData,然后写到第一个sheet,名字为模板 然后文件流会自动关闭EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());}
    
  2. 批量写

    /*** 重复多次写入* <p>* 1. 创建excel对应的实体对象 参照{@link ComplexHeadData}* <p>* 2. 使用{@link ExcelProperty}注解指定复杂的头* <p>* 3. 直接调用二次写入即可*/@Testpublic void repeatedWrite() {// 方法1 如果写到同一个sheetString fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx";ExcelWriter excelWriter = null;try {// 这里 需要指定写用哪个class去写excelWriter = EasyExcel.write(fileName, DemoData.class).build();// 这里注意 如果同一个sheet只要创建一次WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();// 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来for (int i = 0; i < 5; i++) {// 分页去数据库查询数据 这里可以去数据库查询每一页的数据List<DemoData> data = data();excelWriter.write(data, writeSheet);}} finally {// 千万别忘记finish 会帮忙关闭流if (excelWriter != null) {excelWriter.finish();}}// 方法2 如果写到不同的sheet 同一个对象fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx";try {// 这里 指定文件excelWriter = EasyExcel.write(fileName, DemoData.class).build();// 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来。这里最终会写到5个sheet里面for (int i = 0; i < 5; i++) {// 每次都要创建writeSheet 这里注意必须指定sheetNo 而且sheetName必须不一样WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).build();// 分页去数据库查询数据 这里可以去数据库查询每一页的数据List<DemoData> data = data();excelWriter.write(data, writeSheet);}} finally {// 千万别忘记finish 会帮忙关闭流if (excelWriter != null) {excelWriter.finish();}}// 方法3 如果写到不同的sheet 不同的对象fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx";try {// 这里 指定文件excelWriter = EasyExcel.write(fileName).build();// 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来。这里最终会写到5个sheet里面for (int i = 0; i < 5; i++) {// 每次都要创建writeSheet 这里注意必须指定sheetNo 而且sheetName必须不一样。这里注意DemoData.class 可以每次都变,我这里为了方便 所以用的同一个class 实际上可以一直变WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).head(DemoData.class).build();// 分页去数据库查询数据 这里可以去数据库查询每一页的数据List<DemoData> data = data();excelWriter.write(data, writeSheet);}} finally {// 千万别忘记finish 会帮忙关闭流if (excelWriter != null) {excelWriter.finish();}}}
    
  3. 图片写

    @Data
    @ContentRowHeight(100)
    @ColumnWidth(100 / 8)
    public class ImageData {private File file;private InputStream inputStream;/*** 如果string类型 必须指定转换器,string默认转换成string*/@ExcelProperty(converter = StringImageConverter.class)private String string;private byte[] byteArray;/*** 根据url导出** @since 2.1.1*/private URL url;
    }
    
    /*** 图片导出* <p>* 1. 创建excel对应的实体对象 参照{@link ImageData}* <p>* 2. 直接写即可*/@Testpublic void imageWrite() throws Exception {String fileName = TestFileUtil.getPath() + "imageWrite" + System.currentTimeMillis() + ".xlsx";// 如果使用流 记得关闭InputStream inputStream = null;try {List<ImageData> list = new ArrayList<ImageData>();ImageData imageData = new ImageData();list.add(imageData);String imagePath = TestFileUtil.getPath() + "converter" + File.separator + "img.jpg";// 放入五种类型的图片 实际使用只要选一种即可imageData.setFile(new File(imagePath));inputStream = FileUtils.openInputStream(new File(imagePath));imageData.setString(imagePath);imageData.setInputStream(inputStream);imageData.setByteArray(FileUtils.readFileToByteArray(new File(imagePath)));imageData.setUrl(new URL("https://raw.githubusercontent.com/alibaba/easyexcel/master/src/test/resources/converter/img.jpg"));EasyExcel.write(fileName, ImageData.class).sheet().doWrite(list);} finally {if (inputStream != null) {inputStream.close();}}}
    
  4. Web写

    @RequestMapping("/exportExcel")public void exportExcel(String startCode, int count, String netCode,String netName,HttpServletResponse response) throws IOException {//后台查出的数据List<Map<String, Object>> qryPrintList = printBarcodeService.getPrintList(startCode, count, netCode);//创建存放ExcelModel的List,你可以理解为一个ExcelModel为一行数据,其属性barCode和barCodeImg即是行所要填的值List<ExcelModel> list = new ArrayList<ExcelModel>();String msg = "";String path = "";if (count <= 5000) {for (Map<String, Object> map : qryPrintList) {msg = (String) map.get("barCode");path = barcodeFilepath + msg + ".png";ExcelModel excelModel = new ExcelModel();try {//对ExcelModel对象赋值,相当于你填写每行的记录list.add(excelModel);//msg和path都已经赋值excelModel.setBarCode(msg);excelModel.setBarCodeImg(new File(path));} catch (Exception e) {System.out.println(e);}}//设置一些属性response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系String fileName = URLEncoder.encode(netName+"条码表", "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");//执行,list中已经包含多个ExcelModel,即相当于填写了多条记录EasyExcel.write(response.getOutputStream(), ExcelModel.class).sheet("条码表").doWrite(list);}}
    
    //前端避免使用Ajax,直接用window.location.href更方便
    function exportExcel(){var startCode = $("#startCode").val();var count = $("#count").val();var netCode = $("#checkNet").val();var netName = $("#checkNet").combobox('getText');window.location.href = "nat/print/exportExcel?startCode="+startCode+"&count="+count+"&netCode="+netCode+"&netName="+netName;}
    

网页数据导出为Excel(带图片)相关推荐

  1. H5将网页数据导出为Excel并可下载

    H5将网页数据导出为Excel并可下载 在制作webapp中,遇到个要将数据导出为Excel的问题.我搜索了一下网上的方案,可以直接将HTML的表格导出为Excel文件,这些方法在电脑上确实是可行的, ...

  2. Java中带图片的数据导出到excel

    Java中导入,导出带图片的数据及模板下载 数据导出 数据导出 导出包含了带图片的与不带图片的导出方式,大致如下: 无图片的导出 : 这种导出可以选择你喜欢用的,POI或者EasyExcel等,这里选 ...

  3. html5怎么导出表格,《网页 导出到 excel表格数据》 如何将网页表格导出到excel

    如何将网页数据输出为Excel或Word文件 1.保页 在浏览器中访标网页,执行菜单"文件"→"另",文件类型"网页,全部". 2.用WPS ...

  4. Matlab GUI界面表格中数据导出到excel文件带标题

    Matlab GUI界面表格中的数据导出到excel文件带标题 data=get(handles.uitable1,'Data'); ht={'日期','编号','姓名'}; [filename,pa ...

  5. java导出excel带图片_JAVA的poi实现模版导出excel(带图片).doc

    JAVA的poi实现模版导出excel(带图片) 下面是本人使用java的poi实现使用模板到处excel,内容包含图片,使用两种不同的方式实现其到处excel.但是使用jxl实现到处excel只能到 ...

  6. python 批量查询网页导出结果_python导出网页数据到excel表格-如何使用python将大量数据导出到Excel中的小技巧...

    如何用python把返回的html提取相应的内容到excel 下载扩展库 xlrd 读excle xlwt 写excle 直百度上搜就能下载 下载后使用 import xlrd 就读excle了 打开 ...

  7. 如何将网页内容保存到计算机中,如何将网站导出excel表格数据-如何把网页数据保存到EXCEL...

    网页上的表格数据怎么复制到excel 1.打开excel表格. 2.打开菜单"数据->"导入外部数据"->"新建 Web 查询",在&qu ...

  8. 阿里开源(EasyExcel):使用Java将数据导出为Excel表格、带样式----》java web下载 Excel文件

    目录 一.技术选型 二.实现过程 1.导入依赖 2.编写工具类 EasyExcelUtil 3.公用参数类 EasyExcelParams 4.表格样式实体类 MyWriteHandler 5.数据实 ...

  9. 2021-08-01数据导出到Excel表格

    数据导出到Excel表格 https://www.cnblogs.com/zhangzhiyong-/p/13376527.html package com.jxmcloud.business.sho ...

  10. python读html导出excel,python数据导出到excel

    如何使用python将大量数据导出到Excel中的 安装openpyxl模块 调用openpyxl模块,将变量中的数据写入excel 具体的操作流程需要根据您的需CSS布局HTML小编今天和大家分享和 ...

最新文章

  1. uniapp中搜索输入与频繁点击(防抖节流)
  2. python可视化窗口编程-Python可视化界面编程入门
  3. 那些德艺双馨的网站列表-updating
  4. Hadoop之MapReduce面试知识复习
  5. JDK8利用Stream为集合对象分组并编号
  6. C++STL笔记(十):queue详解
  7. 四年失去近 8% 的全球市场:Android 丢失的市场,被谁拿走了?
  8. 易懂的比特币工作机理详解
  9. 链式延迟执行DOME
  10. php文件怎么加统计代码,php统计文件中的代码行数
  11. lfw分类 python_LFW精确度验证__python读写txt
  12. max模型怎么导入ue4_UE4模型导入流程,3DMAX贴图丢失问题解决方法
  13. Aras Innovator: 如何在Form中放入图片
  14. c语言三重积分程序求法,D9_3三重积分[同济大学高等数学]..docx
  15. Varian OBI几个奇葩之处
  16. 下载网页所有图片的最简单的方法
  17. IDEA解决Python项目如何numpy等安装包的问题
  18. js 日期判断是否是今天
  19. Spring 的控制反转/依赖注入
  20. 软考初级程序员上午单选题(16)

热门文章

  1. vc2013 调用大漠插件例子
  2. 电脑屏幕变色了怎么调回来,电脑屏幕颜色怎么改
  3. spring session过期时间设置
  4. 计算机组成原理课程设计
  5. RF-实现接口自动化
  6. 计算机页面的工具,魔兽窗口化工具
  7. 微软影子系统EWF软件用法及参数描述
  8. 多行文字cad提取数据_中望CAD如何快速批量提取txt文本数据
  9. 05Oracle P6培训系列:05创建项目
  10. Thinkpad SL-400 XP驱动下载与安装方法