如何在MS Word中从行号获取文本
本文关键字:获取 取文本 MS Word | 更新日期: 2023-09-27 18:23:45
是否可以使用办公自动化从MS Word中的给定行号获取文本(行或句子)?我的意思是,如果我能得到给定行号中的文本或作为该行一部分的句子本身,那就没关系了。
我没有提供任何代码,因为我完全不知道如何使用办公自动化读取MS Word。我可以这样打开文件:
var wordApp = new ApplicationClass();
wordApp.Visible = false;
object file = path;
object misValue= Type.Missing;
Word.Document doc = wordApp.Documents.Open(ref file, ref misValue, ref misValue,
ref misValue, ref misValue, ref misValue,
ref misValue, ref misValue, ref misValue,
ref misValue, ref misValue, ref misValue);
//and rest of the code given I have a line number = 3 ?
编辑:为了澄清@Richard Marskell-Drackir的怀疑,尽管MS Word中的文本是一个长串,但办公自动化仍然可以让我们知道行号。事实上,我从另一段代码中得到了行号,比如:
Word.Revision rev = //SomeRevision
object lineNo = rev.Range.get_Information(Word.WdInformation.wdFirstCharacterLineNumber);
例如,Word文件如下所示:
fix grammatical or spelling errors
clarify meaning without changing it correct minor mistakes add related resources or links
always respect the original author
这里有4行。
幸运的是,经过一番史诗般的搜索,我找到了一个解决方案。
object file = Path.GetDirectoryName(Application.ExecutablePath) + @"'Answer.doc";
Word.Application wordObject = new Word.ApplicationClass();
wordObject.Visible = false;
object nullobject = Missing.Value;
Word.Document docs = wordObject.Documents.Open
(ref file, ref nullobject, ref nullobject, ref nullobject,
ref nullobject, ref nullobject, ref nullobject, ref nullobject,
ref nullobject, ref nullobject, ref nullobject, ref nullobject,
ref nullobject, ref nullobject, ref nullobject, ref nullobject);
String strLine;
bool bolEOF = false;
docs.Characters[1].Select();
int index = 0;
do
{
object unit = Word.WdUnits.wdLine;
object count = 1;
wordObject.Selection.MoveEnd(ref unit, ref count);
strLine = wordObject.Selection.Text;
richTextBox1.Text += ++index + " - " + strLine + "'r'n"; //for our understanding
object direction = Word.WdCollapseDirection.wdCollapseEnd;
wordObject.Selection.Collapse(ref direction);
if (wordObject.Selection.Bookmarks.Exists(@"'EndOfDoc"))
bolEOF = true;
} while (!bolEOF);
docs.Close(ref nullobject, ref nullobject, ref nullobject);
wordObject.Quit(ref nullobject, ref nullobject, ref nullobject);
docs = null;
wordObject = null;
这是代码背后的天才。点击链接了解更多关于其工作原理的解释。
如果您想读取标准文本.txt文件,请使用此选项这里有一些东西,你可以用一个调用来读取文件
List<string> strmsWord =
new List<string>(File.ReadAllLines(yourFilePath+ YourwordDocName));
如果你想循环浏览并查看返回的项目使用类似于的东西
foreach (string strLines in strmsWord )
{
Console.WriteLine(strLines);
}
或
我完全忘记了Word文档可能是二进制格式的,所以看看这个,把内容读到RichTextBox中,从那里你可以得到你想要的行号,也可以把它加载到单词后面的列表中。。此链接将向您显示从Word文档中阅读如果您想阅读单词Document的XML格式:这里还有一个很好的结账链接Word文档的ReadXML格式
这个onne是一个更简单的例子,可以将内容读取到剪贴板中将Word加载到剪贴板
var word = new Word.Application();
object miss = Missing.Value;
object path = @"D:'viewstate.docx";
object readOnly = true;
var docs = word.Documents.Open(ref path, ref miss, ref readOnly, ref miss,
ref miss, ref miss, ref miss, ref miss, ref miss,
ref miss, ref miss, ref miss, ref miss, ref miss,
ref miss, ref miss);
string totaltext = "";
object unit = Word.WdUnits.wdLine;
object count = 1;
word.Selection.MoveEnd(ref unit, ref count);
totaltext = word.Selection.Text;
TextBox1.Text = totaltext;
docs.Close(ref miss, ref miss, ref miss);
word.Quit(ref miss, ref miss, ref miss);
docs = null;
word = null;