美文网首页超有趣的JS
使用xlsx-populate导出excel

使用xlsx-populate导出excel

作者: Nanayai | 来源:发表于2019-07-16 08:03 被阅读25次

    毕竟几人真得鹿,不知终日梦为鱼

    简单的导出excel并不需要额外的库,但是最近在做数据汇总分析的时候,客户想要导出这样的表:

    这是一张调查问卷回收以后,做个简单的频率分析,每一道题是一个table;

    还有这样的:

    这两张属于交叉分析,是指不同的题目之间进行运算,以上是两种模式,在这里就不细说了.

    为了实现上面的需求,我先找了比较流行的SheetJS / js-xlsx;官网是sheetjs.com ;但是很快就发现社区版不支持添加样式,虽然有protobi / js-xlsxxSirrioNx / js-xlsx 这样的可添加样式增强版,但是组织数据的格式麻烦的让人发指,还好最后找到了适合我的库:xlsx-populate :

    Excel XLSX parser/generator written in JavaScript with Node.js and browser support, jQuery/d3-style method chaining, encryption, and a focus on keeping existing workbook features and styles in tact.

    翻看它的文档你可以清楚地发现,这个库提供sheet,单元格(cell),范围(range),行和列等对象,可以方便快捷的组织你的excel;使用方法也很简单, sheet.cell("A1").value().style() 链式调用,可以设置值和样式,sheet.range("A1:C3").merged(true) 可以合并单元格,文档上很清楚了我就不再赘述了,你可以在以下关键词中寻找你所需要的:

    var Promise = XlsxPopulate.Promise;
    var name = "问卷分析";
    
    XlsxPopulate.fromBlankAsync()
        .then(function (workbook) {
        //处理数据和导出样式
        var sheet = workbook.sheet(0);
        sheet.column("A").width(35).style({
            wrapText: true
        });
        sheet.column("B").width(18).style({
            wrapText: true,
            numberFormat: "0.00"
        });
        sheet.cell("A1").value([1,2,3]).style({leftBorder: "thick", rightBorder: "thick" })
        //处理完毕
        return workbook.outputAsync({
            type: ""
        });
    }).then(function (blob) {
        if (window.navigator && window.navigator.msSaveOrOpenBlob) {
            window.navigator.msSaveOrOpenBlob(blob, name + ".xlsx");
        } else {
            var url = window.URL.createObjectURL(blob);
            var a = document.createElement("a");
            document.body.appendChild(a);
            a.href = url;
            a.download = name + ".xlsx";
            a.click();
            window.URL.revokeObjectURL(url);
            document.body.removeChild(a);
        }
    }).catch (function (err) {
        alert(err.message || err);
        throw err;
    });
    

    Tips:若想实现这种指定位置换行效果,需要先设置单元格自动换行,再在字符串中添加\n即可:

    XlsxPopulate.fromBlankAsync()
        .then(workbook => {
          // Modify the workbook.
          workbook.sheet("Sheet1").column("A").width(100)
          workbook.sheet("Sheet1").row(1).height(100)
          workbook.sheet("Sheet1").cell("A1").value("AAAAAA\nBBBBBB\nCCCCCC\nDDDDDD")
          .style("verticalAlignment", "center")//居中
          .style("horizontalAlignment", "center")//居中
          .style("wrapText", true)//自动换行
    
          // Write to file.
          return workbook.toFileAsync("./gn/xlsx.xlsx");
        });
    

    相关文章

      网友评论

        本文标题:使用xlsx-populate导出excel

        本文链接:https://www.haomeiwen.com/subject/zyngkctx.html