首页 > 其他分享 >前端导出并导出样式

前端导出并导出样式

时间:2022-09-22 18:33:58浏览次数:57  
标签:const 样式 前端 09 导出 2020 2021 2022 2019

页面导入插件

 

 具体代码:

// 将我们生成好的excel转换成blob,供xlsx-populate使用
workbook2blob(workbook) {
// 生成excel的配置项
const wopts = {
// 要生成的文件类型
bookType: "xlsx",
// 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
bookSST: false,
type: "binary"
};
const wbout = XLSX.write(workbook, wopts);

// 将字符串转ArrayBuffer
function s2ab(s) {
const buf = new ArrayBuffer(s.length);
const view = new Uint8Array(buf);
for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
return buf;
}

const blob = new Blob([s2ab(wbout)], {
type: "application/octet-stream"
});
return blob;
},

// 使用xlsx生成一个简单的excel
handleExport() {
// 假设这是接口返回的数据
const data = [
{ '2019-09': "0", '2019-10': "0", '2019-11': "0", '2019-12': "0", '2020-01': "0", '2020-02': "0", '2020-03': "0", '2020-04': "0", '2020-05': "0", '2020-06': "0", '2020-07': "0", '2020-08': "0", '2020-09': "0", '2020-10': "0", '2020-11': "0", '2020-12': "0", '2021-01': "0", '2021-02': "0", '2021-03': "0", '2021-04': "0", '2021-05': "0", '2021-06': "0", '2021-07': "0", '2021-08': "0", '2021-09': "3155905.14", '2021-10': "0", '2021-11': "0", '2021-12': "0", '2022-01': "0", '2022-02': "0", '2022-03': "3208212.96", '2022-04': "0", '2022-05': "0", '2022-06': "0", '2022-07': "47212.50", '2022-08': "49275.00", '2022-09': "205741.30", 'buildingName': "A座", 'total': "6666346.90"},
];
// const title = [{A: "数据统计"}, {}];
const table = [{'buildingName': "楼栋", '2019-09': "2019-09", '2019-10': "2019-10", '2019-11': "2019-11", '2019-12': "2019-12", '2020-01': "2020-01", '2020-02': "2020-02", '2020-03': "2020-03", '2020-04': "2020-04", '2020-05': "2020-05", '2020-06': "2020-06", '2020-07': "2020-07", '2020-08': "2020-08",
'2020-09': "2020-09",
'2020-10': "2020-10",
'2020-11': "2020-11",
'2020-12': "2020-12",
'2021-01': "2021-01",
'2021-02': "2021-02",
'2021-03': "2021-03",
'2021-04': "2021-04",
'2021-05': "2021-05",
'2021-06': "2021-06",
'2021-07': "2021-07",
'2021-08': "2021-08",
'2021-09': "2021-09",
'2021-10': "2021-10",
'2021-11': "2021-11",
'2021-12': "2021-12",
'2022-01': "2022-01",
'2022-02': "2022-02",
'2022-03': "2022-03",
'2022-04': "2022-04",
'2022-05': "2022-05",
'2022-06': "2022-06",
'2022-07': "2022-07",
'2022-08': "2022-08",
'2022-09': "2022-09",
'total': "总计",}];
// data.forEach((item) => {
// table.push({
// A: item.date,
// B: item.count,
// C: item.type
// });
// });
const finalData = [...table, ...data];
console.log(finalData, 'finalData')
const wb = XLSX.utils.book_new();
const sheet = XLSX.utils.json_to_sheet(finalData, {
skipHeader: true
});
XLSX.utils.book_append_sheet(wb, sheet, "数据统计详情");

const workbookBlob = this.workbook2blob(wb);
// 需要添加样式的行列信息
const dataInfo = {
// titleCell: "A2",
// titleRange: "A1:B2",
theadRange: `A1:ZZZ1`,
// tbodyRange: `A4:B${data.length + 3}`,
// tableRange: `A3:B${data.length + 3}`
};
// 准备加样式
return this.addStyle(workbookBlob, dataInfo);
},

// 根据传入的样式行列信息加样式
addStyle(workbookBlob, dataInfo) {
return XlsxPopulate.fromDataAsync(workbookBlob).then((workbook) => {
// 循环所有的表
workbook.sheets().forEach((sheet) => {
// 所有cell垂直居中,修改字体
// sheet.usedRange().style({
// fontFamily: "Arial",
// verticalAlignment: "center"
// });
// 去除所有边框
// sheet.gridLinesVisible(false);
// 统计表格数据
// title加粗合并及居中
// const title = sheet.cell(dataInfo.titleCell).value();
// sheet
// .range(dataInfo.titleRange)
// .merged(true)
// .style({
// bold: true,
// horizontalAlignment: "center",
// verticalAlignment: "center"
// });
// 表头加粗及背景色
sheet.range(dataInfo.theadRange).style({
bold: true,
horizontalAlignment: "center",
});
// 表格内容右对齐
// sheet.range(dataInfo.tbodyRange).style({
// horizontalAlignment: "right"
// });
// 表格黑色细边框
// sheet.range(dataInfo.tableRange).style({
// border: {
// style: "thin",
// color: "000000",
// direction: "both"
// }
// });
});
return workbook.outputAsync().then(
(workbookBlob) => URL.createObjectURL(workbookBlob)
);
});
},

// 最后处理点击时的逻辑
createDownLoadData() {
this.handleExport().then((url) => {
const downloadAnchorNode = document.createElement("a");
downloadAnchorNode.setAttribute("href", url);
downloadAnchorNode.setAttribute("download", "xxx数据汇总.xlsx");
downloadAnchorNode.click();
downloadAnchorNode.remove();
});
},

 

标签:const,样式,前端,09,导出,2020,2021,2022,2019
From: https://www.cnblogs.com/cjyget/p/16720442.html

相关文章

  • 纯前端实现「羊了个羊」小游戏
    纯前端实现「羊了个羊」小游戏......
  • maven 导出资源流失败问题
    在pom.xml中配置以下代码解决导出问题(解决办法来自狂神)<!--配置maven静态资源过滤问题--><build><resources><resource><dir......
  • Spring Boot+Vue从零开始搭建系统(一):项目前端_Vuejs环境搭建
    参考: vue.js-SpringBoot+Vue从零开始搭建系统(一):项目前端_Vuejs环境搭建_个人文章-SegmentFault思否 前言博主本身是一直从事Java后端开发,一直想独立开发一套完......
  • excel导出大数据量时服务器cpu过高tomcat卡死问题排查
      最近发现一套线上生产系统每周一都会出现宕机的现象,CPU很高,持续几分钟后tomcat直接卡死,系统无法登陆刷新无反应,重启后又回复正常,各种定位各种检查。最开始想到的是不是......
  • delphi TMS FlexCel 导出HTML
    TMSFlexCel导出HTML属性和方法TFlexCelHtmlExport用于将Excel文件导出为HTML的组件。unitFlexCel.RenderTFlexCelHtmlExport.CreateconstructorCreate(const......
  • 自定义组件中使用half-screen-dailog 无法舒勇外部样式
     为了将弹窗更方便的调用,封装了组件,但是发现一个问题,外部样式类在组件中是无法正常使用的。 也就说在组件的wxss中是无法正常使用.weui-half-screen-dialog这个外部......
  • 前端 excel 表格导出
    传统的表格导出是直接获取数据,传表头,数据,自动下载表格。Blob.js和 Export2Excel.js 如果要导出这样的表格,那么需要重新写一个方法,核心在于  {s:{r:行开始,c:列......
  • 通过adb从设备持续导出数据流
    1.背景我需要分析设备的录音数据,但很可惜,设备存储空间比较小,录个几秒就爆了,远远达不到几分钟甚至几个小时的持续录音要求。本地存储放不下,又不支持拓展可移动存储,为什么......
  • 前端打印dom
    方法一constprintWindow=window.open()printWindow.document.write(document.querySelector('#printBox').innerHTML)printWindow.print()......
  • 前端预览pdf文件流
    awaitapi(html).then(res=>{constblob=newBlob([res],{type:'application/pdf;charset-UTF-8'})consturl=URL.createObjectURL(blob)......