C# 获取表MS Word上方的文本
这个可能有点愚蠢,但我真的需要它。我有5个表的文件,每个表有一个标题。标题是没有特殊样式的常规文本,没有任何内容。我需要从这些表+加标题中提取数据。 目前,通过使用MS interop,我可以使用如下方式遍历每个表的每个单元格:C# 获取表MS Word上方的文本,c#,.net,office-interop,office-2007,C#,.net,Office Interop,Office 2007,这个可能有点愚蠢,但我真的需要它。我有5个表的文件,每个表有一个标题。标题是没有特殊样式的常规文本,没有任何内容。我需要从这些表+加标题中提取数据。 目前,通过使用MS interop,我可以使用如下方式遍历每个表的每个单元格: app.Tables[1].Cell(2, 2).Range.Text; 但现在我正努力想办法让文字摆在桌面上。 以下是一个屏幕截图: 对于第一个表,我需要得到“我需要这个文本”,对于第二个表,我需要得到:“这一个也请” 所以,基本上我需要每个表格前的最后一段。有什么
app.Tables[1].Cell(2, 2).Range.Text;
但现在我正努力想办法让文字摆在桌面上。
以下是一个屏幕截图:
对于第一个表,我需要得到“我需要这个文本”,对于第二个表,我需要得到:“这一个也请”
所以,基本上我需要每个表格前的最后一段。有什么建议吗 您可以尝试类似的方法。我将段落与表格的第一个单元格进行比较,当有匹配项时,将前一段作为表格标题。当然,这只有在表格的第一个单元格包含在文档中其他位置找不到的唯一段落时才有效:
var tIndex = 1;
var tCount = oDoc.Tables.Count;
var tblData = oDoc.Tables[tIndex].Cell(1, 1).Range.Text;
var pCount = oDoc.Paragraphs.Count;
var prevPara = "";
for (var i = 1; i <= pCount; i++) {
var para = oDoc.Paragraphs[i];
var paraData = para.Range.Text;
if (paraData == tblData) {
// this paragraph is at the beginning of the table, so grab previous paragraph
Console.WriteLine("Header: " + prevPara);
tIndex++;
if (tIndex <= tCount)
tblData = oDoc.Tables[tIndex].Cell(1, 1).Range.Text;
else
break;
}
prevPara = paraData;
}
Mellamokb在他的回答中给了我一个提示和一个关于如何在段落中搜索的好例子。在实现他的解决方案时,我遇到了“Previous”函数,它正是我们所需要的。以下是如何使用它:
wd.Tables[1].Cell(1, 1).Range.Previous(WdUnits.wdParagraph, 2).Text;
Previous接受两个参数。第一个-要从该列表中查找的单位:
第二个参数是要倒计时的单位数。在我的情况下,2起作用。看起来应该是这样的,因为它就在桌子前面,但是有一个,我得到了一个奇怪的特殊字符:
♀代码>看起来像女性指示器 非常感谢你的帮助!你的解决方案让我想到了如何实现这一点。花了一段时间后,我想出了一个更简单的方法。我想在谷歌上搜索“如何在word中获取表格上方的文本”是完全徒劳的,但我绝望了,我尝试了。这让我找到了解决办法。谢谢对于netoffice,您希望在表上使用previousSibling()方法。
wd.Tables[1].Cell(1, 1).Range.Previous(WdUnits.wdParagraph, 2).Text;