Office365 加载项:从任务窗格加载项将数据插入 excel sheet
Add-Ins for Office365: inserting data into an excel sheet from a task-pane add-in
我一定是漏掉了什么:
[问题]:
我有一个二维数据数组,我想将其插入当前 sheet 从单元格 A1 开始。我还必须格式化这些数据。
当前文档可能为空或不为空。我无法控制这个。
稍后,我需要从文档中删除数据并插入新数据。这组新数据可能有不同的维度。
这似乎无法使用 Office JavaScript Api。
我使用 TableBindings 等尝试的所有事情都失败了。在许多情况下,根据 MSDN 应该工作的功能失败了,给我一些神秘的错误消息,例如 "internal error"(代码 5001)或不支持的绑定操作 (3010)。我必须使用表格绑定,因为根据 MSDN 文档我无法将格式应用于其他任何内容。
以下解决方案是不可接受的:
- 强制用户使用具有预先存在的命名表的特定文档模板
- 在我的插件开始工作之前强制用户进入 select 单元格 "A1"。
- 强制用户在插入数据之前select一个范围。
从可用性的角度来看,所有这些都是噩梦般的解决方案。
我可以从命名项创建一个绑定并通过计算列和行来构建范围,然后ui像这样"A1:C232"创建一个字符串但是这只有效一次,因为:
- 我无法删除数据(是的。调用 "deleteAllDataValuesAsync" 使用此类命名范围创建的绑定会引发错误 3010(即使绑定说它是 "table" 绑定.. wat ?)。
- 我无法用不同大小的数据覆盖它(覆盖错误)
- 我无法在其上设置格式(是的,它是作为表格绑定创建的绑定,是的,我可以调用 setFormatAsync 函数,它会抛出 "internal error, 5001" -> #headdesk
我希望 Microsoft 的人能读到这篇文章并能为我指明正确的方向。我真的希望!因为我开始担心这实际上是设计使然。 (经过最后几周的挣扎,我对 office.js 感到非常沮丧,我很难不咆哮,所以我就在这里停下来..不要让我开始 ui面料)
借助随 Office 2016 引入的新 Excel Javascript API(很快将在 Office Online 中推出),使用新的 Range 对象可以轻松操作工作表数据。下面的代码片段无需范围选择或用户的任何其他操作即可运行。
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 代码段资源管理器中试用它并查看下面链接的博客 post 了解更多信息!
我一定是漏掉了什么:
[问题]:
我有一个二维数据数组,我想将其插入当前 sheet 从单元格 A1 开始。我还必须格式化这些数据。 当前文档可能为空或不为空。我无法控制这个。
稍后,我需要从文档中删除数据并插入新数据。这组新数据可能有不同的维度。
这似乎无法使用 Office JavaScript Api。
我使用 TableBindings 等尝试的所有事情都失败了。在许多情况下,根据 MSDN 应该工作的功能失败了,给我一些神秘的错误消息,例如 "internal error"(代码 5001)或不支持的绑定操作 (3010)。我必须使用表格绑定,因为根据 MSDN 文档我无法将格式应用于其他任何内容。
以下解决方案是不可接受的:
- 强制用户使用具有预先存在的命名表的特定文档模板
- 在我的插件开始工作之前强制用户进入 select 单元格 "A1"。
- 强制用户在插入数据之前select一个范围。
从可用性的角度来看,所有这些都是噩梦般的解决方案。
我可以从命名项创建一个绑定并通过计算列和行来构建范围,然后ui像这样"A1:C232"创建一个字符串但是这只有效一次,因为:
- 我无法删除数据(是的。调用 "deleteAllDataValuesAsync" 使用此类命名范围创建的绑定会引发错误 3010(即使绑定说它是 "table" 绑定.. wat ?)。
- 我无法用不同大小的数据覆盖它(覆盖错误)
- 我无法在其上设置格式(是的,它是作为表格绑定创建的绑定,是的,我可以调用 setFormatAsync 函数,它会抛出 "internal error, 5001" -> #headdesk
我希望 Microsoft 的人能读到这篇文章并能为我指明正确的方向。我真的希望!因为我开始担心这实际上是设计使然。 (经过最后几周的挣扎,我对 office.js 感到非常沮丧,我很难不咆哮,所以我就在这里停下来..不要让我开始 ui面料)
借助随 Office 2016 引入的新 Excel Javascript API(很快将在 Office Online 中推出),使用新的 Range 对象可以轻松操作工作表数据。下面的代码片段无需范围选择或用户的任何其他操作即可运行。
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 代码段资源管理器中试用它并查看下面链接的博客 post 了解更多信息!