将数据集导出到Excel 2007 EPPlus

维尼修斯·卡诺(Vinicius Cano)

我正在尝试将DataSet导出到excel 2007,我无法使用正常的代码,该代码用于使用诸如“ Response.ContentType =“ application / ms-excel”; 如果我对xls使用mime类型,则在我尝试导出时会收到警告,由于客户端的缘故,我不会出现此错误,所以我开始使用EPPlus,但是现在我期望值下降了,例如“ ArgumentNullException未得到处理用户代码”。当我调试时,我注意到btnExportClick方法中的变量ds为null,我认为错误在哪里,但是我不知道在哪里,完整的代码是:

namespace PortalFornecedores
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                this.BindGrid();
            }
        }


        public void BindGrid()
        {
            using (DataSet ds = new DataSet())
            {
                ds.ReadXml(Server.MapPath("~/Customers.xml"));
                GridFornecedor.DataSource = ds;
                GridFornecedor.DataBind();
            }
        }




        public void btnExportClick(object sender, EventArgs e)
        {
            DataTable ds = GridFornecedor.DataSource as DataTable;
            ExportExcel(ds);


        }


        public void ExportExcel(DataTable ds)
        {

            using (ExcelPackage pck = new ExcelPackage())
            {
                //Create the worksheet
                ExcelWorksheet ws = pck.Workbook.Worksheets.Add("SearchReport");

                //Load the datatable into the sheet, starting from cell A1. Print the column names on row 1
                ws.Cells["A1"].LoadFromDataTable(ds, true);

                //prepare the range for the column headers
                string cellRange = "A1:" + Convert.ToChar('A' + ds.Columns.Count - 1) + 1;

                //Format the header for columns
                using (ExcelRange rng = ws.Cells[cellRange])
                {
                    rng.Style.WrapText = false;
                    rng.Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;
                    rng.Style.Font.Bold = true;
                    rng.Style.Fill.PatternType = ExcelFillStyle.Solid; //Set Pattern for the background to Solid
                    rng.Style.Fill.BackgroundColor.SetColor(Color.Gray);
                    rng.Style.Font.Color.SetColor(Color.White);
                }

                //prepare the range for the rows
                string rowsCellRange = "A2:" + Convert.ToChar('A' + ds.Columns.Count - 1) + ds.Rows.Count * ds.Columns.Count;

                //Format the rows
                using (ExcelRange rng = ws.Cells[rowsCellRange])
                {
                    rng.Style.WrapText = false;
                    rng.Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;
                }

                //Read the Excel file in a byte array
                Byte[] fileBytes = pck.GetAsByteArray();

                //Clear the response
                Response.Clear();
                Response.ClearContent();
                Response.ClearHeaders();
                Response.Cookies.Clear();

                //Add the header & other information
                Response.Cache.SetCacheability(HttpCacheability.Private);
                Response.CacheControl = "private";
                Response.Charset = System.Text.UTF8Encoding.UTF8.WebName;
                Response.ContentEncoding = System.Text.UTF8Encoding.UTF8;
                Response.AppendHeader("Content-Length", fileBytes.Length.ToString());
                Response.AppendHeader("Pragma", "cache");
                Response.AppendHeader("Expires", "60");
                Response.AppendHeader("Content-Disposition",
                "attachment; " +
                "filename=\"ExcelReport.xlsx\"; " +
                "size=" + fileBytes.Length.ToString() + "; " +
                "creation-date=" + DateTime.Now.ToString("R") + "; " +
                "modification-date=" + DateTime.Now.ToString("R") + "; " +
                "read-date=" + DateTime.Now.ToString("R"));
                Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

                //Write it back to the client
                Response.BinaryWrite(fileBytes);
                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. */`enter code here`
        }
    }
厄尼·S

夫妻的事。这不是一个真正的epplus问题,更一般的网络。

首先,您将网格数据源设置为此处的数据集:

using (DataSet ds = new DataSet())
{
    ds.ReadXml(Server.MapPath("~/Customers.xml"));
    GridFornecedor.DataSource = ds;

但稍后将其转换为dataTABLE:

DataTable ds = GridFornecedor.DataSource as DataTable;

当您应该先转换为数据集然后获取其Table集合的第一个表时。

但这仍然不能解决问题,因为您有一个在回发中不存在的类级对象。您需要使用以下会话或viewstate变量:

public void BindGrid()
{
    using (DataSet ds = new DataSet())
    {
        ds.ReadXml(Server.MapPath("~/Customers.xml"));
        GridFornecedor.DataSource = ds;
        GridFornecedor.DataBind();
        ViewState["GridDataSource"] = ds;
    }
}


public void btnExportClick(object sender, EventArgs e)
{
    //DataTable ds = GridFornecedor.DataSource as DataTable;
    var ds = ViewState["GridDataSource"] as DataSet;
    var dt = ds.Tables[0];
    ExportExcel(dt);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将GridView导出到Excel 2007

来自分类Dev

EPPlus将模型导出到Excel:System.NullReferenceException

来自分类Dev

如何使用epplus将过滤的datagridview导出到excel

来自分类Dev

使用 EPPlus 在 ASP.net 中将 Gridview 导出到 Excel

来自分类Dev

EPPlus和数据比较

来自分类Dev

EPPlus和数据比较

来自分类Dev

如何使用EPPLUS导出到Excel时删除“数字存储为文本”提示?

来自分类Dev

2007 Excel斜角文本

来自分类Dev

Excel 2007高级筛选

来自分类Dev

Excel 2007中的指数

来自分类Dev

Excel 2007上的IF / AND公式

来自分类Dev

使用epplus创建Excel图形

来自分类Dev

EPPlus-读取Excel表

来自分类Dev

如何在C#中将文件导出到Excel 2007+

来自分类Dev

使用EPPlus加载大量Excel数据

来自分类Dev

将Office 365自动填充电子邮件地址导出到Outlook 2007

来自分类Dev

将数据导出到Excel

来自分类Dev

EPPlus Excel导出-每个记录的所有数据值都进入A列吗?

来自分类Dev

使用EPPLUS导出excel时,如何根据该值动态设置列数据的前景色?

来自分类Dev

Excel 2007中的扩展查询

来自分类Dev

转到Excel 2007中的行

来自分类Dev

Excel 2007、2010继续减法?

来自分类Dev

展平Excel公式(2007)

来自分类Dev

水平索引匹配Excel 2007

来自分类Dev

Excel 2007中的列操作

来自分类Dev

从Excel 2007删除输入字段

来自分类Dev

Excel 2007“任意” #NAME?失误

来自分类Dev

Excel 2007 VBA暂停宏

来自分类Dev

将数据从数据集导出到Excel后如何下载Excel文件?