如果工作表名称是我的表的数据返回范围对象的m_address
和m_addressLocal
属性将这个样子 "'my sheet''s data'!A1:B2"
双单引号”ctx.workbook.getSelectedRange()返回“每个单引号'在工作表名称
如果在其他API调用中按原样使用,则它们将失败。
解决方法是在更高层替换字符串,因为无法直接更改range.address属性。
如果工作表名称是我的表的数据返回范围对象的m_address
和m_addressLocal
属性将这个样子 "'my sheet''s data'!A1:B2"
双单引号”ctx.workbook.getSelectedRange()返回“每个单引号'在工作表名称
如果在其他API调用中按原样使用,则它们将失败。
解决方法是在更高层替换字符串,因为无法直接更改range.address属性。
我们调查了这一点,实际上我不确定我们在这里有一个错误。下面的代码工作。当你说“如果在其他API调用中使用,它们将会失败”,你指的是哪些API调用?
try {
await Excel.run(async (context) => {
const sheetName = `My sheet's data`;
// Preemptively delete any previous incarnation of this worksheet, if any
context.workbook.worksheets.getItemOrNullObject(sheetName).delete();
const sheetAdded = context.workbook.worksheets.add(sheetName);
const rangeB2 = sheetAdded.getRange("B2").load("address");
await context.sync();
console.log(rangeB2.address);
const refetchedRange = sheetAdded.getRange(rangeB2.address);
refetchedRange.format.fill.color = "orange";
const differentFetchedRange = sheetAdded.getRange("'My sheet''s data'!B3");
differentFetchedRange.format.fill.color = "purple";
sheetAdded.activate();
});
}
catch (error) {
OfficeHelpers.Utilities.log(error);
}
您可以尝试在新的脚本实验室(https://aka.ms/getscriptlab)从字面上5次点击这个片段直播。只需安装Script Lab加载项(免费),然后在导航菜单中选择“导入”,然后使用以下GIST URL:https://gist.github.com/Zlatkovsky/bd5e82a3cf6da021cc1af13dddebba1b。见more info about importing snippets to Script Lab。
对不起,我想我对“其他API”做了假设。对于我来说这个特定的API就是这个'context.workbook.worksheets.getItem(“我的表'的数据”)。getRange(“B3”)。select();'如果你把它放在'sheetAdded.activate ()'你会看到它失败。我的用例是在工作簿中获取所选范围,向用户显示工作表名称(不带额外的引号)和地址,并让他们在单击时跳转到范围。不确定为什么一些API容忍重复的引号,而其他API则不能。这是一个要点:(https://gist.github.com/jimbarrett33/99581000b3907fb1084e2b9b455c7c82)。很好的插件顺便说一句。 –
@JimBarrett,我会争辩说,上述是由设计。没有工作簿中有双刻度标记的工作表,因此失败。当它是更大的'Sheet Name'!A4'结构的一部分时与看到'getItem'时有区别。 –
对于您的场景,正确的做法是查询范围的“工作表”属性,然后加载'worksheet.name'。 –
让我把它传递给开发团队,我们会回复你。 –
谢谢。这不会阻止我。只是想让你知道它。 –