2

WordおよびExcelドキュメントをSQLServerデータベーステーブル内に保存しています。これらのドキュメントは、C#アプリケーションを使用してデータベースから取得され、byte[]配列に配置されます。

Word/Excelドキュメントにある特定の文字列を置き換えたい。利用可能なバイト配列でこれを行うための最良の方法は何ですか?

私はこのようなものを見ていました:

string fileString = System.Text.Encoding.UTF8.GetString(image.ImageObject);

fileString = fileString.Replace("FROM", "TO");

byte[] newImageObject = System.Text.Encoding.UTF8.GetBytes(fileString);
4

3 に答える 3

1

バイトを Word/Excel ファイルとして保存し、オフィス オートメーション ツールを使用して変更を加える必要があると思います。

バイナリ ファイルのバイトを勝手に変更すると、オフセット、チェックサム、CRC チェックが台無しになり、ウイルス対策ソフトウェアが起動される可能性があります。

于 2013-03-04T21:04:31.700 に答える
0

Open XML SDKを使用することをお勧めします。

documentByteArrayライブラリを使用すると、データベースから取得したドキュメントのバイト コンテンツであることを考慮して、Word ドキュメントのテキストを次のように置き換えることができます。

using (MemoryStream mem = new MemoryStream())
{
    mem.Write(documentByteArray, 0, (int)documentByteArray.Length);
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
    {
        string docText = null;
        using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
        {
            docText = sr.ReadToEnd();
        }

        Regex regexText = new Regex("Hello world!");
        docText = regexText.Replace(docText, "Hi Everyone!");

        using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
        {
            sw.Write(docText);
        }
    }
}

上記の例はhereから取得されました。Excel スプレッドシートでも同様のことができます。

于 2013-03-04T21:13:36.040 に答える
0

あなたのアプローチは失敗する可能性があります。

.doc と .xls について話している場合、これらのファイル形式はバイナリであるため、有効な UTF-8ではないバイト シーケンスがバイト ストリームに含まれている可能性が高くなります。

そうでない場合でも、異なる長さの文字列を置き換えると、オフセットと長さフィールドが無効になり、ドキュメントを開くときに失敗します。

一方、.docx と .xslx について話している場合、これらのファイルは実際には圧縮された XML ファイルであり、単純に検索して置換することはできません。検索文字列が XML 要素または属性名 (またはその一部) と一致することを考慮してください。その)。繰り返しますが、置換操作はファイル全体では実行できません。

于 2013-03-04T21:20:01.410 に答える