我需要分析Word文档的文本,并在分析器检测到的文本范围内创建书签(几乎像语法检查器)。
我不想使用查找()
实用程序,因为我的需求太具体了。
为此,,
1/检索纯文本文档
我检索文档主要故事的纯文本:
字符串明文=活动文档。范围().文本;
2/分析纯文本并得到结果
我将其发送到analyzer工具,该工具返回一个带位置的标记集合:例如,如果我想在文档文本中检测到模式“my pattern”,analyzer可以将标记返回为{pattern:“my marker”,start:5,end:14}
,其中“start”和“end”是发送的纯文本中模式的字符索引。
3/在文档中显示结果
我从这些标记创建书签。例如,它可能是:
// init a new range and collapse it
Word.Range range = activeDocument.Range(); range.Collapse(WdCollapseStart);
// move character-by-character in the "formatted" text
range.MoveStart(WdUnits.Character, Marker.start ); # Marker.start=5
//set length (end)
range.setRange(range.Start,range.Start+(Marker.End-Marker.Start)); #Marker.end=14
4/结果
4.1全球成果
当文档主故事包含文本、链接、列表、标题时,一切正常:范围定位良好,纯文本索引与格式化文本索引关联。
4.2阵列问题
当一个文档包含一个数组时,范围被错误地定位为几个字符:纯文本索引与格式化文本索引不完全相关。
我发现了这个问题的原因(在其他论坛中解释过):这是由于非打印字符(7),它是纯文本中添加的单元格分隔符。我们可以处理这些字符来计算位置范围,一切正常!
4.3发布内容控件、目录、章节和其他
当文档包含这些元素时,范围也会被错误地定位为几个字符。其他非打印显示为纯文本,但我不明白它的含义以及如何计算位置范围。
通过使用“开发人员”功能区显示单词元素标记
4.4带尾纸的问题
我不知道英语怎么说“page de garde”(法语),我想是“endpaper”:这是第一个有特定页眉、页脚和内容控件的页面:)
当一个文档包含一个尾页时,范围也被错误地定位为几个字符。但是这一次,在纯文本中没有非打印标记。
其他信息,当我用“开发者功能区”显示单词元素标记时
我发现了类似的问题:
我希望我的解释很清楚,你能帮助我理解什么是错误的,或者告诉我一个最好的方法来做到这一点?
谢谢,真的。
它不是真的漂亮,但你可以尝试删除不需要的字符由Regex。例如删除\a
字母(它有代码7):
string j = new string(new char[] { (char)7 });
plainText = Regex.Replace(plainText,string.Format("[{0}]", j), "");
现在,您必须识别其他“邪恶”字符,并将它们添加到字符数组中。如果它有效,您将得到一个字符串,其长度与文档中的Characters
的数量相对应。也许你必须通过实验来修改这段代码。(我不知道你用的是哪种语言-我想是C#。)
更新另一个想法(如果适用于您的analyzer工具):
将问题分解为单个段落:
foreach(Word.Paragraph pg in activeDocument.Paragraphs)
{
Word.Range range = pg.Range();
string text = range.Text;
// your stuff here
}
对于此段落范围对象和包含的文本字符串,您可以执行与处理整个文档对象及其文本相同的操作—只是逐段执行。所有这些段落都可以通过范围和移动操作“寻址”,就像您已经做的那样。我假设有问题的字符在段落的外部或末尾,因此它们不会影响这些段落内部的字符计数。
因为我不能复制你所说的终稿,所以我不能验证它。此外,我不知道页面标题和目录等特殊文本范围是否被段落覆盖。但至少你可以把你的问题缩小到更小的范围。我觉得值得一试。
嗨,我需要移动每行(扫描)中的一个单元格范围,这些单元格包含特定列(在我的情况下可以是任何列,但在我的代码中是coln“e”)中的一个单元格,该值以文本字符串L开始。以下是我所尝试的(我是VBA新手)。在本例中,我希望将移动到,其中是行号。
问题内容: 我在iPhone上的UIWebView中将一些简单样式的文本显示为html。它基本上是一系列段落,偶尔带有强或强调的短语。在运行时,我需要将样式应用于文本范围。 有几种类似的情况,其中一种是突出显示搜索结果。如果用户搜索了“某物”,我想更改单词出现后的背景颜色,然后再恢复原始背景。 是否可以使用javascript将样式应用于文本范围?其中一个关键部分是能够取消设置样式。 似乎有两种可
我正在将Office Interop与MS Word(Microsoft.Office.Interop.Word)和Microsoft一起使用。办公室工具。Word可在Word加载项中修改Word文档。我有一个包含我要编辑的特定文本的范围。 当我更新Text对象时,Range的段落格式将被重置,特别是对齐和左键。我可以在临时变量中保存对齐和左缩进并重置它们,但这并不理想。是否有一种方法来阻止段落格
问题内容: 为什么花括号没有在Java中定义单独的本地范围?我期望这是主要花括号语言(C,C ++,Java,C#)所共有的功能。 问题答案: 它们确实定义了单独的局部作用域,但是您仍然不能从父作用域中屏蔽局部变量(但是您当然可以屏蔽实例变量)。 但是您可以定义新变量(使用不同的名称),并且它们的范围将限于括号内。
问题内容: 为什么使用lambda函数来获取值列表i = 4。在调用lambda期间,不存在封闭范围。函数f已经完成工作并返回了控制(变量i不存在)。 问题答案: Python使用闭包捕获对原始变量的引用。这些对象保留对名称的引用,可以通过该引用访问值。这意味着变量在完成后将继续存在。 您可以在lambda对象的元组中内省此闭包;函数具有相同的属性: 这也是列表中 所有 lambda 都引用val
问题内容: 我最近开始学习python3。 在 python 2 中,可以使用函数来分配列表元素。 如使用功能时在 python 3 中一样 为什么会这样呢? python为什么要进行此更改? 是恩赐还是祸根? 问题答案: Python 3 在很多地方使用了 迭代器 ,而 python 2 使用了 列表 。文档给出了详细的解释,包括对的更改。 优点是,如果您使用大范围的迭代器或映射, Python