在 Word.run 流程之外使用 Paragraph

2024-04-02

我试图首先找到一个段落,然后当用户单击按钮时,对该段落进行一些操作。

我尝试使用似乎是权威书籍中的示例:Michael Zlatkovsky 的“Building Office Add Ins”。

var global_paragraph = undefined;
async function analyzeDocument() {
Word.run(async function(context) {
    const paragraphs = context.document.body.paragraphs;
    context.load(paragraphs, 'text');
    return context.sync().then(() => {
        for (let i = 0; i < paragraphs.items.length; i++) {
        if (/*some condition that works only once*/) {
          global_paragraph = paragraphs.items[i];
          global_paragraph.track();
        }
    };});
}).catch(handleError);
};
async function handleButtonClick() {
    OfficeExtension.config.extendedErrorLogging = true;
    Word.run(global_paragraph, async function(context) {
        global_paragraph.load("text");
        return context.sync().then(() => {
            /* do something */
        });
    }).catch(handleError);
};

这导致了一般异常。

{"code":"GeneralException","message":"GeneralException","errorLocation":"Document._GetObjectByReferenceId","statement":"var v=context.root._getObjectByReferenceId(\"p!00000DB2\");","surroundingStatements":["// >>>>>","var v=context.root._getObjectByReferenceId(\"p!00000DB2\");","// <<<<<","v.load([\"text\"]);"],"fullStatements":["var v=context.root._getObjectByReferenceId(\"p!00000DB2\");","v.load([\"text\"]);"]}

我可以在脚本实验室中重现您的问题。

我认为问题不在于您的代码,而在于 Word API。好消息是,有一个简单的解决方法,尽管我鼓励您在https://github.com/officedev/office-js/issues https://github.com/officedev/office-js/issues无论如何,要确保产品团队可以调查它。

解决方法是

global_paragraph = paragraphs.items[i];

改为:

global_paragraph = paragraphs.items[i].getRange();

通过致电getRange(),它创建一个具有适当标识的新对象,因此能够在以后跟踪它。

我在脚本实验室中使用的代码片段(实际上与您的代码片段相同)如下:

$("#button1").click(() => tryCatch(button1));
$("#button2").click(() => tryCatch(button2));

var global_paragraph: Word.Range;

async function button1() {
  await Word.run(async function(context) {
    const paragraphs = context.document.body.paragraphs;
    context.load(paragraphs, "text");
    return context.sync().then(() => {
      for (let i = 0; i < paragraphs.items.length; i++) {
        if (paragraphs.items[i].text.startsWith("Dear")) {
          global_paragraph = paragraphs.items[i].getRange();
          global_paragraph.track();
        }
      }
    });
  });
}

async function button2() {
  OfficeExtension.config.extendedErrorLogging = true;
  Word.run(global_paragraph, async function(context) {
    global_paragraph.load("text");
    return context.sync().then(() => {
      console.log(global_paragraph.text);
    });
  });
}

/** Default helper for invoking an action and handling errors. */
async function tryCatch(callback) {
  try {
    await callback();
  } catch (error) {
    // Note: In a production add-in, you'd want to notify the user through your add-in's UI.
    console.error(error);
  }
}

(当然,对 HTML 进行相应的更改以添加两个按钮):

<button id="button1" class="ms-Button">
    <span class="ms-Button-label">Button1</span>
</button>

<button id="button2" class="ms-Button">
    <span class="ms-Button-label">Button2</span>
</button>

希望这可以帮助,

〜迈克尔

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

在 Word.run 流程之外使用 Paragraph 的相关文章

随机推荐

  • 选择看起来像错误/缺失功能的重载时,C# 编译器出现奇怪的行为

    我最近发现 C 编译器的一个有趣的行为 想象一下这样的界面 public interface ILogger void Info string operation string details null void Info string o
  • 使用 C 函数扩展 Numpy

    我正在尝试加速我的 Numpy 代码 并决定实现一个特定的函数 而我的代码大部分时间都在 C 中使用 我实际上是 C 的菜鸟 但我设法编写了一个函数 将矩阵中的每一行归一化为 1 我可以编译它 并用一些数据 在 C 中 测试它 它满足了我的
  • 使用 RxJS 将多个 ajax 请求转换为 Observables

    我正在努力解决某件事 我猜这意味着我误解了并且正在做一些愚蠢的事情 我有一个可观察对象 需要使用它来创建一些对象 将其发送到服务器进行处理 将服务器的结果与我发送的对象结合起来 然后将其转换为可观察对象 所以我想要做什么 我认为 就像是 v
  • 具有 http 身份验证的 Zend SOAP 服务器 WSDL URI

    我正在尝试使用 Zend Soap Server 设置 SOAP 服务 ZF1 我的问题是 WSDL URI 受密码保护 可以通过设置 https 用户名 来访问它 电子邮件受保护 cdn cgi l email protection 作为
  • 使 Python 单元测试因任何线程的异常而失败

    我正在使用单元测试框架来自动化多线程 python 代码 外部硬件和嵌入式 C 的集成测试 尽管我公然滥用单元测试框架进行集成测试 但它的效果非常好 除了一个问题 如果任何生成的线程引发异常 我需要测试失败 这可以通过单元测试框架实现吗 一
  • svn update 没有更新!

    我希望 svn update 用服务器上的文件覆盖我的本地文件 即使我的本地文件有修改 我也想扔掉它们并使用远程存储库上的版本 我怎么做 我试过svn update force但它不起作用 Update 感谢您的回答 所以我使用这样的恢复
  • 纯 Web 应用程序(HTML5 等)的推荐 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • actionbarsherlock 选项卡中的 Google 地图

    我正在尝试让谷歌地图 v2 在我的应用程序中工作 我见过几个示例 展示了如何在活动中打开 SupportMapFragment 这个想法是你的活动会调用setContentView R layout map layout 其中 map la
  • ggplot2 中的scale_colour_gradient 与scale_fill_gradient

    我绝对是初学者ggplot2并尝试使用这个包画出漂亮的人物 我正在阅读手册 但我不明白它们之间的区别scale colour gradient vs scale fill gradient 在我的分析中 我将使用 假设 进行观察 因为我不确
  • 使用 PHP 的 telegram API 发送图像总是失败

    我想制作一个使用 Telegram API 发送图像的函数 参考 API https github com mgp25 Telegram Bot API https github com mgp25 Telegram Bot API 但是当
  • PHP 闭包是否损坏或者我遗漏了什么?

    我一直在阅读 PHP 5 3 的新功能 主要功能之一是closures 除非我犯了严重错误 否则 PHP 开发人员要么是 a 将闭包与匿名函数混淆b 我正在测试的 PHP 5 3 1 中的闭包被破坏了 From 维基百科怎么说 http e
  • E/iardini.error0:无效 ID 0x00000001 - 错误资源 ID

    我目前遇到一个错误 该错误继续降低我的应用程序的性能 该错误不会导致应用程序关闭或崩溃 也不会导致向控制台写入异常 控制台仅报告此消息 E iardini error0 Invalid ID 0x00000001 该消息中唯一出现的内容是
  • 为什么我无法将派生泛型类型转换为基本非泛型类型(通过约束)?

    鉴于这个虚构的例子 class NonGeneric class Generic
  • 如何按原样生成数据库脚本?

    我这样做的主要原因是跟踪我的应用程序的数据库架构更改 在 SQL Server Management Studio 中 我能够生成一个创建脚本来创建数据库 但它不包含任何测试数据 理想情况下 当脚本运行时 它应该删除现有数据库 假设它已经存
  • 将多项回答问题制成表格

    想象一下 我有一个问题 有四个选项 受访者可以选择零个或四个选项的任意组合 变量被命名为A B C and D响应存储在 data frame 中 如下所示 set seed 1 dat data frame A sample c 0 1
  • Material-UI 面包屑导航与反应路由器集成

    我正在尝试将 Material UI 面包屑与反应路由器一起使用 我如何以编程方式检测当前路线 在 Material UI 网站上有一个关于如何使用它的示例 但它需要使用静态 breadcrumbNameMap 我已经尝试使用 HOC wi
  • GCC-汇编错误:针对“.data”重定位 R_X86_64_32S

    情况 环境 Arch Linux x86 64 4 2 3 1 ARCH GCC 海湾合作委员会 海湾合作委员会 5 2 0 Command gcc Wall g o asm printf asm printf s Error usr bi
  • symfony2实体的slugify方法在哪里

    我有 slugify 方法 每次更改实体类的标题属性时都会对其进行 slugify 处理 所以我把这个方法放在实体类中并像这样调用它 public function setTitle t this gt title t this gt sl
  • 如何在javascript中转换日期时间格式

    我如何转换日期时间5 8 2011 12 00 00 AM m d yyyy 到 dd MMM yyyy 类似08 May 2011在 JavaScript 中 这个链接是一个很好的资源 您可以使用 http blog stevenlevi
  • 在 Word.run 流程之外使用 Paragraph

    我试图首先找到一个段落 然后当用户单击按钮时 对该段落进行一些操作 我尝试使用似乎是权威书籍中的示例 Michael Zlatkovsky 的 Building Office Add Ins var global paragraph und