繁体   English   中英

如何为(导出到 .xlsx)SheetJS js-xlsx 设置单元格数据的公式:https://github.com/SheetJS/js-xlsx

[英]how to set formula for cell data for (export to .xlsx) SheetJS js-xlsx: https://github.com/SheetJS/js-xlsx

参考这个例子https://github.com/SheetJS/js-xlsx/blob/master/tests/write.js ,它在 xlsx 电子表格中没有任何单元格公式的实现我尝试使用 cell.f = "=SUM (A1+B1)" 对于单元格 C1 和 cell.v 作为总和值为 3。但我没有成功。 对于导出的文件,当在 MS excel 中打开时,单元格仅包含数据,并且在选择时没有显示我在 f(x) 字段中分配的任何公式。

有人可以给我发一个实际使用函数/属性 '.f' 和 'cellFormula' 的例子吗

会很有帮助。 我只需要一个带有静态值的工作示例。

单元格对象具有属性f ,这是您要使用的公式。 在这里您可以看到所有选项: https : //github.com/SheetJS/js-xlsx#cell-object

这是使用公式的示例:

var xlsx = require('xlsx');

//workBook class
function Workbook() {
    if(!(this instanceof Workbook)) return new Workbook();
    this.SheetNames = [];
    this.Sheets = {};
}

var exportBook = new Workbook();

var worksheet = {};

var cell = {f: 'A2+A3'};

var cellRef = xlsx.utils.encode_cell({r:0, c:0});

var range = {s:{r: 0, c: 0},
            e: {r: 10, c: 10}};



worksheet[cellRef] = cell;
worksheet['!ref'] = xlsx.utils.encode_range(range);

exportBook.SheetNames.push('test');
exportBook.Sheets.test = worksheet;


xlsx.writeFile(exportBook, 'formula sample.xlsx');

此处,A1 应具有公式 A2+A3。

希望能帮助到你 :)

这是我的解决方案

function download() {
    TheResourceService.get({ xId: $stateParams.xId }, function(result) {
        var sheetName = 'first_sheet';
        var wopts = { bookType: 'xlsx', bookSST: true, type: 'binary' };
        var fileName = "the_excel_file.xlsx";

        var columns = ['id', 'name', 'point'];
        var data = [
            [1, 'Kyle', 20],
            [2, 'Allen', 32],
            [3, 'Chris', 18],
            [4, 'Tim', 11]
        ];

        var wb = XLSX.utils.book_new();
        var ws = uigrid_to_sheet(data, columns);

        ws['!ref'] = XLSX.utils.encode_range({
            s: { c: 0, r: 0 },
            e: { c: 3, r: 1 + data.length + 1 }
        });
        ws['C6'] = { f: 'SUM(C2:C5)' };
        ws['B6'] = { v: 'Total' };

        XLSX.utils.book_append_sheet(wb, ws, sheetName);
        var wbout = XLSX.write(wb, wopts);
        saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), fileName);
    })

}


function uigrid_to_sheet(data, columns) {
    var o = [],
        oo = [],
        i = 0,
        j = 0;

    /* column headers */
    for (j = 0; j < columns.length; ++j) oo.push((columns[j]));
    o.push(oo);

    /* table data */
    for (i = 0; i < data.length; ++i) {
        oo = [];
        for (j = 0; j < data[i].length; ++j) oo.push((data[i][j]));
        o.push(oo);
    }
    /* aoa_to_sheet converts an array of arrays into a worksheet object */
    return XLSX.utils.aoa_to_sheet(o);
}

function s2ab(s) {
    if (typeof ArrayBuffer !== 'undefined') {
        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;
    } else {
        var buf = new Array(s.length);
        for (var i = 0; i != s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF;
        return buf;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM