首页 > 其他分享 >vue2前端导出带背景色表格 xlsx xlsx-style

vue2前端导出带背景色表格 xlsx xlsx-style

时间:2023-03-17 23:15:11浏览次数:54  
标签:xlsx style name let thin vue2 data

0 vue2 +elmentui+xlsx10.0.0+xlsx-style 坑有点多。 xlsx10.0.0以后的版本 用require导入或者使用什么导入什么,不要import * xlsx全部导入 ,不然jszip组件报错找不到。 配置文件:

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
   configureWebpack: {resolve:{
    fallback: {
      fs: false,
    },
    
  },
   externals:{
              './cptable': 'var cptable'
        },
  }
})
改xlsx-style源码: 0 参考 https://blog.csdn.net/m0_66970189/article/details/126886508 js代码:
<script>
    // @ is an alias to /src
    import { utils } from 'xlsx';
    import XLSXS from "xlsx-style";
    import FileSaver from "file-saver";
    export default
    {
        name: 'HomeView',
        data()
        {
            return {
                tableList: [
                {
                    date: '2016-05-02',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1518 弄',
                    id: 0,
                },
                {
                    date: '2016-05-04',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1517 弄',
                    id: 1,
                },
                {
                    date: '2017-05-01',
                    name: '王小虎',
                    id: 2,
                    address: '上海市普陀区金沙江路 1511111 弄'
                },
                {
                    date: '2016-05-03',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1516 弄',
                    id: 3
                }, ]
            }
        },
        methods:
        {
            s2ab(s)
            {
                var buf = new ArrayBuffer(s.length);
                var view = new Uint8Array(buf);
                for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
                return buf;
            },

            print()
            {

                let wb = utils.table_to_book(document.querySelector("#table1"), { sheet: "分组表" });

                this.setExlStyle(wb["Sheets"]["分组表"]);
                this.setbgColor(wb["Sheets"]["分组表"]);
                console.log(wb);
                var ws = XLSXS.write(wb,
                {
                    type: "binary",//node.js6以上,写buffer会报nodeBuffer不支持
                });
                try
                {
                    FileSaver.saveAs(
                        new Blob([this.s2ab(ws)], { type: "application/octet-stream" }),
                        '5.xlsx'
                    );
                }
                catch (e)
                {
                    if (typeof console !== "undefined")
                        console.log(e, ws);
                }
                return ws;
            },
            setExlStyle(data)
            {
                let borderAll = {
                    //单元格外侧框线
                    top:
                    {
                        style: "thin",
                    },
                    bottom:
                    {
                        style: "thin",
                    },
                    left:
                    {
                        style: "thin",
                    },
                    right:
                    {
                        style: "thin",
                    },
                };
                data["!cols"] = [];
                for (let key in data)
                {
                    if (data[key] instanceof Object)
                    {
                        data[key].s = {
                            border: borderAll,
                            alignment:
                            {
                                horizontal: "center", //水平居中对齐
                                vertical: "center",
                            },
                            font:
                            {
                                sz: 11,
                            },
                            bold: true,
                            numFmt: 0,

                        };

                        data["!cols"].push({ wpx: 115 });
                    }
                }
                return data;
            },
            //根据条件改变背景
            setbgColor(ws)
            {

                let borderAll = {
                    //单元格外侧框线
                    top:
                    {
                        style: "thin",
                    },
                    bottom:
                    {
                        style: "thin",
                    },
                    left:
                    {
                        style: "thin",
                    },
                    right:
                    {
                        style: "thin",
                    },
                };
                let arr = ["A", "B", "C", "D"];
                for (let i = 1; i <= this.tableList.length; i++)
                {
                    for (let key in arr)
                    {
                        var key1 = 'A' + i;
                        var key2 = arr[key] + i;


                        var val = ws[key1];
                        if (val.v % 2 == 0)
                        {
                            ws[key2].s = {
                                border: borderAll,
                                alignment:
                                {
                                    horizontal: "center", //水平居中对齐
                                    vertical: "center",
                                },

                                bold: true,
                                numFmt: 0,
                                font:
                                {
                                    name: 'Arial',
                                    sz: 10,
                                    bold: true,
                                    color: { rgb: "FFFFFFFF" }
                                },
                                fill:
                                {
                                    //背景色
                                    bgColor: { rgb: "FF59AB44" },
                                    fgColor: { rgb: "FF59AB44" },
                                },
                            }
                        }
                    }
                }
                return ws;
            }
        }

工程:vue2export.zip

标签:xlsx,style,name,let,thin,vue2,data
From: https://www.cnblogs.com/HelloQLQ/p/17228573.html

相关文章

  • 获取下载的xlsx和xls文件内容
    importrequestsfromioimport*importopenpyxlimportxlrdsess=requests.session()defget_xls_download_cont(download_content,sheet_index=0):wb......
  • Android代码静态检查(lint、Checkstyle、ktlint、Detekt)
    Android代码静态检查(lint、Checkstyle、ktlint、Detekt)在​​Android​​项目开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺陷。静态代码分析工具能够在代......
  • ERROR EXPECTED LINEBREAKS TO BE 'LF' BUT FOUND 'CRLF' LINEBREAK-STYLE
    报错截图:![](https://img2023.cnblogs.com/blog/1887922/202303/1887922-20230315150835998-322368568.png)报错的原因是项目代码做了eslint的规范检查,规定了换行需要以u......
  • less & saas/scss & css 深度选择器语法在 Vue2 & Vue3中的使用
    vue2中原生css>>>.el-card__header saas\scss::v-deep.el-card__headerless/deep/.el-card__header vue3中:deep(){......
  • Vue2入门之超详细教程一-环境准备
    1、简介Vue.js(通常被简称为Vue)是一个用于构建用户界面的渐进式JavaScript框架。它被设计为易于逐步采用,因此可以逐渐应用到现有项目中,也可以作为新项目的基础。Vue具......
  • vue2使用ECharts自适应大小
    1.安装监听容器大小变化的插件npminstallelement-resize-detector--save2.ECharts已经有重新绘制图表的函数 resize();<template><divid="home">......
  • xlsx.full.min.js实现xlsx的导入与导出
    1.json转xlsx<htmllang="zh"><head><scriptsrc="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.3/jquery.min.js"></script><scriptsrc="htt......
  • 浅谈Vue3与Vue2区别
    1.Vue2选用选项式API(optionsapi)对比Vue3组合式API(CompositionApi)optionsapi在代码里分割了不同的属性(properties):data,computed属性,methods,选项所定义的属性都会暴露......
  • # vue2 使用 cesium 【第二篇-相机视角移动+添加模型】
    vue2使用cesium【第二篇-相机视角移动+添加模型】搞了一阵子cesium,小白入门,这东西很牛逼,但是感觉这东西好费劲啊!网上资料不多,每个人的用法又不一样,操作起来真的是绝......
  • vue2和vue3
    双向绑定更新vue2的双向数据绑定是利⽤ES5的⼀个API,Object.defineProperty()对数据进⾏劫持结合发布订阅模式的⽅式来实现的。vue3中使⽤了ES6的ProxyAPI对......