当前位置:  开发笔记 > 编程语言 > 正文

在EPPlus导出中检测数据表日期字段和强制日期格式

如何解决《在EPPlus导出中检测数据表日期字段和强制日期格式》经验,为你挑选了1个好方法。

我的页面上有一个按钮,当点击时将数据从gridview导出到excel.

protected void btExport_Click(object sender, EventArgs e)
{
    Response.Clear();
    Response.Charset = "";
    Response.ContentEncoding = System.Text.Encoding.UTF8;
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    Response.AddHeader("content-disposition", "attachment;filename=Output.xlsx");

    DataTable dt= gvOutput.DataSource as DataTable;

    ExcelPackage pck = new ExcelPackage();
    using(pck)
    {
      ExcelWorksheet wsDt = pck.Workbook.Worksheets.Add("Sheet1");
      wsDt.Cells["A1"].LoadFromDataTable(dt, true, TableStyles.None);
      wsDt.Cells[wsDt.Dimension.Address].AutoFitColumns();

      Response.BinaryWrite(pck.GetAsByteArray());

    }

    Response.Flush();
    Response.End();
}

使用上面的代码可以正常工作,但是日期字段被格式化为整数.我理解特定单元格可以被强制使用某种格式,但我的问题是日期列会随着gridview的数据集是动态的而改变.

我需要一种方法来动态识别哪一列是日期,并强制该列的格式为日期时间.

我想它会涉及到这样的IF声明,但我还不清楚要放入什么或放在哪里!

if (dt.Columns[x].DataType == typeof(DateTime))
{ 
    //do something
}

非常感谢任何想法/帮助.



1> Rick S..:

循环遍历DataTable列并确定哪些是DateTime值.如果找到一个,则设置列的格式,如下所示.我没有测试过代码,但它应该是遵循的一般逻辑.

...
wsDt.Cells["A1"].LoadFromDataTable(dt, true, TableStyles.None);
int colNumber = 1;

foreach (DataColumn col in dt.Columns) 
{        
    if (col.DataType == typeof(DateTime))
    { 
         wsDt.Column(colNumber).Style.Numberformat.Format = "MM/dd/yyyy hh:mm:ss AM/PM";
    }    
    colNumber++;      
}

wsDt.Cells[wsDt.Dimension.Address].AutoFitColumns();
Response.BinaryWrite(pck.GetAsByteArray());

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有