循环浏览 Excel Javascript API 中所有工作表的最佳方法?

2024-05-11

我想循环遍历工作簿中的每个工作表,并对每个工作表执行一项操作(例如,运行calculate()). 出于性能原因,我想将这一切都完成同步()请求 https://learn.microsoft.com/en-us/office/dev/add-ins/excel/excel-add-ins-core-concepts#sync.

问题是,在同步之前,我只能通过几种有限的方式获取工作表,例如通过活动工作表 https://learn.microsoft.com/en-us/office/dev/add-ins/excel/excel-add-ins-worksheets#get-the-active-worksheet, or by 工作表名称 https://learn.microsoft.com/en-us/office/dev/add-ins/excel/excel-add-ins-worksheets#set-the-active-worksheet,这使得循环变得困难。

我能想到的最好的方法是使用getFirst() and getNext():

Excel.run(function(ctx) {
  var sheets = ctx.workbook.worksheets;
  var sheetCount = sheets.getCount();
  var currentSheet = sheets.getFirst();
  currentSheet.calculate()

  if (sheetCount > 1) {
    for (var i = 2; i <= sheetCount; i++) {
      currentSheet = currentSheet.getNext();
      currentSheet.calculate();
    }
  }
  return ctx.sync();
});

这个循环非常尴尬,我觉得必须有更好的方法。有没有?


你的代码有效吗?看起来很可疑——你正在做一个sheets.getCount(),但在继续之前您尚未同步。因此,我不确定如何sheetCount > 1 or i <= sheetCount会工作。

所以,除非你碰巧提前知道张数,否则我认为你必须接受two context.sync-- 一个用于查找一些初步信息(例如,计数或其他信息),另一个用于刷新实际操作的结果。

虽然你可以使用以下方式获取集合计数getCount(),单独使用是相当尴尬的。幸运的是,如果你只是加载sheets集合,你最终会得到sheets.items,这将是所有 Worksheet 代理对象的数组。

您可以在工作表上加载任何属性,例如 ID 或姓名或任何您喜欢的内容。在您的特定场景中,听起来您根本不需要任何东西 - 但如果您不指定要加载的属性名称,管道将加载所有标量属性,这出于性能原因并不好(至少在一般情况下 - 特别是工作表的标量属性非常少,可能并不重要,但它仍然很浪费,而且渗透到代码中并不是一个好的模式)。因此,如果您只想要结构而不想要任何给定的属性,您可以给它any虚假的财产名称——我最喜欢的$none,这是非常明显的。或者您也可以加载工作表名称或 ID,具体取决于您。

使用 TypeScript(或者更确切地说,async/await,TypeScript 将为您编译为 ES5 兼容的 JavaScript)生成的代码:

Excel.run(function(ctx) {
    var sheets = ctx.workbook.worksheets;
    sheets.load("$none");
    await context.sync();

    sheets.items.forEach(sheet => sheet.calculate());
    await context.sync();
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

循环浏览 Excel Javascript API 中所有工作表的最佳方法? 的相关文章

  • Excel 加载项失败并显示 0x8004063E

    我有一个 Excel 添加 它曾经完美地工作 最近 许多客户收到以下错误 在这个问题的最后 环境详情 Windows 7 8 64 位 微软 Office 2013 64 位 Add in是在 net 3 5下编译的 任何帮助将不胜感激 H
  • JavaMail 与 Oauth 和 Office365

    我正在用 Java 构建一个简单的命令行应用程序 它可以登录我的电子邮件箱 IMAP 并下载所有附件 我使用了基本身份验证 但 Microsoft 正在禁用它 因此我尝试将我的应用程序转换为使用 OAuth 在阅读了不同的 OAuth 流程
  • 是否有 API 可以通过编程方式制作 MS Office 365 Powerpoint 演示文稿?

    可以用谷歌来完成 但我们这里使用微软的产品 我希望能够发出 JSON 请求 向其发送一些可访问图像的 URL 并为每个图像创建一张幻灯片 有几种方法可以解决这个问题 第一种是使用 MS PPT 中附带的内置 API 它是一组 COM 对象
  • 在 Word.run 流程之外使用 Paragraph

    我试图首先找到一个段落 然后当用户单击按钮时 对该段落进行一些操作 我尝试使用似乎是权威书籍中的示例 Michael Zlatkovsky 的 Building Office Add Ins var global paragraph und
  • Word insertOoxml 方法返回错误:所有输入未知

    我有一个现有的 Word 加载项解决方案 该解决方案已经运行良好很长一段时间 但现在无法将 OOXML 内容插入到 Word 文档中 试图解决这个问题 我无法让 insertOoxml 方法在任何情况下工作 重现 await Word ru
  • Office-js Excel:获取新保存文件的文件名

    如何获取新保存文件的文件名 通常 我可以使用以下方式获取文件名 Office context document url 然而 当用户打开一个新工作簿时 它实际上没有文件名 而且奇怪的是 即使保存后 这行代码也不起作用 相反 他们必须保存它
  • Microsoft Azure Graph API下载项附件内容

    当我在office365网页浏览器页面中打开电子邮件时 有一个选项可以下载该电子邮件的附件内容项目附件 使用 Microsoft Outlook 将另一封邮件附加到当前邮件 eml 文件 内容类型 RFC 822 但是 当我尝试通过 Gra
  • 使用 Office-JS 获取当前区域

    如何使用 Excel JS API 获取 ActiveCell 周围的当前区域 在 VBA 中这是 Set rng ActiveCell CurrentRegion JavaScript API 中的当前区域属性现已实现 该属性称为getS
  • Office-js for OneNote 对象中的 getRestApiId 函数

    我正在为 OneNote 开发加载项 但在使用 OneNote REST API 时遇到了问题 因为 Office js 不提供与 REST API 兼容的 ID 堆栈溢出 https stackoverflow com questions
  • 不使用 Web 服务器编写简单的 Microsoft 图形客户端

    我正在寻找编写一个脚本来更新 Office365 中的通讯组列表 我正在学习 MS Graph API 并且已经让 python REST 示例可以工作 看来所有示例 Graph API 代码 无论语言或平台如何 都假设我正在以一种或另一种
  • 任务执行期间在任务窗格上滚动时工作表冻结

    我们正在使用office js API 开发一个office Addin 反复出现的问题损害了我们在店里的声誉 此问题是 Excel 插件 office js 中的工作表在滚动后被冻结 我编写了一个简单的脚本实验室片段代码 它重现了工作表冻
  • 已取消的邮件图标显示“不支持”

    发送到 Outlook 的已取消邀请电子邮件包含 不支持 附件 这是我用来取消电子邮件邀请的 ics 有人可以帮助我理解我在这里缺少什么吗 PS Gmail 能够解析此 ics 并从日历中删除该事件 BEGIN VCALENDAR VERS
  • 跟踪预防阻止了对 https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js 存储的访问

    大约一年半前 我使用 OfficeJS API 编写了一个 Excel 加载项 它一直工作到大约两周前 Excel 似乎已经进行了更新 现在我可以右键单击任务窗格并查看开发工具 而以前我无法做到这一点 并且必须运行外部 MS Edge 开发
  • 使用 Outlook 365 API 在组织中获取电子邮件的最佳方式

    我正在构建一个应用程序 用于从组织内部的电子邮件收集统计信息 我们假设这些组织使用 Outlook 365 我希望能够以最简单的方式执行以下操作 获取阅读组织中所有邮件的权限 获取电子邮件 附件并运行我的统计数据 Outlook 365 似
  • 是否有非 VBA Excel 溢出公式来创建和处理数组数组?

    我在 Excel 365 中有一张工作表 其中包含 A 列和 B 列 如下所示 我想使用一些公式 不是 VBA 获取 C 列和 D 列 也就是说 我想重复每一个Title for Count次并为其添加一个流水号 A B C D 1 Tit
  • Office JS Api - 权限被拒绝问题

    我正在开发 Excel 的插件 清单具有以下权限读写文档 我正在添加一个处理程序Office EventType DocumentSelectionChanged Event 第一次 我在 Excel Online 中插入插件 它运行得很好
  • 如何获得所有用户 OneDrive 文件的管理员访问权限

    我是 Office 365 部署的租户管理员 我们有需要访问所有 OneDrive 站点的内部系统 我们正在使用我的租户管理员凭据来获取 OAuth 令牌 并尝试使用带有该 OAuth 令牌的 SharePoint OneDrive RES
  • Outlook 插件的图标未更新

    我的 Outlook 加载项中有一个按钮图标 例如 https xyz com img1 指向 img1 现在 如果我在部署加载项后更新图像 则更新的图像不会加载到功能区中 更新后 https xyz com img1 指向 img2 理想
  • Office excel将CORS请求作为跨域请求

    我正在尝试从我的 Excel 插件发出跨域请求 正如这里所建议的 http dev office com docs add ins develop addressing same origin policy limitations http
  • 无效的超链接:格式错误的 URI 作为超链接嵌入到文档中

    我在我的应用程序中使用 OpenXml 命名空间 我用它来读取 Excel 文件中的 XML 这对于某些 Excel 文件工作正常 但在其他文件上我收到运行时错误 无效超链接 格式错误的 URI 作为超链接嵌入到文档中 我在下面一行得到运行

随机推荐