获取上一个 Paragraph 时遇到的坑
场景重现

需求描述如上图,期望在光标位置使用 ApiParagraph.GetPrevious() 查找到框选的 Paragraph (再通过 ApiParagraph.GetNumbering() 来获取它的 Numbering ), 但很遗憾,程序一直被阻断,错误如下:
代码如下
...let oParagraphPrev = oParagraph.GetPrevious()let oParagraphPrevNumbering = oParagraphPrev.GetNumbering() // 此处需要修改while (oParagraphPrev && !oParagraphPrevNumbering) { // 找到前一个 NumberingoParagraphPrev = oParagraphPrev.GetPrevious()oParagraphPrevNumbering = oParagraphPrev.GetNumbering() // 此处需要修改}console.log(oParagraphPrev.Select())...
解决问题
如上问题加了 try-catch ,发现是找不到方法导致程序阻断了。
那么解决问题仍用 try-catch 解决(因为代码是被 GCC(Google Closure Compiler) 压缩过的)
代码如下
let oParagraphPrev = oParagraph.GetPrevious()let oParagraphPrevNumberingtry { // 如果不是Paragraph类的可能找不到对应的方法,会阻断oParagraphPrevNumbering = oParagraphPrev.GetNumbering()} catch (error) {oParagraphPrevNumbering = null}try {while (oParagraphPrev&& !oParagraphPrevNumbering) { // 找到前一个 NumberingoParagraphPrev = oParagraphPrev.GetPrevious()try { // 如果不是Paragraph类的可能找不到对应的方法,会阻断oParagraphPrevNumbering = oParagraphPrev.GetNumbering()} catch (error) {oParagraphPrevNumbering = null}}console.log(oParagraphPrev.Select())} catch (e) {console.error(e)}
总结
在使用相关API方法时尽量使用 try-catch 包裹。
插件中 sdkjs 里面的对象创建和方法调用
// 调用asc_docs_api 的方法// 如添加 Caption : DE.controllers.Viewport.api.asc_AddObjectCaption(props)this.ctx.callCommand(() => {try {const props = new window.Asc.CAscCaptionProperties()props.put_Before(true)props.put_Label('附件')props.put_ExcludeLabel(false)props.put_Format(window.Asc.c_oAscNumberingFormat.Decimal)props.put_IncludeChapterNumber(false) // 是否包括章节号,// props.put_HeadingLvl(this.cmbChapter.getValue()) // 章节的风格,不包括章节号时不用填// props.put_Separator(this.cmbSeparator.getValue()) // 分隔符,不包括章节号时不用填props.updateName()DE.controllers.Viewport.api.asc_AddObjectCaption(props)} catch (error) {console.error(error)}}, false)
