vue2前端導出帶背景色表格 xlsx xlsx-style

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
參考
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章