InDesign中Python脚本访问索引超255时报索引越界问题求助
解决InDesign Python脚本访问DOM对象索引超过255报错的问题
这是win32com操作InDesign COM对象时的典型限制——默认情况下,win32com会把Characters、Words这类集合截断为前256个元素(索引0到255),哪怕实际元素数量远多于此。
两种可行的解决办法
1. 使用COM集合的Item()方法
直接调用集合的原生Item()方法指定索引,绕过win32com的预加载截断:
import win32com.client app = win32com.client.Dispatch('InDesign.Application.CC.2014') # 通过Item()访问索引300的字符 app.Select(app.ActiveDocument.Stories[0].Characters.Item(300))
2. 将集合转换为Python列表
把整个Characters集合一次性转成Python列表,之后即可用任意下标访问:
import win32com.client app = win32com.client.Dispatch('InDesign.Application.CC.2014') # 转换为Python列表 chars_list = list(app.ActiveDocument.Stories[0].Characters) # 直接用下标访问目标元素 app.Select(chars_list[300])
问题原因
win32com为了初始性能优化,处理InDesign COM集合时只会预加载前256个元素。直接用[索引]访问时只能触及预加载的部分;而Item()方法是直接向InDesign的COM接口请求指定索引的元素,不受预加载限制。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

