Javascript Excel office js API-获取特定工作表的范围

Javascript Excel office js API-获取特定工作表的范围,javascript,excel,office-js,Javascript,Excel,Office Js,Excel文档的工作表是一周中的几天(星期日-星期五)-需要迭代。 我的问题是:怎么做 我的代码尝试(均以失败告终): Excel.run(函数(上下文){ const currentSheets=context.workbook.worksheets; 施工工作表日期=[“星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”]; for(设i=0;i

Excel文档的工作表是一周中的几天(星期日-星期五)-需要迭代。
我的问题是:怎么做

我的代码尝试(均以失败告终):

Excel.run(函数(上下文){
const currentSheets=context.workbook.worksheets;
施工工作表日期=[“星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”];
for(设i=0;i
下一次尝试:

Excel.run(function(context) {
    const worksheetDays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
    const sheetRanges = {};
    const currentSheets = context.workbook.worksheets;
    for (let i = 0; i < worksheetDays.length; i++) {
         sheetRanges[worksheetDays[i]] = currentSheets.getItem(worksheetDays[i]).load("values");
    }
    return context.sync().then(function() {
        console.log(sheetRanges.Sunday.values); // null
    });
});
Excel.run(函数(上下文){
施工工作表日期=[“星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”];
常量范围={};
const currentSheets=context.workbook.worksheets;
for(设i=0;i
下一步:

Excel.run(函数(上下文){
施工工作表日期=[“星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”];
常量范围={};
const currentSheets=context.workbook.worksheets;
for(设i=0;i
下一步:

Excel.run(函数(上下文){
施工工作表日期=[“星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”];
var-sheetRanges={};
const currentSheets=context.workbook.worksheets;
for(设i=0;i
基本上,我迷路了。我只需要获取所有工作表的单元格值。
如何解决这个问题


谢谢

你们非常接近。事实上,你的第三次尝试几乎是正确的。但是为了其他可能遇到这个问题的人,让我首先用前两个代码块来描述这个问题

对于前两次尝试,问题是您只能加载对象上实际存在的属性。不幸的是,对于您的代码,
不是
工作表
对象上的属性

就我个人而言,我发现最简单的方法是编写代码,就好像属性已经加载一样(并使用IntelliSense来指导您)。然后,向上一行或多行执行
load
语句,就像您所做的那样,指定您正在使用的属性名称(即
range.load('value')
),并确保您有一个
context.sync()
,正确链接(正确链接)或
等待
-ed(如果您使用的是TypeScript)

现在,几乎正确的方法3的问题是,如果为整个工作表构建一个
范围
,然后加载其
属性,
将为
,因为该范围是无限的(100多万行乘以16k列;您无法在宿主Excel应用程序和JavaScript之间传递此类数据)。因此,您要使用的API是
sheet.getUsedRange()

因此,所有这些都已经说过了,您可以尝试第三次编写代码,只需替换

currentSheets.getItem(worksheetDays[i]).getRange().load("values");

因此,在第三次尝试时,您实际上离正确加载距离只有4个字符。顺便说一句,如果您加载了
address
属性,那么您实际上已经正确地加载了它。在这一点上,问题不在于加载值的方式,而在于无边界范围的事实(如果粗体/斜体/颜色等值在多个单元格中不同,则返回不一致的值)返回一个
null
。我会将反馈传递给我们的内容团队,以确保这一点更加清晰

所以,最后的代码(并且键入脚本,将其很好地量化为:-),这样您就可以有很好的智能性):

wait Excel.run(异步上下文=>{
施工工作表日期=[“星期日”、“星期一”/*…*/];
const sheetRanges={}为{[key:string]:Excel.Range}
const currentSheets=context.workbook.worksheets;
for(设i=0;i
您可以在new Script Lab()中单击五下,尝试使用此代码段。只需安装Script Lab加载项(免费),然后在导航菜单中选择“导入”,并使用以下要点URL:。请参阅


最后,我想提醒您,对于上面的许多主题(例如,如何正确加载属性、了解集合访问的工作方式、在Office加载项中使用TypeScript等等),您可能会发现这本书“这是一个有价值的资源。充分披露:我是这本书的作者。但我也可以保证你会发现它很有用。就这一点而言,LeanPub商店本身为这本书提供45天无条件100%的“幸福保证”(我从未有人要求退款)


祝您万事如意,并祝您在外接程序开发过程中好运!如果遇到问题,一定要不断发布问题…

非常感谢您的回答!我非常希望得到答案
Excel.run(function(context) {
    const worksheetDays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
    const sheetRanges = {};
    const currentSheets = context.workbook.worksheets;
    for (let i = 0; i < worksheetDays.length; i++) {
         sheetRanges[worksheetDays[i]] = currentSheets.getItem(worksheetDays[i]).getRange().load("values");
    }
    return context.sync().then(function() {
        console.log(sheetRanges.Sunday.values); // null
    });
});
Excel.run(function(context) {
    const worksheetDays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
    var sheetRanges = {};
    const currentSheets = context.workbook.worksheets;
    for (let i = 0; i < worksheetDays.length; i++) {
        sheetRanges[worksheetDays[i]] = currentSheets.load("name");
    }
})
.then(context.sync)
.then(function () {
     for (let i = 0; i < worksheetDays.length; i++) {
        sheetRanges[worksheetDays] = sheetRanges[worksheetDays].load("values");
    }
 })
.then(function () {
    console.log(sheetRanges.Sunday.values); // null
});
currentSheets.getItem(worksheetDays[i]).getRange().load("values");
currentSheets.getItem(worksheetDays[i]).getUsedRange().load("values");
await Excel.run(async context => {
    const worksheetDays = ["Sunday", "Monday", /*...*/];
    const sheetRanges = {} as { [key: string]: Excel.Range }

    const currentSheets = context.workbook.worksheets;
    for (let i = 0; i < worksheetDays.length; i++) {
        sheetRanges[worksheetDays[i]] = currentSheets.getItem(worksheetDays[i]).getUsedRange().load("values");
    }

    await context.sync();
    console.log(sheetRanges["Sunday"].values);
});