6

C# で odf ファイル (オープン ドキュメント形式) からすべてのテキストを取得する必要があります。AODLライブラリを見つけてインストールしました。AODL のページhttps://wiki.openoffice.orgにアクセスして、必要なタスクを実行する方法の例を見つけましたが、すべて失敗しました。私が想像できない理由で、すべての例は新しいドキュメントを構築し、ドキュメントをロードしてすべてのテキスト (OpenXML のようなもの) を取得する方法の例はありません。私を導くことができる参照を知っていますか?

私の「やってみる」

var doc = new AODL.Document.TextDocuments.TextDocument();
        doc.Load(@"C:\path/to/Sample.odt");

しかし、doc ドキュメントを反復処理する方法がわかりません。

4

1 に答える 1

3

最後に、私は理解しました。これは、すべてのテキストを抽出するために作成したメソッドです。.odt ファイルを構成するすべての部分を把握していないため、完全ではない可能性があります。このメソッドは、ヘッダーとフッター、テキストボックスと段落を取得し、改行セパレーターで連結します。パッケージ マネージャー コンソールからインストールできる AODL パッケージが必要ですPM> Install-Package AODL。そして追加

using AODL.Document.TextDocuments;
using AODL.Document.Content;

あなたのプログラムの一番上に。

/// <summary>
    /// Gets all plain text from an .odt file
    /// </summary>
    /// <param name="path">
    /// the physical path of the file
    /// </param>
    /// <returns>a string with all text content</returns>
    public String GetTextFromOdt(String path)
    {
        var sb = new StringBuilder();
        using (var doc = new TextDocument())
        {
            doc.Load(path);

            //The header and footer are in the DocumentStyles part. Grab the XML of this part
            XElement stylesPart = XElement.Parse(doc.DocumentStyles.Styles.OuterXml);
            //Take all headers and footers text, concatenated with return carriage
            string stylesText = string.Join("\r\n", stylesPart.Descendants().Where(x => x.Name.LocalName == "header" || x.Name.LocalName == "footer").Select(y => y.Value));

            //Main content
            var mainPart = doc.Content.Cast<IContent>();
            var mainText = String.Join("\r\n", mainPart.Select(x => x.Node.InnerText));

            //Append both text variables
            sb.Append(stylesText + "\r\n");
            sb.Append(mainText);
        }




        return sb.ToString();
    }
于 2016-07-13T12:58:39.460 に答える