将Excel范围转换为表格

时间:2018-01-19 18:44:45

标签: angular typescript office-js

我正在尝试使用Office.js API来构建Angular Excel加载项,但我在将Excel.Range转换为Excel.Table时遇到问题。

我有一个类似下面示例的代码绑定到按钮单击,但是虽然我设法在Excel工作表中获取documentLines,但是没有创建表。

getExampleTable() {

    const documentLinesHeader = [["Period 1", "Period 2", "Period 3"]];

    const documentLines = [
        ["Line 1.1", "Line 1.2", "Line 1.3"],
        ["Line 2.1", "Line 2.2", "Line 2.3"],
        ["Line 3.1", "Line 3.2", "Line 3.3"],
    ];

    const documentLinesCount = documentLines.length;
    const columnCount = documentLines[0].length;

    Excel.run(async (ctx) => {        

        let sheet = ctx.workbook.worksheets.getActiveWorksheet();

        let cell = sheet.getCell(0,0);

        let tableRange = cell.getResizedRange(documentLinesCount - 1, columnCount - 1);

        tableRange.load("address");

        await ctx.sync();

        console.log("Table Range is:", tableRange.address);
        // Outputs Table Range is: Sheet1!A1:C3

        tableRange.values = documentLines;

        let exampleTable = sheet.tables.add(tableRange, true);
        exampleTable.getHeaderRowRange().values = documentLinesHeader;
        exampleTable.name = "ExampleTable";

        return await ctx.sync();
    })
    .catch(this.errorHandler);
}

如果我查看控制台,我会收到错误:

Debug info: {"code":"InvalidArgument","message":"The argument is invalid or 
missing or has an incorrect format.","errorLocation":"TableCollection.add"}

我的办公室版本是:     16.0.4639.1000

2 个答案:

答案 0 :(得分:2)

我无法重现您所描述的问题。根据文档,numpy.diag(i) is part of requirement set 1.1your version of Office does support that requirement set

以下函数(函数的某种简化/简化版本)成功地使用数据填充范围,然后从该范围创建表。

TableCollection.add

您可以使用脚本实验室(https://aka.ms/getscriptlab)自行尝试此代码段。只需安装Script Lab加载项(免费),然后在导航菜单中选择“导入”,并使用以下Gist URL:https://gist.github.com/kbrandl/fcb894084eb764098156965aeefb5bf2

答案 1 :(得分:2)

所以,我发现我的Office版本存在某种问题,导致无法添加" TableCollection的Range对象。虽然文档明确指出参数可以是"范围对象,或表示数据源的范围的字符串地址或名称。"

此问题的解决方法是加载Range的地址,并将其传递给add方法。使用上面的代码片段,您必须加载地址,然后传递范围地址,而不是传递Range对象,如下所示:

let exampleTable = sheet.tables.add(tableRange.address, true);