将gridview导出到Excel,页面方向设置为横向?

时间:2016-06-23 06:07:42

标签: c# asp.net excel gridview

没有找到任何好的解决方案,可以使用以下选项将GridView导出到Excel:

  1. 页面方向设置为横向
  2. 边距正常
  3. 所有列适合一页
  4. 导出到Excel的现有代码如下

    private void ExportToExcel(GridView grdGridView)
        {
            DataTable dt = Whatever();             
            grdGridView.AllowPaging = false;
            grdGridView.Columns[13].Visible = false;
            grdGridView.DataSource = dt;
            grdGridView.DataBind();
            string attachment = "attachment; filename=ExcelSheet1.xls";
            Response.ClearContent();
            Response.AddHeader("content-disposition", attachment);
            Response.ContentType = "application/ms-excel";
            StringWriter sw = new StringWriter();
            HtmlTextWriter htw = new HtmlTextWriter(sw);         
            HtmlForm frm = new HtmlForm();                        // Create a form to contain the grid
            grdGridView.Parent.Controls.Add(frm);
            frm.Attributes["runat"] = "server";
            frm.Controls.Add(grdGridView);
            frm.RenderControl(htw);
            Response.Write(sw.ToString());
            Response.End();
            }
    }
    

    为了实现所有这些目标,最好的方法是导出到Excel?我是否需要使用某些库或报表查看器等其他工具?有可能吗?

1 个答案:

答案 0 :(得分:-1)

找到解决方案

下载epplus库。

using OfficeOpenXml;

   private void ExportToExcel()
    {

        using (ExcelPackage objExcelPackage = new ExcelPackage())
        {

                //Create the worksheet    
                ExcelWorksheet objWorksheet = objExcelPackage.Workbook.Worksheets.Add("ExcelSheet1");

            DataTable dtQuoteComparison = dt   //Load the datatable into the sheet, starting from cell A1. Print the column names on row 1    
            objWorksheet.Cells["A1"].LoadFromDataTable(dt, true);


            var start = objWorksheet.Dimension.Start;
            var end = objWorksheet.Dimension.End;
            for (int row = start.Row+1; row <= end.Row; row++) //iterate through rows
            {                    
               objWorksheet.Cells[rowStart, colStart, rowEnd,colEnd].WhateverProperty=value; 
            }
            objWorksheet.PrinterSettings.Orientation = eOrientation.Landscape;
            objWorksheet.PrinterSettings.FitToWidth = 1;
            //Write it back to the client    
            if (System.IO.File.Exists(filepath))
                System.IO.File.Delete(filepath);

            //Create excel file on physical disk    
            FileStream objFileStrm = System.IO.File.Create(filepath);
            objFileStrm.Close();

            //Write content to excel file    
            System.IO.File.WriteAllBytes(filepath,objExcelPackage.GetAsByteArray());
        }
    }

现在我遇到的问题是即使在设置

之后,所有适合一页的列也无法正常工作
 objWorksheet.PrinterSettings.FitToWidth = 1;