这个可能有点愚蠢,但我真的需要它。我有5个表的文档,每个表都有一个标题。标题是一个没有特殊样式的常规文本,没有。我需要从那些表+加上标题中提取数据。 目前,使用MS interop我能够使用以下内容迭代每个表的每个单元格:
app.Tables[1].Cell(2, 2).Range.Text;
但现在我正努力想弄清楚如何将文本放在桌面上方。
这是一个截图:
对于第一张桌子我需要得到“我需要这个文字”而对于桌子我需要得到:“而且这个还请”
所以,基本上我需要在每张桌子前面的最后一段。有关如何做到这一点的任何建议?
答案 0 :(得分:10)
Mellamokb在他的回答中给了我一个提示,以及如何搜索段落的一个很好的例子。在实施他的解决方案时,我遇到了功能“上一步”,它正是我们所需要的。以下是如何使用它:
wd.Tables[1].Cell(1, 1).Range.Previous(WdUnits.wdParagraph, 2).Text;
Previous接受两个参数。首先 - 您要从此列表中找到的单位:http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.wdunits.aspx
第二个参数是您想要计算的单位数。在我的情况下2工作。它看起来应该是因为它在桌子前面,但是有一个,我有一个奇怪的特殊字符:♀
看起来像女性指示器。
答案 1 :(得分:3)
您可以尝试一下这方面的内容。我将段落与表格的第一个单元格进行比较,当匹配时,将上一段作为表格标题。当然,这只有在表格的第一个单元格包含在文档中的其他位置找不到的唯一段落时才有效:
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;
}
示例输出:
Header: I NEED THIS TEXT
Header: AND THIS ONE also please