-2

グリッドビューとボタンがあるasp.netページがあります。ボタンクリックイベントで、グリッドビューをExcelにエクスポートするコードを記述しました。これは非常に正常に機能しています。しかし、エクスポートされたExcelファイルを開こうとすると、次のようなダイアログボックスが表示されます。

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

それだけでなく、私はそのExcelファイルをGmailの添付ファイルとして送信し、モバイルで開こうとしましたが、その時点でhtmlファイルとして開きます。クライアントはモバイルを使用してメールを表示するため、これを行うにはどうすればよいですか。

4

3 に答える 3

2

Excelファイル名拡張子を使用してCSVまたはHTMLではなく実際のExcelファイルを作成することをお勧めします。

これを実現する簡単な方法の1つは、ClosedXMLを使用することです。

これを行うには、CodeplexサイトからClosedXML.dllとDocumentFormat.OpenXml.dllをダウンロードし、ASP.NETプロジェクトの参照として追加します。次に、ボタンクリックイベントで、Excelブックを設定し、DataTableバインドしているものと同じワークシートからワークシートを作成しGridView、ワークブックファイルをHTTP応答に保存するだけです。このようなもの:

var wb = new ClosedXML.Excel.XLWorkbook();
DataTable dt = GetTheDataTable();
dt.TableName = "This will be the worksheet name";

wb.Worksheets.Add(dt);

Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=\"FileName.xlsx\"");

using (var ms = new System.IO.MemoryStream()) {
    wb.SaveAs(ms);
    ms.WriteTo(Response.OutputStream);
    ms.Close();
}

Response.End();

ライセンスの制限が少なく、ドキュメントが素晴らしく、開発者が親切でフレンドリーで、プロジェクトが現在非常に活発であるため、他の選択肢よりもClosedXMLを使用します。

于 2012-08-08T12:53:16.897 に答える
1

ボタンクリックイベントで:

        protected void btnExcel_Click(object sender, ImageClickEventArgs e)
    {
        //export to excel
        Response.Clear();
        Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
        Response.Charset = "";

        // If you want the option to open the Excel file without saving then
        // comment out the line below
        // Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.ContentType = "application/vnd.xls";
        System.IO.StringWriter stringWrite = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
       //GV is the ID of gridview
        GV.RenderControl(htmlWrite);
        Response.Write(stringWrite.ToString());
        Response.End();
    }

また、ページのコード ビハインドでこのメソッドをオーバーライドします。

    public override void VerifyRenderingInServerForm(Control control)
{
    /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
       server control at run time. */
}
于 2012-08-08T10:42:00.097 に答える
0

Excelにエクスポートするときは、カンマ区切りのファイルを作成し、Excelファイル拡張子を付けただけです。二重引用符付きのコンマを使用して区切り始めたときに、そのメッセージは消えました。

1、2、3ではなく「1」、「2」、「3」

于 2012-08-08T10:32:43.287 に答える