1

[エクスポート] ボタンは次のとおりです。

protected void btnExportToExcel_Click(object sender, EventArgs e)
        {
            var dataTable = (DataTable) Session["finalSchedulesTable"];

            var dummyGv = new GridView {AllowPaging = false, DataSource = dataTable};
            dummyGv.DataBind();
            Response.Clear();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment;filename=Schedules " + DateTime.Now.ToString(CultureInfo.InvariantCulture).Replace("/", "-").Replace(":", "_") + ".xlsx");
            Response.Charset = "";
            //Response.ContentType = "application/vnd.ms-excel";
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

            var sw = new StringWriter();
            var hw = new HtmlTextWriter(sw);

            for (int i = 0; i < dummyGv.Rows.Count; i++)
            {
                //Apply text style to each Row
                dummyGv.Rows[i].Attributes.Add("class", "textmode");
            }

            dummyGv.RenderControl(hw);

            //style to format numbers to string
            const string style = @"<style> .textmode { mso-number-format:\@; } </style>";
            Response.Write(style);
            Response.Output.Write(sw.ToString());
            Response.Flush();
            Response.End();
        }

上記のコードでファイル拡張子を「.xls」に変更すると、プロセスは機能しますが、ファイルを開こうとすると、次のメッセージが表示されます。

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

「はい」と言うと、通常どおりファイルが開きます。

ここでの問題は、このメッセージをポップアップさせたくないということです。これを修正するにはどうすればよいですか?

私がやろうとしているのは、データを Excel にエクスポートし、ユーザーが通常 (警告メッセージなしで) ファイルを開くことを許可することだけです。

4

1 に答える 1

1

私が過去に使用した方法は、EPPlus ライブラリを利用しています: http://epplus.codeplex.com/

それをプロジェクトに含めてから、このメソッドを呼び出して、DataTable を渡すだけです。

public static void DumpExcel(DataTable dataTable)
{
    using (ExcelPackage package = new ExcelPackage())
    {
        ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("DataTable");

        worksheet.Cells["A1"].LoadFromDataTable(dataTable, true);

        for (int i = 1; i <= dataTable.Columns.Count; i++)
        {
            worksheet.Column(i).AutoFit();

            if (dataTable.Columns[i - 1].DataType == System.Type.GetType("System.DateTime"))
            {
                worksheet.Column(i).Style.Numberformat.Format = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
            }
        }

        HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        HttpContext.Current.Response.AddHeader("content-disposition", "attachment;  filename=table.xlsx");
        HttpContext.Current.Response.BinaryWrite(package.GetAsByteArray());
        HttpContext.Current.Response.End();
    }
}

また、ヘッダー行を太字にしたい場合など、スタイリングも簡単に追加できます。

worksheet.Row(1).Style.Font.Bold = true;

私はこれを頻繁に使用していますが、あなたが説明したようなエラーは表示されません

于 2013-07-16T18:13:46.583 に答える