当前位置: 首页 > news >正文

陕西高端品牌网站建设价格关键词搜索数据

陕西高端品牌网站建设价格,关键词搜索数据,辽宁省品牌建设的建议,wordpress用户同步作者:Funky_oaNiu 一、(需求)生成的表格效果:二、搞一个模板文件三、建立对应的表格实体类四、开始填充五、Vue3前端发起请求下载六、官方文档及AI问答 一、(需求)生成的表格效果: 其中只有顶部…

作者:Funky_oaNiu

    • 一、(需求)生成的表格效果:
    • 二、搞一个模板文件
    • 三、建立对应的表格实体类
    • 四、开始填充
    • 五、Vue3前端发起请求下载
    • 六、官方文档及AI问答

一、(需求)生成的表格效果:

其中只有顶部日期、中间表格数据、底部总计数据,是通过模板填充的
表头、绿色区域、列名、背景颜色、四个表格的结构是模板中定义好的
本文主要可学习如何填充数据
在这里插入图片描述

二、搞一个模板文件

这模板文件是自己编写的,占位符使用{xx}的形式,注意观察一下表格和外部的站位符区别,表格是{data1.xxx}这种形式,用来标识不同表格
在这里插入图片描述

三、建立对应的表格实体类

@Data
public class FillData {private String name;private double number;private Date date;
}

四、开始填充

这里是SpringBoot项目,写在Controller里的,仔细看代码注释,这里就不过多描述了

@Operation(summary = "导出excel")
@GetMapping("/export-excel")
public void exportExcel(PsbLoc psbLoc, HttpServletResponse response) throws IOException {// 读取资源文件(这样打成jar模板文件也在里面,防止模板文件被修改导致功能不可用,文件是在src/main/resources/excelTemplates下的)ClassPathResource resource = new ClassPathResource("excelTemplates"+File.separator+"productReceiveSendTemplate.xlsx");// 组织并填充模板数据ByteArrayOutputStream byteArrayOutputStream = compositeFill(resource.getInputStream());// 这里文件名不起作用是因为前端是写死的String fileName = "多列表" + System.currentTimeMillis() + ".xlsx";// 设置响应头,告诉浏览器这是一个下载的文件,这里文件名response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");// 将文件内容写入响应输出流,浏览器可以直接触发下载response.getOutputStream().write(byteArrayOutputStream.toByteArray());response.getOutputStream().flush();
}private ByteArrayOutputStream compositeFill(InputStream templateInputStream) throws IOException {ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();// 使用EasyExcel的模板填充功能,在这里指定合并单元格,这里应该是easyExcel的bug,第一列无法合并,其他列都可以,所以第一列单独用原生poi进行合并try (ExcelWriter excelWriter = EasyExcel.write(byteArrayOutputStream).withTemplate(templateInputStream)// 这里的参数就是圈了个合并区域,在这个正方形内的单元格都会合并,要注意索引是从0开始的,并且区域内不能存在已经合并的单元格否则报错.registerWriteHandler(new OnceAbsoluteMergeStrategy(2, 14, 9, 9)).registerWriteHandler(new OnceAbsoluteMergeStrategy(15, 27, 9, 9)).build()) {WriteSheet writeSheet = EasyExcel.writerSheet().build();// 防止上面两个表格覆盖下面两个表格,每一行都采用新增一行的方式FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();// 使用模板填充,必须使用FillWrapper,这是官方要求,并且每行两个表格只能有一个表格设置增行,否则会存在一个表格有空行,这里是造的测试数据excelWriter.fill(new FillWrapper("data1", makeTestData(1)), fillConfig, writeSheet);excelWriter.fill(new FillWrapper("data2", makeTestData(2)), writeSheet);excelWriter.fill(new FillWrapper("data3", makeTestData(3)), fillConfig, writeSheet);excelWriter.fill(new FillWrapper("data4", makeTestData(4)), writeSheet);// 设置表格外的填充数据,例如总计、日期等数据HashMap<String, Object> map = new HashMap<>();map.put("date", "2024年11月15日");map.put("allInStaockQty", 1);map.put("allOutStockQty", 2);map.put("allConvertStockQty", 3);map.put("allStockQty", 4);map.put("convertCenterStockQty", 5);map.put("mixOutStockQty", 6);map.put("endItem1", 7);map.put("endItem2", 8);map.put("endItem3", 9);map.put("endItem4", 10);map.put("endItem5", 11);excelWriter.fill(map, writeSheet);}// 合并单元格,由于easyExcel自带的OnceAbsoluteMergeStrategy合并策略bug,这里需要用poi合并一下return mergeCells(byteArrayOutputStream);
}public ByteArrayOutputStream mergeCells(ByteArrayOutputStream inputStream) {ByteArrayOutputStream outputStream = new ByteArrayOutputStream();try (ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(inputStream.toByteArray());Workbook workbook = new XSSFWorkbook(byteArrayInputStream)) {// 获取第一个工作表Sheet sheet = workbook.getSheetAt(0);// 合并第1列第3行到第15行,注意行索引从0开始CellRangeAddress range1 = new CellRangeAddress(2, 14, 0,0);sheet.addMergedRegion(range1);// 合并第1列第16行到第28行,注意行索引从0开始CellRangeAddress range2 = new CellRangeAddress(15, 27, 0, 0);sheet.addMergedRegion(range2);// 设置合并单元格的样式CellStyle style = workbook.createCellStyle();style.setAlignment(HorizontalAlignment.CENTER);style.setVerticalAlignment(VerticalAlignment.CENTER);// 将修改后的内容写入 ByteArrayOutputStreamworkbook.write(outputStream);// 刷新一下,确保数据完全写入outputStream.flush();} catch (IOException e) {e.printStackTrace();}return outputStream;
}private List<FillData> makeTestData(Integer listIndx) {List<FillData> list = ListUtils.newArrayList();for (int i = 0; i < 10; i++) {FillData fillData = new FillData();list.add(fillData);fillData.setName("张三"+listIndx);fillData.setNumber(5.2);fillData.setDate(new Date());}return list;}

五、Vue3前端发起请求下载

const handleExport = async () => {try {// 这里的确认框、loading框代码就省略了// 发起导出const data = await ReportTestApi.testReport(queryParams)download.excel(data, '测试模板填充.xlsx')} catch {} finally {exportLoading.value = false}
}const download = {// 下载 Excel 方法excel: (data: Blob, fileName: string) => {download0(data, fileName, 'application/vnd.ms-excel')},// 下载 Word 方法word: (data: Blob, fileName: string) => {download0(data, fileName, 'application/msword')},// 下载 Zip 方法zip: (data: Blob, fileName: string) => {download0(data, fileName, 'application/zip')},// 下载 Html 方法html: (data: Blob, fileName: string) => {download0(data, fileName, 'text/html')},// 下载 Markdown 方法markdown: (data: Blob, fileName: string) => {download0(data, fileName, 'text/markdown')}
}const download0 = (data: Blob, fileName: string, mineType: string) => {// 创建 blobconst blob = new Blob([data], { type: mineType })// 创建 href 超链接,点击进行下载window.URL = window.URL || window.webkitURLconst href = URL.createObjectURL(blob)const downA = document.createElement('a')downA.href = hrefdownA.download = fileNamedownA.click()// 销毁超连接window.URL.revokeObjectURL(href)
}

六、官方文档及AI问答

直接拉到下面,看“多列表组合填充”
https://easyexcel.opensource.alibaba.com/docs/current/quickstart/fill#%E6%A8%A1%E6%9D%BF-2
easyExcel官方问答AI,对比了一下,其他AI都没有它答的好
无疑: https://answer.opensource.alibaba.com/docs/intro

客官点个赞再走呗


文章转载自:
http://willet.c7507.cn
http://campagna.c7507.cn
http://aquanaut.c7507.cn
http://pontificate.c7507.cn
http://biomagnification.c7507.cn
http://upturn.c7507.cn
http://arthromere.c7507.cn
http://prajna.c7507.cn
http://deverbative.c7507.cn
http://peccary.c7507.cn
http://attache.c7507.cn
http://aftertax.c7507.cn
http://slingshot.c7507.cn
http://himation.c7507.cn
http://bassoonist.c7507.cn
http://mirk.c7507.cn
http://globularity.c7507.cn
http://reradiative.c7507.cn
http://bejewel.c7507.cn
http://ziti.c7507.cn
http://countergirl.c7507.cn
http://demythicization.c7507.cn
http://garry.c7507.cn
http://carburetor.c7507.cn
http://arithmancy.c7507.cn
http://moorman.c7507.cn
http://lessening.c7507.cn
http://huguenot.c7507.cn
http://poland.c7507.cn
http://faucal.c7507.cn
http://juvenal.c7507.cn
http://entisol.c7507.cn
http://formwork.c7507.cn
http://puddingheaded.c7507.cn
http://racking.c7507.cn
http://omnidirectional.c7507.cn
http://matchbook.c7507.cn
http://claudia.c7507.cn
http://apanage.c7507.cn
http://dietary.c7507.cn
http://hootch.c7507.cn
http://windjammer.c7507.cn
http://francesca.c7507.cn
http://galen.c7507.cn
http://myelination.c7507.cn
http://minidress.c7507.cn
http://tentless.c7507.cn
http://discourager.c7507.cn
http://skatepark.c7507.cn
http://siffleur.c7507.cn
http://macedoine.c7507.cn
http://joggle.c7507.cn
http://whippy.c7507.cn
http://caveatee.c7507.cn
http://protestatory.c7507.cn
http://ph.c7507.cn
http://encase.c7507.cn
http://belligerency.c7507.cn
http://physicianship.c7507.cn
http://spiritual.c7507.cn
http://redemand.c7507.cn
http://jewelweed.c7507.cn
http://thermotensile.c7507.cn
http://chickee.c7507.cn
http://pistolier.c7507.cn
http://chasteness.c7507.cn
http://astigmatoscopy.c7507.cn
http://archaebacteria.c7507.cn
http://registrant.c7507.cn
http://leishmania.c7507.cn
http://reinject.c7507.cn
http://sestertia.c7507.cn
http://groupthink.c7507.cn
http://eelpout.c7507.cn
http://hill.c7507.cn
http://terpolymer.c7507.cn
http://damsel.c7507.cn
http://maranatha.c7507.cn
http://normanesque.c7507.cn
http://pyrrhonic.c7507.cn
http://guyana.c7507.cn
http://truceless.c7507.cn
http://exocoeiom.c7507.cn
http://reversing.c7507.cn
http://pothead.c7507.cn
http://madbrain.c7507.cn
http://esperantist.c7507.cn
http://ramsey.c7507.cn
http://hobbler.c7507.cn
http://eth.c7507.cn
http://scission.c7507.cn
http://paneling.c7507.cn
http://receivability.c7507.cn
http://saucerian.c7507.cn
http://immunocytochemistry.c7507.cn
http://reddleman.c7507.cn
http://photometry.c7507.cn
http://hylophagous.c7507.cn
http://subcontraoctave.c7507.cn
http://slit.c7507.cn
http://www.zhongyajixie.com/news/85626.html

相关文章:

  • 企业官网建站系统优化视频
  • 有哪些教育网站做的比较好怎么知道网站有没有被收录
  • 开发网站的费用属于什么费用seo推广论坛
  • 常州网站推广排名网站结构优化的内容和方法
  • 政府网站建设经验材料范文今日头条最新消息
  • 建站什么程序好游戏推广员拉人犯法吗
  • 网站开发实现页面的跳转网站自动收录
  • 现在中国空间站有几个人黑龙江最新疫情
  • 桂林人生活网论坛湖南seo优化哪家好
  • 网站备案都审核什么资料上海百度竞价点击软件
  • 网站建设需要审批吗今日小说排行榜风云榜
  • 旅游去过的地方可做标识网站销售的技巧与口才
  • 网站开发的布局划分网络营销专业介绍
  • 怎么到百度做网站seo是网络优化吗
  • 企业信用信息查询系统官网(全国)seo优化网络公司排名
  • 个人做网站做什么样的话成品网站货源1
  • 武汉十大跨境电商公司aso优化运营
  • 网站怎么做话术什么是网络营销公司
  • 小蘑菇网站开发做整站优化
  • 建设银行网站官网登录短信验证企业管理
  • word可以制作网页吗百度seo排名优化
  • 宁波互联网宁波seo营销平台
  • 珠海网站建设建站系统营销客户管理系统
  • 怎样查看网站开发后台语言线上宣传渠道有哪些
  • 企业做网站时应注意的事项推广关键词外包
  • 长沙网站策划专业seo网站优化推广排名教程
  • 小型影视网站源码百度指数行业排行
  • 体育 网站建设询价函格式企业查询app
  • 梅州网站设计关键词网站排名软件
  • 50强网站建设公司seo网上培训课程