1

Web サイトのデータから Excel ファイルを作成する際に、他人のコードを修正しようとしています。データがアップされ、ユーザーはサイトのさまざまなチェック ボックスなどを使用して、データの特定の部分を表示または非表示にすることができます。ユーザーが表示したいものを取得したら、それを Excel ファイルにエクスポートするオプションがあります。ファイルが開かれるまで、すべてが正常に機能します。ファイルを開くと、次のエラーが表示されます。

開こうとしているファイル 'filename.xls' は、ファイル拡張子で指定された形式とは異なります。ファイルを開く前に、ファイルが破損しておらず、信頼できるソースからのものであることを確認してください。今すぐファイルを開きますか?

これで、[はい] をクリックしてもファイルが開き、データは適切にフォーマットされます。ただし、このエラーはユーザー フレンドリーでも見栄えもよくないため、このエラーが表示されないようにしたいと考えています。エクスポートに使用されるコードは次のとおりです。

        // perform export
        System.Web.HttpResponse objResponse = System.Web.HttpContext.Current.Response;
        objResponse.Clear();
        objResponse.Charset = "";
        objResponse.Buffer = true;
        objResponse.AddHeader("Content-Disposition", String.Format("attachment;filename={0}", "filename.xls"));
        objResponse.ContentType = "application/vnd.ms-excel";
        System.IO.StringWriter objStringWriter = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter objHTMLWriter = new System.Web.UI.HtmlTextWriter(objStringWriter);
        m_objDataTable.RenderControl(objHTMLWriter);
        objResponse.Write(objStringWriter);
        objResponse.End();

どんな助けでも大歓迎です。

4

1 に答える 1

0

最初のステップは、結果のファイルをテキストのみのエディターで見て、何が出力されているかを把握することだと思います。
XLS 拡張機能は、XLSX などの圧縮をサポートしていません。
XLS 拡張機能は、HTML (非常に遅い)、タブ区切りデータ (はるかに高速)、およびネイティブの Excel スプレッドシートをサポートしています。
ざっと見ただけで、何が出力されているかがわかります。
個人的な好みは、データの内容に応じて、タブ区切りのテキストのみまたはカンマ区切りの csv です。
Excel オブジェクトを使用しているため、出力はネイティブの Excel であると思われますが、HTMLTextWriter は、それがテーブルとして出力されていることを教えてくれます。それをテキストとして見ると、有効な HTML ファイルまたは Excel ファイル、またはその両方が混在しているかどうかがわかります。
編集次のトリックは、拡張子を HTML に変更し、ブラウザーで開くことです。エラーがある場合は、データに目に見える不具合が表示されるはずです。データに HTML が含まれている場合、HTML 形式はうまく機能しません。
タブ区切りの出力は HTML を正しく処理しますが、すべてのタブをスペースに変更する必要があり、CSV は複雑な文字列ではうまく機能しません。
XLS へのネイティブ エクスポートを 10 年以上行っていません。これは、セルに計算を追加したかったためです。(VB6でした)

于 2013-07-10T15:33:40.653 に答える