2

Office Automation を使用して、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行あります。

4

3 に答える 3

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;

これがコードの背後にある天才です。それがどのように機能するかについての詳細な説明については、リンクをたどってください。

于 2012-02-07T20:29:20.177 に答える
1

標準のテキスト.txtファイルを読みたい場合にこれを使用しますこれは、1回の呼び出しでファイルを読むために使用できるものです。

List<string> strmsWord = 
    new List<string>(File.ReadAllLines(yourFilePath+ YourwordDocName));

ループスルーして、返されたアイテムが次のようなものを使用していることを確認したい場合

 foreach (string strLines in strmsWord )
 {
   Console.WriteLine(strLines);
 }     

また

Wordドキュメントがおそらくバイナリ形式であることを完全に忘れたので、これを見て内容をRichTextBoxに読み込んでください。そこから、必要な行番号を取得するか、単語の後にリストにロードできます。このリンクは次のように表示されます。 単語ドキュメントのXMLフォーマットを読みたい場合はWordドキュメントから読む:ここにチェックアウトとWordドキュメントのReadXMLフォーマットに関する良いリンク が あります

このオンネは、コンテンツをクリップボードに読み込むさらに簡単な例です。Word をクリップボードに読み込む

于 2012-02-07T18:05:08.180 に答える
0
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;
于 2013-02-07T10:03:11.513 に答える