API 文档位置:
我们在使用过程中发现,使用 ApiParagraph.getRange(start,end) 这个API时文字计算的位置和实际位置有差异,也没有找到对文字索引计算的说明。
代码:
let doc = Api.GetDocument();
let paragraph = doc.GetElement(0);
paragraph.AddText("ONLYOFFICE Document Builder");
let range = paragraph.GetRange(0, 9);
range.Select();
paragraph = Api.CreateParagraph();
paragraph.AddText("The word 'ONLYOFFICE' was just selected.");
doc.Push(paragraph);
依据API 说明,应该是 ONLYOFFICE 被选中,实际是 ONLYOFFI 被选中。
1 Like
您好,
范围计数并不是基于字符,而是基于逻辑位置的。每次调用 paragraph.AddText 实际上都会创建一个新的 run,但原本段落中已经存在一个 run(这也会被计入段落中)。这种实现方式与 Microsoft 的程序是一致的,这种逻辑是无法更改的。建议在设置范围参数时,直接提供不同的数值
未进行paragraph.AddText操作,直接通过段落和文本起始位置和结束位置获取,依旧出现偏差,请问此方法9.x版本没有做兼容吗
您好,您那边解决这个问题了吗,我这边升级至9.x之后出现了这个问题,GetBookmarkRange和GetRange获取的range都有问题,期待您的回答
你好 @wangchen
该功能运行符合预期,与VBA的实现方式一致,以确保更好的兼容性。
例如,若文档包含示例内容“Document”,调用GetRange(0,7)将返回Documen。参考示例:以下两个宏返回相同结果:
VBA
Sub ExtractRange()
Dim doc As Document
Set doc = ActiveDocument
Dim firstParagraph As Paragraph
Set firstParagraph = doc.Paragraphs(1)
Dim range As range
Set range = firstParagraph.range
range.SetRange Start:=0, End:=7
range.Select
End Sub
JS
var oDocument = Api.GetDocument();
var oParagraph = oDocument.GetElement(0);
var oRange = oDocument.GetRange(0, 7);
oRange.Select();