Office365的加载项:将数据从任务窗格加载项插入到Excel表格中

我肯定错过了什么:

[问题]:

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

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

这似乎是不可能使用Office JavaScript API。

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

以下解决scheme是不可接受的:

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

所有这些都是从可用性angular度来看的噩梦般的解决scheme。

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

  • 我不能删除数据(是的,调用“deleteAllDataValuesAsync”)与这样一个命名的范围创build的绑定抛出错误3010(即使绑定说,这是一个“表”绑定..扫描?)。
  • 我不能用不同大小的数据覆盖它(覆盖错误)
  • 我不能设置格式(是的,这是一个绑定创build为表绑定,是的,我可以调用setFormatAsync函数,它会引发“内部错误,5001” – >#headdesk

我希望微软的一位读者能够指出我的方向。 我真的希望! 因为我开始担心这实际上是通过devise。 (在过去的几个星期的斗争之后,我非常沮丧的是office.js,我很难不喧哗,所以我会在这里停止..不要让我开始在ui结构上)

随着Office 2016中引入的新的Javascript API(即将在Office Online中提供),使用新的Range对象处理工作表数据很容易。 下面的代码片段不需要用户的范围select或任何其他操作。

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资源pipe理器中尝试一下,看到下面链接的博客文章了解更多信息!

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

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