使用 EPPlus 将 DataTable 导出到 Excel

     2023-02-22     93

关键词:

【中文标题】使用 EPPlus 将 DataTable 导出到 Excel【英文标题】:Export DataTable to Excel with EPPlus 【发布时间】:2012-11-20 02:54:06 【问题描述】:

我想使用 EPPlus 将数据表导出到 Excel 文件。该数据表具有 int 类型的属性,因此我希望 Excel 文件中的格式相同。

有人知道如何将这样的 DataTable 导出到 Excel 吗?

【问题讨论】:

【参考方案1】:

前言

在 v5 中,EPPlus 切换到付费许可模式用于商业用途。要在非商业环境中使用 v5,您需要将此静态代码行放在可以运行的位置:
ExcelPackage.LicenseContext = LicenseContext.NonCommercial
如果您在商业上使用它,您的公司可以获得许可证或使用 v4.5.3.3(它在 netcore/net5 中工作),这是最后一个可以在商业上免费使用的版本

以下代码适用于 4.5.3.3

C#

DataTable 到 Excel,使用列名作为 Excel 标题。

之后它还会遍历表格并设置任何 DateTime 列,以便它们在 Excel 中显示为日期,而不是像 45123 这样的数字

        DataTable dt = ...;
        string sheetName = ...;
        string dateFormat = "yyyy-MM-dd HH:mm:ss";

        using var p = new ExcelPackage();
        var ws = p.Workbook.Worksheets.Add(sheetName);
        ws.Cells["A1"].LoadFromDataTable(dt, PrintHeaders: true);
        for (int c = 0; c < dt.Columns.Count; c++)
        
            if (dt.Columns[c].DataType == typeof(DateTime))
            
                ws.Column(c + 1).Style.Numberformat.Format = dateFormat;
            
        

如果您在例如API 控制器,您可以使用以下内容将其作为下载文件返回:

    string fileName = ...;  //without extension

    return File(p.GetAsByteArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName + ".xlsx");

注意using的范围!它是 C#8 语法,并且一直存在到它声明的块的末尾

VB.NET

同上,但在 VB 中:

    Dim dt As DataTable = ...
    Dim sheetName As String = ...
    Dim dateFormat As String = "yyyy-MM-dd HH:mm:ss"

    Using p As New ExcelPackage()
        Dim ws = p.Workbook.Worksheets.Add(sheetName)
        ws.Cells("A1").LoadFromDataTable(dt, PrintHeaders:=True)

        For c As Integer = 0 To dt.Columns.Count - 1

            If dt.Columns(c).DataType Is GetType(Date) Then
                ws.Column(c + 1).Style.Numberformat.Format = dateFormat
            End If
        Next
    End Using

对于下载,必须放在 using 块内

    Dim fileName As String = ...  'without extension
    Return File(p.GetAsByteArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName & ".xlsx")

【讨论】:

【参考方案2】:

这是一个将数据集导出到 Excel 的 sn-p:

    private static void DataSetToExcel(DataSet dataSet, string filePath)
    
        using (ExcelPackage pck = new ExcelPackage())
        
            foreach (DataTable dataTable in dataSet.Tables)
            
                ExcelWorksheet workSheet = pck.Workbook.Worksheets.Add(dataTable.TableName);
                workSheet.Cells["A1"].LoadFromDataTable(dataTable, true);
            

            pck.SaveAs(new FileInfo(filePath));
        
    

使用语句:

using OfficeOpenXml;
using System.Data;
using System.IO;

【讨论】:

【参考方案3】:

要在浏览器中下载 excelsheet 使用 HttpContext.Current.Response 而不是 Response 否则你会得到 Response is not available in this context. 错误。这是我的代码

public void ExporttoExcel(DataTable table, string filename)

    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.ClearContent();
    HttpContext.Current.Response.ClearHeaders();
    HttpContext.Current.Response.Buffer = true;
    HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
    HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=GridData.xlsx");


    using (ExcelPackage pack = new ExcelPackage())
    
        ExcelWorksheet ws = pack.Workbook.Worksheets.Add(filename);
        ws.Cells["A1"].LoadFromDataTable(table, true);
        var ms = new System.IO.MemoryStream();
        pack.SaveAs(ms);
        ms.WriteTo(HttpContext.Current.Response.OutputStream); 
    

    HttpContext.Current.Response.Flush();
    HttpContext.Current.Response.End();


【讨论】:

对于任何获得“System.Web.HttpContextBase”的人不包含“Current”的定义:要获得对 HttpContext.Current 的引用,您需要将 HttpContext.Current 替换为 System.Web.HttpContext.Current ***.com/questions/19431820/…【参考方案4】:

如果你想在浏览器响应中下载

Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode("Logs.xlsx", System.Text.Encoding.UTF8));

using (ExcelPackage pck = new ExcelPackage())

    ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Logs");
    ws.Cells["A1"].LoadFromDataTable(dt, true);                 
    var ms = new System.IO.MemoryStream();
    pck.SaveAs(ms);
    ms.WriteTo(Response.OutputStream);                          

【讨论】:

感谢sn-p!无需对“Logs.xlsx”进行 urlencode :)【参考方案5】:
using (ExcelPackage pck = new ExcelPackage(newFile))

  ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Accounts");
  ws.Cells["A1"].LoadFromDataTable(dataTable, true);
  pck.Save();

这应该对你有用。如果您的字段定义为 int EPPlus 将正确地将列转换为数字或浮点数。

【讨论】:

导出时如何格式化数据表的表头?? 是的。这工作正常。但是当数据表包含十万行时。这个不工作。 也许您应该针对该特定案例提出一个问题? 标题将包含在@AbhinavRastogi 这已经 9 岁了,仍然可以帮助人们。所以一次又一次地让我惊讶。 @AshokanSivapragasam 谢谢你提醒我这一点!

使用 EPPLUS 从列表导出到 Excel

】使用EPPLUS从列表导出到Excel【英文标题】:exporttoExcelfromalistwithEPPLUS【发布时间】:2016-09-1512:42:43【问题描述】:我正在尝试使用EPPLUS将列表导出到c#中的Excel,当我执行程序时不要给我错误,但是当我打开Excel时,我发现这不... 查看详情

使用 EPPlus 时如何设置列类型

...3:39【问题描述】:我使用EPPlus生成Excel文件,在DAL中填充DataTable,将数据填充到表中,并将表传递到表示层。从那里我使用LoadFromDataTable()方法生成Excel文件。一切正常,除了我想将列的类型之一设置为Date。我尝试将我的DataTable 查看详情

使用 EPPlus 库从 SQL Server 导出到 Excel 时出现“内存不足”异常

】使用EPPlus库从SQLServer导出到Excel时出现“内存不足”异常【英文标题】:"OutOfMemory"exceptionwhileexportingfromSQLServertoExcel,usingEPPluslibrary【发布时间】:2012-12-1613:53:17【问题描述】:我正在使用EPPlus.NET库将数据从SQLServer导出... 查看详情

使用 NPOI 将 Excel 导出到 DataTable

】使用NPOI将Excel导出到DataTable【英文标题】:exportExceltoDataTableusingNPOI【发布时间】:2012-11-1117:09:49【问题描述】:我想使用NPOI读取ExcelTables2010xlsx,然后将数据导出到DataTables,但不知道如何使用它。谁能逐步告诉我如何将Excel导... 查看详情

导出excel之epplus使用教程1(基本介绍)(代码片段)

...sp; 目前Epplus的介绍中文资料很少,我也一直在摸索中使用它,以下是我在使用过程中得到的经验,写出来供大家参考。本系列共4章:   导出Excel之Epplus使用教程1(基本介绍)   导出Excel之Epplus使用教程... 查看详情

在 c# 中使用 Open Xml SDK 将 DataTable 导出到 Excel

】在c#中使用OpenXmlSDK将DataTable导出到Excel【英文标题】:ExportDataTabletoExcelwithOpenXmlSDKinc#【发布时间】:2012-08-0418:42:59【问题描述】:我的程序能够将一些数据和DataTable导出到Excel文件(模板)在模板中,我将数据插入到一些占位... 查看详情

epplus:导出excel

看到其它大神的Epplus导出Excel,结合写出符合自己需求的将导出数据到Excel,给其它人参考一下,也可以学习http://www.cnblogs.com/caofangsheng/p/6149843.html#3576824灰太狼的梦想(大神)的教程。视图:1<inputtype="button"value="订单导出"class=... 查看详情

导出excel之epplus使用教程4(其他设置)

导出Excel之Epplus使用教程1(基本介绍) 导出Excel之Epplus使用教程2(样式设置)  导出Excel之Epplus使用教程3(图表设置)   导出Excel之Epplus使用教程4(其他设置) 1、嵌入VBA代码 首先将vba代码保存成tx... 查看详情

使用epplus以及excel将模板导出excel(代码片段)

1、核心逻辑(为了测试方便,路径直接写死了):publicstaticvoidTemplateWrite<T>(List<T>datas,intstartRow=2,stringtargetPath=@"D:导出excel测试.xlsx",stringtemplatePath=@"D:githubDemoNetCoreDemosrcExcelDemoTemplate emplate.xlsx")varstream=FileToStream(templatePath);... 查看详情

Epplus 使用列名查找列

...我事先不知道这些列的索引,我只知道标题标题。1-我从DataTable加载excelvartemplateXls=newExcelPackage();varsheet=templateXls.Workbook.Wo 查看详情

c#npoi导出excel和epplus导出excel比较

系统中经常会使用导出Excel的功能。之前使用的是NPOI,但是导出数据行数多就报内存溢出。最近看到EPPlus可以用来导出Excel,就自己测了下两者导出上的差异。NPIO官网地址:http://npoi.codeplex.com/EPPlus官网地址:http://epplus.codeplex.com... 查看详情

excelpackage导入导出,命名空间一定要是epplus

1.引入EPPlus.dll,旧版的是OfficeOpenXml.dll,最好使用EPPlus2.调用stringpath=UploadExecl(batchUpload.BinaryExcel,"xlsx");,获取上传的xlsx路径3.下载Execl   3.1如果是<a>标签的连接,可以将方法直接写在href上就能直接下载  &n 查看详情

将datatable中的数据导出到excel

1publicstaticvoidExport(System.Data.DataTabledt,NPOI.HSSF.UserModel.HSSFWorkbookworkbook,stringFilePath)2{3if(dt.Rows.Count==0)4{5System.Windows.MessageBox.Show("尚未读取到任何数据");6return;7}8ISheetsheet=wor 查看详情

datatable导出到excel

参考技术A下面的函数作用,将DataTable导出到EXCEL文件:privatevoidDataTabletoExcel(System.Data.DataTabletmpDataTable,stringstrFileName)if(tmpDataTable==null)return;introwNum=tmpDataTable.Rows.Count;intcolumnNum=tmpDataTable.Columns.Count;introwIndex=1;intcolumnIndex=0;Excel.Applicat... 查看详情

使用带有 SqlCommandBuilder 的 TableAdapter 和导出到 DataTable 的工作表来更新 SQL 数据库表

】使用带有SqlCommandBuilder的TableAdapter和导出到DataTable的工作表来更新SQL数据库表【英文标题】:UpdateSQLDatabaseTableUsingaTableAdapterwithSqlCommandBuilderandaWorksheetexportedtoaDataTable【发布时间】:2015-09-1018:41:19【问题描述】:我正在将数据从... 查看详情

使用 DataTable 和 Linq 导出到 Excel 中缺少某些数据

】使用DataTable和Linq导出到Excel中缺少某些数据【英文标题】:SomedataismissingintheExporttoExcelusingDataTableandLinq【发布时间】:2016-05-0401:57:22【问题描述】:我在单个XL文件中导出三个工作表,但我在第二个DataTable(EducationDetails表)和... 查看详情

c#将datatable数据导出到excel表格中

     publicFileResultGetExcelFile()       {           if(Session["beginDate"]!=null)  查看详情

导出excel之epplus使用教程3(图表设置)(代码片段)

 导出Excel之Epplus使用教程1(基本介绍) 导出Excel之Epplus使用教程2(样式设置)  导出Excel之Epplus使用教程3(图表设置)   导出Excel之Epplus使用教程4(其他设置)  Epplus的图表实现是很简单的,它... 查看详情