0

3 つのワークシートを含む Excel スプレッドシートをプログラムで作成する必要があります。

Sheet1の場合、Gridviewをエクスポートしようとしています...すべてのフォーマットを使用して.Http.Responseを使用せずにエクスポートしようとしています.以降のすべてのコード実行を停止します。

Gridview を Excel ワークブックに直接書き込むことができれば、コーディング ルーチンを続行してファイルを再度開き、プログラムでシート 2 と 3 を追加できるはずです。

このコードは機能します...ちょっと...ほとんど!

private void ExportGridView(GridView myGrid)
{
    System.IO.StringWriter sw = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);

    // Render grid view control.
    myGrid.RenderControl(htw);

    // Write the rendered content to a file.
    string renderedGridView = sw.ToString();

    File.WriteAllText("C:\\TimeSheets\\ExportedFile.xlsx", renderedGridView);

}

コーディングをやめて TimeSheets ディレクトリに移動すると、"ExportedFile.xlsx" が "Microsoft Office Excel 2007 Workbook" として表示され、Excel プログラムで適切にフォーマットされた Gridview を開いて表示するのに問題はありません。

しかし、C# でコーディングを続け、コード ビハインドで同じファイルを開こうとすると、「ファイルに破損したデータが含まれています」というエラーが表示されます。

Excel を使用して「ExportedFile.xlsx」ファイルを表示しているときに「名前を付けて保存」を実行すると、ファイル名が引用符で囲まれ、ファイルの種類がデフォルトで [Web ページ htm/html として保存] になっていることがわかります。ファイル名から引用符を削除し、ファイルの種類を「.xlsx」に設定してこれらの値をリセットすると、その結果のファイルを分離コードで読み取ることができます。

誰でも私に解決策を提供できますか?

ジョー。

4

2 に答える 2

0

「コードビハインドで同じファイルを開こうとする」正確な方法はわかりませんが、実際のExcelファイルとして開こうとしている場合、それが問題になる可能性があります.

HtmlTextWriter を使用して「Excel ファイルとして」保存すると、実際には Excel が読み取れる html ファイルとして保存されます。拡張子を .html に変更してブラウザで開いてみると、私の言いたいことがわかるでしょう。これが、Excel がデフォルトで「Web ページとして保存」になっている理由です。

したがって、ロード コードがそれを Excel ファイルのように扱う場合、問題が発生するのはそのためです。ロードコードを投稿していないため、確認するのは困難です。

于 2013-10-04T15:02:04.030 に答える