5

グリッドビューのデータをエクスポートするExcelファイルを保存したい。グリッドビューデータをExcelにエクスポートするコードを記述しましたが、エクスポートしたファイルを保存する方法がわかりません。

以下は、gridviewをExcelにエクスポートするための私のコードです:

Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("content-disposition", "attachment;filename=MyFiles.xls");
Response.Charset = "";
this.EnableViewState = false;
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);
gvFiles.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
4

7 に答える 7

11

あなたはこれを行うことができます:

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

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

    // Write the rendered content to a file.
    string renderedGridView = sw.ToString();
    System.IO.File.WriteAllText(@"C:\Path\On\Server\ExportedFile.xlsx", renderedGridView);
}
于 2012-05-02T11:11:07.157 に答える
2

これはあなたを助けるかもしれません//

protected void exporttoexcel_Click(object sender, EventArgs e)
{
    Response.Clear();

    Response.AddHeader("content-disposition", "attachment;filename=" attachment" + ".xls");

    Response.Charset = "";

    // If you want the option to open the Excel file without saving than

    // 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);

    GridView1.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-05-02T18:34:40.710 に答える
1
public partial class exportgridtoexcel : System.Web.UI.Page
{
    SqlConnection con=new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString.ToString());
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            GetData();
        }
    }
    public void GetData()
    {
        SqlDataAdapter sda = new SqlDataAdapter("select * from EmpData", con);
        DataTable dt = new DataTable();
        sda.Fill(dt);
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }

    protected void btnDownload_Click(object sender, EventArgs e)
    {
        GetData();
        exporttoexcel("Report.xls", GridView1);
        GridView1 = null;
        GridView1.Dispose();



    }
    public void exporttoexcel(string filename,GridView gv)
    {
        Response.ClearContent();
        Response.AddHeader("content-disposition", "attachment;filename=" + filename);
        Response.ContentType = "applicatio/excel";
        StringWriter sw = new StringWriter(); ;
        HtmlTextWriter htm=new HtmlTextWriter(sw);
        gv.RenderControl(htm);
        Response.Write(sw.ToString());
        Response.End();
    }
    public override void VerifyRenderingInServerForm(Control control)
    {

    }
}

}

于 2013-03-31T06:43:08.970 に答える
0

エクスポートされたファイルを保存する方法を尋ねています...コードは、グリッドビュー(HTML)のレンダリングされたコンテンツを応答に配置します。この場合、ブラウザ(クライアント側)はこの応答を受信し、保存先を尋ねるダイアログをポップアップ表示します。したがって、ブラウザはファイルを保存します。

サーバー側で保存する場合は、レンダリングされたグリッドビューを応答に含めないでください。代わりに、ローカルハードディスク上のファイルに書き込みます(上記の回答のように)。

独自の開発マシン以外の環境(つまり、実稼働環境)では、ASP.NETワーカープロセスに、ハードディスク上の指定された場所に書き込むための十分なアクセス権がない場合があることに注意してください。その問題に対処するいくつかの答えがあります:

ASP.netユーザーアカウントのアクセス許可
ASP.NET+パスへのアクセスが拒否され
ましたSystem.UnauthorizedAccessException:パスへのアクセスが拒否されました

于 2012-05-02T10:40:14.470 に答える
0

リンクをたどった:C#ExcelファイルOLEDB読み取りHTMLインポート

を使用するとExtended Properties=\"HTML Import;HDR=No;IMEX=1 the select * from [tablename]、テーブル名はから返されGetOleDbSchemaTableます。

注:これは通常のExcelをロードしません。そのためExtended Properties=\"Excel 8.0;HDR=No;IMEX=1\に、テーブル名は$記号付きになります。

サンプルコードを確認してください: File.WriteAllText()関数を使用して作成した後、Excelファイルを読み取ることができません

于 2012-08-08T15:19:54.490 に答える
0

ここで解決されたこの問題のもう1つの解決策:http://codentq.wordpress.com/2014/02/13/write-excel-file-from-dataset/

この記事に記載されている方法でグリッドビューデータをデータセットに取得する必要があります:http://codentq.wordpress.com/2014/02/13/get-data-from-grid-to-datatable-or-dataset/

于 2014-02-27T06:59:23.257 に答える
-1

最初にEPPLUSリファレンスライブラリをアプリケーションに追加し、OfficeOpenXmlを使用して追加します。

//ビジネスオブジェクトクラス

クラスbocls{

    string name;

    public string NAME
    {
        get { return name; }
        set { name = value; }
    }
    string id;

    public string ID
    {
        get { return id; }
        set { id = value; }
    }



    public bocls() { }
    public bocls(string name, string id)
    {
        this.name = name;
        this.id = id;         

    }

//エクスポートボタンのクリックイベント

protected void lbtnExport_Click(object sender、EventArgs e){

            List<bocls> list6 =  new List<bocls>();
           //copy the grid view values into list
            list6 = (from row in dataGridView1.Rows.Cast<DataGridViewRow>()
            from cell in row.Cells.Cast<DataGridViewCell>()
            select new 
            {
                //project into your new class from the row and cell vars.
            }).ToList();
    }
            ExcelPackage excel = new ExcelPackage();
            var workSheet = excel.Workbook.Worksheets.Add("Products");
            var totalCols = GridView1.Rows[0].Cells.Count;
            var totalRows = GridView1.Rows.Count;
            var headerRow = GridView1.HeaderRow;
            for (var i = 1; i <= totalCols; i++)
            {
                workSheet.Cells[1, i].Value = headerRow.Cells[i - 1].Text;
            }
            for (var j = 1; j <= totalRows; j++)
            {
                for (var i = 1; i <= totalCols; i++)
                {
                    var item = list6.ElementAt(j - 1);

                    workSheet.Column(1).Width = 13;
                    workSheet.Column(2).Width = 10;

                    workSheet.Cells[j + 1, i].Style.WrapText = true;

                    if (headerRow.Cells[i - 1].Text == "ID")
                        workSheet.Cells[j + 1, i].Value = item.GetType().GetProperty("id").GetValue(item, null);
                    else if (headerRow.Cells[i - 1].Text == "NAME")
                        workSheet.Cells[j + 1, i].Value = item.GetType().GetProperty("name").GetValue(item, null);

                    workSheet.Cells[j + 1, i].Value = workSheet.Cells[j + 1, i].Value.ToString().Replace("<br/>", "");
                }
            }
            using (var memoryStream = new MemoryStream())
            {

                Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                string filename = Guid.NewGuid().ToString() + ".xlsx";
                Response.AddHeader("content-disposition", "attachment;  filename=" + filename);
                excel.SaveAs(memoryStream);   
                //add your destination folder
                FileStream fileStream = new FileStream(@"C:\Users\karthi\Downloads\New folder\" + filename, FileMode.Create,FileAccess.Write,FileShare.Write);
                memoryStream.WriteTo(fileStream);
                fileStream.Close();
                memoryStream.WriteTo(Response.OutputStream);
                memoryStream.Close();
                memoryStream.WriteTo(Response.OutputStream);
                Response.Flush();
                Response.End();
            }

    }
于 2017-06-25T19:36:55.797 に答える