• exceljs的使用


    文档:https://github.com/exceljs/exceljs/blob/master/README_zh.md#boolean-value
     
    1. npm install exceljs  
        npm install file-saver
    2.新增downloadExcel.js文件针对单页签的数据
      
    import saveAs from 'file-saver';
    const Excel = require("exceljs");
    import {
        VFrame
    } from "n8-vframe";

    var workbook = "";
    var worksheet = "";

    function init() {
        workbook = new Excel.Workbook();
        workbook.created = new Date();
        workbook.modified = new Date();
        worksheet = workbook.addWorksheet("sheet1");
    }

    async function downloadExcel(importTemplate, fileName) {
        init();
        for (var i = 0; i < importTemplate.length; i++) {
            if (importTemplate[i].hasOwnProperty('columnType')) {
                if (importTemplate[i].columnType == "boolean") {
                    var columnName = String.fromCharCode(i + 65)
                    var res = ['"TRUE,FALSE"'];
                    if (importTemplate[i].hasOwnProperty('tips')) {
                        worksheet.getCell(columnName + 1).note = importTemplate[i].tips;
                    }
                    setColumns(columnName, res)
                }
                if (importTemplate[i].columnType == "number") {
                    var columnName = String.fromCharCode(i + 65);
                    if (importTemplate[i].hasOwnProperty('tips')) {
                        worksheet.getCell(columnName + 1).note = importTemplate[i].tips;
                    }
                    setColumnsbyType(columnName)
                }

            }
            if (importTemplate[i].hasOwnProperty('url')) {
                var columnName = String.fromCharCode(i + 65)
                var url = importTemplate[i].url;
                var index = url.lastIndexOf("/");
                var name = url.substring(index + 1, url.length);
                if (name == "GetEnumBaseData") {
                    let res = await getEnumByUrl(url, importTemplate[i].enumName);
                    if (importTemplate[i].hasOwnProperty('tips')) {
                        worksheet.getCell(columnName + 1).note = importTemplate[i].tips;
                    }
                    setColumns(columnName, res);
                } else {
                    let res = await getComboxByUrl(url);
                    var tips = JSON.stringify(res[1]);
                    tips = tips.replace(/"/g, "");
                    var reg = /[,,]/g;
                    var text = tips.replace(reg, ' ').replace(/[|]/g, '').replace(/{|}/g, '');
                    worksheet.getCell(columnName + 1).note = text;
                    setColumns(columnName, res[0]);
                }

            } else {
                if (importTemplate[i].hasOwnProperty("tips")) {
                    var columnName = String.fromCharCode(i + 65)
                    worksheet.getCell(columnName + 1).note = importTemplate[i].tips;
                }
            }

        }
        saveExcel(fileName, importTemplate)

    }

    function setColumnsbyType(columnName, Tips) {
        for (var i = 2; i < 1000; i++) {
            worksheet.getCell(columnName + i).dataValidation = {
                type: 'whole',
                operator: 'between',
                showErrorMessage: true,
                formulae: [-1000, 100000],
                errorStyle: 'error',
                errorTitle: 'Five',
                error: 'Data must be an integer'
            };

        }

    }

    function setColumns(columnName, res) {
        for (var i = 2; i < 1000; i++) {
            worksheet.getCell(columnName + i).dataValidation = {
                type: 'list',
                allowBlank: true,
                formulae: res
            };

        }

    }

    function saveExcel(fileName, importTemplate) {
        worksheet.columns = importTemplate;
        workbook.xlsx.writeBuffer().then(function (buffer) {
            saveAs(new Blob([buffer], {
                type: 'application/octet-stream'
            }), fileName + '.' + 'xlsx');
        });
    }

    function getComboxByUrl(url) {
        return new Promise((resolve, reject) => {
            var data = [];
            var description = [];
            var curData = [];
            VFrame.http.request(url, {}).then(res => {
                res.items.forEach(item => {
                    description.push({
                        value: item.value,
                        description: item.displayText
                    })
                    data.push(item.value);
                    var newData = '"' + data.join(',') + '"'
                    curData[0] = newData;
                })
                resolve([curData, description])
            })

        })
    }

    function getEnumByUrl(url, parameter) {
        return new Promise((resolve, reject) => {
            var data = [];
            var curData = [];
            VFrame.http.request(url, {
                enumName: parameter
            }).then(res => {
                res.items.forEach(item => {
                    data.push(item.key);
                    var newData = '"' + data.join(',') + '"'
                    curData[0] = newData;
                })
                resolve(curData)
            })

        })
    }
    export default downloadExcel;
     
     
    //针对多页签的
     
    import saveAs from 'file-saver';

    const Excel = require("exceljs");
    import {
        VFrame
    } from "n8-vframe";

    var workbook = "";
    var worksheet = "sheet";

    function init() {
        workbook = new Excel.Workbook();
        workbook.created = new Date();
        workbook.modified = new Date();
    }

    async function downExcel(params, fileName) {
        init();
        for (var i = 0; i < params.length; i++) {
            var sheet = worksheet + i;
            sheet = workbook.addWorksheet(params[i].name);
            var columnData = params[i].data;
            var columnName = "";
            for (var j = 0; j < columnData.length; j++) {
                //防止超过26列出错
                var f1 = Math.floor(j / 26);
                var f2 = j - f1 * 26;
                if (f1 > 0) {
                    columnName = String.fromCharCode(f1 + 64) + String.fromCharCode(f2 + 65);
                } else {
                    columnName = String.fromCharCode(f2 + 65);
                }
                if (columnData[j].hasOwnProperty('tips')) {
                    sheet.getCell(columnName + 1).note = columnData[j].tips;
                }
                if (columnData[j].hasOwnProperty('columnType')) {
                    if (columnData[j].columnType == "boolean") {
                        var res = ['"TRUE,FALSE"'];
                        setColumns(columnName, res, sheet)
                    }
                } else if (columnData[j].columnType == "number") {
                    setColumnsbyType(columnName, sheet)
                }

                if (columnData[j].hasOwnProperty('url')) {
                    var url = columnData[j].url;
                    var index = url.lastIndexOf("/");
                    var name = url.substring(index + 1, url.length);
                    if (name == "GetEnumBaseData") {
                        let res = await getEnumByUrl(url, columnData[j].enumName);
                        if (columnData[j].hasOwnProperty('tips')) {
                            sheet.getCell(columnName + 1).note = columnData[j].tips;
                        }
                        setColumns(columnName, res, sheet);
                    } else {
                        let res = await getComboxByUrl(url);
                        var tips = JSON.stringify(res[1]);
                        tips = tips.replace(/"/g, "");
                        var reg = /[,,]/g;
                        var text = tips.replace(reg, ' ').replace(/[|]/g, '').replace(/{|}/g, '');
                        sheet.getCell(columnName + 1).note = text;
                        setColumns(columnName, res[0], sheet);
                    }

                }
            }
            sheet.columns = columnData;
        }

        saveExcel(fileName, sheet)

    }

    function setColumnsbyType(columnName, sheet) {
        for (var i = 2; i < 1000; i++) {
            sheet.getCell(columnName + i).dataValidation = {
                type: 'whole',
                operator: 'between',
                showErrorMessage: true,
                formulae: [-1000, 100000],
                errorStyle: 'error',
                errorTitle: 'Five',
                error: 'Data must be an integer'
            };

        }

    }

    function setColumns(columnName, res, sheet) {
        for (var i = 2; i < 1000; i++) {
            sheet.getCell(columnName + i).dataValidation = {
                type: 'list',
                allowBlank: true,
                formulae: res
            };

        }

    }

    function saveExcel(fileName) {
        workbook.xlsx.writeBuffer().then(function (buffer) {
            saveAs(new Blob([buffer], {
                type: 'application/octet-stream'
            }), fileName + '.' + 'xlsx');
        });
    }

    function getComboxByUrl(url) {
        return new Promise((resolve, reject) => {
            var data = [];
            var description = [];
            var curData = [];
            VFrame.http.request(url, {}).then(res => {
                res.items.forEach(item => {
                    description.push({
                        value: item.value,
                        description: item.displayText
                    })
                    data.push(item.value);
                    var newData = '"' + data.join(',') + '"'
                    curData[0] = newData;
                })
                resolve([curData, description])
            })

        })
    }

    function getEnumByUrl(url, parameter) {
        return new Promise((resolve, reject) => {
            var data = [];
            var curData = [];
            VFrame.http.request(url, {
                enumName: parameter
            }).then(res => {
                res.items.forEach(item => {
                    data.push(item.key);
                    var newData = '"' + data.join(',') + '"'
                    curData[0] = newData;
                })
                resolve(curData)
            })

        })
    }

    export default downExcel;
    3.使用     import downloadExcel from "@/config/downloadExcel";
      
      importTemplatejson --数据   fileName --文件的名字
     downloadExcel(this.importTemplate,this.fileName)


    
    
  • 相关阅读:
    Apache Maven ToolChains的使用
    小师妹学JavaIO之:文件读取那些事
    JDK9的新特性:JPMS模块化
    JDK9的新特性:String压缩和字符编码
    小师妹学JavaIO之:File copy和File filter
    JDK10的新特性:var和匿名类
    Flutter 完美的验证码输入框
    Flutter 不可错过的学习资源
    《Flutter 动画系列》组合动画
    【强烈推荐】适合Flutter初学者的完整项目
  • 原文地址:https://www.cnblogs.com/huanhuan55/p/12073077.html
Copyright © 2020-2023  润新知