【问题标题】:Add-Ins for Office365: inserting data into an excel sheet from a task-pane add-inOffice365 加载项:将数据从任务窗格加载项插入 Excel 工作表
【发布时间】:2015-09-25 11:44:11
【问题描述】:

我一定是错过了什么:

[问题]:

我有一个二维数据数组,我想从单元格 A1 开始插入到当前工作表中。我还必须格式化这些数据。 当前文档可能为空,也可能不为空。我无法控制这个。

稍后,我需要从文档中删除数据并插入新数据。这组新数据可能有不同的维度。

使用 Office JavaScript Api 似乎无法做到这一点。

我尝试使用 TableBindings 等的所有事情都失败了。在许多情况下,根据 MSDN 应该工作的功能失败了,给我一些神秘的错误消息,例如“内部错误”(代码 5001)或不受支持的绑定操作(3010)。我必须使用表格绑定,因为根据 MSDN 文档,我无法将格式应用于其他任何内容。

以下解决方案是不可接受的:

  • 强制用户使用具有预先存在的命名表的特定文档模板
  • 强制用户在我的加载项开始工作之前选择单元格“A1”。
  • 强制用户在插入数据之前选择一个范围。

从可用性的角度来看,所有这些都是噩梦般的解决方案。

可以从命名项创建一个绑定,并通过计算列和行数并构建一个像“A1:C232”这样的字符串来构建范围,但这只能工作一次,因为:

  • 我无法删除数据(是的。在使用此类命名范围创建的绑定上调用“deleteAllDataValuesAsync”会引发错误 3010(即使该绑定说它是一个“表”绑定.. wat?)。
  • 我无法用不同大小的数据覆盖它(覆盖错误)
  • 我无法对其设置格式(是的,它是作为表格绑定创建的绑定,是的,我可以调用 setFormatAsync 函数,它会引发“内部错误,5001”-> #headdesk

我希望来自 Microsoft 的人能阅读此内容并为我指明正确的方向。我真的希望!因为我开始担心这实际上是设计使然。 (经过最后几周的挣扎,我对 office.js 感到非常沮丧,我很难不咆哮,所以我会在这里停下来......不要让我开始使用 ui 结构)

【问题讨论】:

    标签: excel office365 office-addins office-js


    【解决方案1】:

    借助随 Office 2016 引入的新 Excel Javascript API(即将在 Office Online 中提供),使用新的 Range 对象可以轻松操作工作表数据。下面的 sn-p 运行不需要范围选择或用户的任何其他操作。

    var data = [
        [1,2,3],
        [2,6,7]
    ]
    
    Excel.run(function (ctx) {
        // make space for the data to be inserted
        var sheet1 = ctx.workbook.worksheets.getItem("Sheet1");
        var firstCell = sheet1.getCell(0,0);
        var lastCell = sheet1.getCell(data.length - 1, data[0].length - 1);
        var range = firstCell.getBoundingRect(lastCell).insert('down');
    
        range.values = data; // insert data
        range.format.font.bold = true;
    
        range.delete('up'); // erase data, shift up
        return ctx.sync();
    }).catch(function(error) {
        console.log(error);
    })
    

    在 Office JS Snippet explorer 中试用,并查看下面链接的博客文章了解更多信息!

    https://github.com/OfficeDev/office-js-snippet-explorer

    https://dev.office.com/blogs/Office-js-Public-Preview

    【讨论】:

    • 哇!这正是我期望 Api 的工作方式和外观。比我们现在拥有的要干净得多。这不会移植到 Office 2013,对吗? (我想这需要以更新/服务包的形式对办公室本身进行更改,对吧?)
    • 不幸的是,我不知道将新 API 移植到 Office '13 及更早版本的任何计划。但是,如果您有 O365 订阅,则可以免费升级到 Office 16。此外,新的 API 将很快移植到 Office Online 和 Mac/iOS。 link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多