6

.docx ファイルをバイト配列として取得しています。次に、上記のバイト配列をデータ パラメータとして Doc の read() 関数を呼び出そうとしていますが、認識できないファイル拡張子エラーが発生しています。

次の (c#) コードでバイト配列を取得します。

    WebClient testWc = new WebClient();
    testWc.Credentials = CredentialCache.DefaultCredentials;
    byte[] data = testWc.DownloadData("http://localhost/Lists/incidents/Attachments/1/Testdocnospaces.docx");

この時点で、バイト配列を .docx ファイルとして出力すると、プログラムでファイルを正しく開いたり保存したりできます。このため、バイト配列は正しく取得されていると思います。以下は、.docx ファイルを出力するという意味のサンプルです。

    Response.ClearHeaders();
    Response.Clear();
    Response.AppendHeader("Content-Disposition", "attachment;Filename=test.docx");
    Response.BinaryWrite(data);
    Response.Flush();
    Response.End();

ただし、バイト配列を Doc に読み込もうとすると、次のようになります。

    Doc doc = new Doc();
    XReadOptions xr = new XReadOptions();
    xr.ReadModule = ReadModuleType.MSOffice;
    doc.Read(data, xr);

私のプログラムは、上記のコードの最後の行でエラーになり、「FileExtension '' was invalid for ReadModuleType.MSOffice.」がスローされます。</p>

Doc.Read() 関数は、通常はファイルの種類を見つける場所で空の文字列を見つけているようです。また、このマシンには Office 2007 がインストールされています。

4

1 に答える 1

7

ファイルバイトのファイル拡張子がわかっている場合 (そうするべきです)、次の方法で問題を解決できます。

Doc doc = new Doc();
string extension = Path.GetExtension("your file name/path").Substring(1).ToUpper();
XReadOptions opts = new XReadOptions();
opts.FileExtension = extension;
doc.Read(fileBytes, opts);

このアプローチは私にとってはうまくいきました。正しいファイル拡張子を指定すると、XReadOptions オブジェクトの ReadModule プロパティを設定する必要がなくなります。ToUpper() は必須ではありません。

于 2013-02-18T03:02:28.613 に答える