Epplus组件导出Excel数据透视表

1 篇文章 0 订阅
1 篇文章 0 订阅

EPPlus-Create advanced Excel spreadsheets on the server
这是官网地址。有需要可以去看看。

利用Epplus组件,导出数据到Excel文件中,并生成透视表。

引用

using OfficeOpenXml;
using OfficeOpenXml.Table.PivotTable;

先定义好报表中各种字段的名称,之后直接使用。

//Sheet名
private const string Sheet1 = "Data Report";
private const string ReportSheet = "Pivot Report";

//列名  如果要很据此数据设计数据透视表,列名要不同。
private const string C1 = "C1";
private const string C2 = "C2";
private const string C3 = "C3";
private const string C4 = "C4";
private const string C5 = "C5";
private const string C6 = "C6";

获取数据源,先导出sheet1。 modelList为数据

private ExcelPackage _excelPackage;
ExcelWorksheet sheet1 = _excelPackage.Workbook.Worksheets.Add(Sheet1);

/*在Sheet1中第一行添加列名*/
sheet1.Cells[1, 1].Value = C1;
sheet1.Cells[1, 2].Value = C2;
sheet1.Cells[1, 3].Value = C3;
sheet1.Cells[1, 4].Value = C4;
sheet1.Cells[1, 5].Value = C5;
sheet1.Cells[1, 6].Value = C6;

/*插入数据*/
for (int i = 0; i < modelList.Count(); i++)
{
    sheet1.Cells[2 + i, 1].Value = modelList[i].C1;
    sheet1.Cells[2 + i, 2].Value = modelList[i].C2;
    sheet1.Column(3).Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
    sheet1.Column(3).Style.Numberformat.Format = "#,##0.00"; 
    /*数据字段的格式,若要在透视表中参与计算,不能以字符串格式显示*/
    sheet1.Cells[2 + i, 3].Value = modelList[i].C3;
    sheet1.Column(4).Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
    sheet1.Column(4).Style.Numberformat.Format = "#,##0.00";
    sheet1.Cells[2 + i, 4].Value = modelList[i].C4;
    sheet1.Cells[2 + i, 5].Value = modelList[i].C5;
    sheet1.Cells[2 + i, 6].Value = modelList[i].C6;
}

此时,源数据已导出,再生成透视表。

ExcelWorksheet pivotSheet = _excelPackage.Workbook.Worksheets.Add(ReportSheet );

if (sheet1.Dimension != null)
{ 
    var dataRange = sheet1.Cells[sheet1.Dimension.Address];   
    var pt = pivotSheet.PivotTables.Add(pivotSheet.Cells["A3"], dataRange, "PivotTable1");
    /*A3是指在该sheet表中插入数据透视表的位置,"PivotTable1"是指透视表的名字*/
    pt.ColumGrandTotals = true;
    pt.RowGrandTotals = true;//允许行列汇总计算
    pt.DataOnRows = false;  //将值移至列
    pt.PageFields.Add(pt.Fields[0]);  //添加筛选器字段C1在A1
    pt.RowFields.Add(pt.Fields[1]);   //添加行字段
    pt.RowFields.Add(pt.Fields[2]);
    pt.RowFields.Add(pt.Fields[5]);
    pt.RowFields.Add(pt.Fields[6]);
    foreach (var field in pt.RowFields)
    {
        field.SubTotalFunctions = eSubTotalFunctions.None;  //不允许行分类汇总
    }
    var dateField1 = pt.DataFields.Add(pt.Fields[3]);  
    dateField1.Function = DataFieldFunctions.Sum;
    dateField1.Format = "#,##0.00";
    var dateField2 = pt.DataFields.Add(pt.Fields[4]);  
    dateField2.Function = DataFieldFunctions.Sum;
    dateField2.Format = "#,##0.00";
    /*使数据透视表的报表形式为表格形式*/
    foreach (var field in pt.Fields)
    { 
        field.Outline = false;
        field.Compact = false;
        field.ShowAll = false;
        field.SubtotalTop = false;
    }
}

在设计透视表时,筛选器、行、列、数值字段可按实际要求设计.对于这种字段较少的表,

var pt =pivotSheet.PivotTables.Add(pivotSheet.Cells["A3"], dataSheet.Cells["A1:F" + rows + ""], "PivotTable1");

其中row为sheet1 中的行数。

//可隐藏数据源表

if (_excelPackage.Workbook.Worksheets[Sheet1 ] != null)
{
     _excelPackage.Workbook.Worksheets[Sheet1 ].Hidden = eWorkSheetHidden.VeryHidden;
}

//在透视表中写入VBA

_excelPackage.Workbook.CreateVBAProject();
var sb = new StringBuilder();
sb.AppendLine("Private Sub Workbook_Open()");
sb.AppendLine("ActiveSheet.PivotTables("PivotTable1").RowAxisLayout xlTabularRow");
sb.AppendLine("End Sub");
_excelPackage.Workbook.CodeModule.Code = sb.ToString();

其他

public ExcelExport(FileInfo fileInfo)
{
    _excelPackage = new ExcelPackage(fileInfo);
    while(_excelPackage.Workbook.Worksheets.Count > 0)
    {
        _excelPackage.Workbook.Worksheets.Delete(1);
    }
}

public void Dispose()
{
    _excelPackage.Save();
    _excelPackage.Dispose();
}

sheet1.Cells.Style.Font.Name = "Arial";
sheet1.Cells.Style.Font.Size = 9;
for (int j = 0; j < 6; j++)
{
    sheet1.Column(j + 1).Width = 15;
}

sheet1.Row(row).Style.Font.Bold = true;

pt.GrandTotalCaption = "總計";

_excelPackage.Workbook.Worksheets.MoveBefore(Sheet1, Sheet2);


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
.NET MVC 中可以使用 EPPlus 库来导出 Excel 文件,同时可以使用接口模拟数据。具体操作流程如下: 1. 首先需要使用 NuGet 命令安装 EPPlus 库,可以使用以下命令进行安装: ``` Install-Package EPPlus ``` 2. 在 Controller 中创建一个方法,用于生成 Excel 文件并将其发送到客户端。在方法中,使用 EPPlus 库创建 ExcelPackage 对象,然后使用该对象创建 ExcelWorksheet 对象,在其中填充数据并设置样式,并使用 ExcelPackage 对象将 Excel 文件发送到客户端。 ```csharp public ActionResult ExportExcel() { // 创建 ExcelPackage 对象 using (var package = new ExcelPackage()) { // 创建 ExcelWorksheet 对象 var worksheet = package.Workbook.Worksheets.Add("Sheet1"); // 填充数据 worksheet.Cells[1, 1].Value = "姓名"; worksheet.Cells[1, 2].Value = "年龄"; worksheet.Cells[2, 1].Value = "张三"; worksheet.Cells[2, 2].Value = "20"; worksheet.Cells[3, 1].Value = "李四"; worksheet.Cells[3, 2].Value = "25"; // 设置样式 worksheet.Cells[1, 1, 3, 2].Style.Font.Bold = true; // 将 Excel 文件发送到客户端 var fileData = package.GetAsByteArray(); return File(fileData, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "test.xlsx"); } } ``` 该方法返回一个 FileResult 对象,其中包含了生成的 Excel 文件的二进制数据以及文件的 MIME 类型和文件名。 3. 在 View 中创建一个链接,用于触发上述方法。 ```html <a href="@Url.Action("ExportExcel")">导出 Excel</a> ``` 该方案通过使用 EPPlus 库和接口模拟数据来实现在 .NET MVC 中导出 Excel 文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值