C# 在EPPlus上导出具有自定义表样式的数据透视表
我正在使用EPPlus导出数据透视表。我能够正确地导出所有数据,现在我正在尝试为excel上的数据透视表设置自定义样式,但我无法为其设置其他样式 为了做一些测试,我使用了在 以下是EPPlus的代码:C# 在EPPlus上导出具有自定义表样式的数据透视表,c#,excel,pivot-table,epplus,C#,Excel,Pivot Table,Epplus,我正在使用EPPlus导出数据透视表。我能够正确地导出所有数据,现在我正在尝试为excel上的数据透视表设置自定义样式,但我无法为其设置其他样式 为了做一些测试,我使用了在 以下是EPPlus的代码: public static string RunSample12(string sqlServerName, DirectoryInfo outputDir) { var list = new List<SalesDTO>(); if (
public static string RunSample12(string sqlServerName, DirectoryInfo outputDir)
{
var list = new List<SalesDTO>();
if (sqlServerName == "")
{
list = GetRandomData();
}
else
{
list = GetDataFromSQL(sqlServerName);
}
string file = outputDir.FullName + @"\sample12.xlsx";
if (File.Exists(file)) File.Delete(file);
FileInfo newFile = new FileInfo(file);
using (ExcelPackage pck = new ExcelPackage(newFile))
{
// get the handle to the existing worksheet
var wsData = pck.Workbook.Worksheets.Add("SalesData");
var dataRange = wsData.Cells["A1"].LoadFromCollection
(
from s in list
orderby s.LastName, s.FirstName
select s,
true, OfficeOpenXml.Table.TableStyles.None);
wsData.Cells[2, 6, dataRange.End.Row, 6].Style.Numberformat.Format = "mm-dd-yy";
wsData.Cells[2, 7, dataRange.End.Row, 11].Style.Numberformat.Format = "#,##0";
dataRange.AutoFitColumns();
var wsPivot = pck.Workbook.Worksheets.Add("PivotSimple");
var pivotTable1 = wsPivot.PivotTables.Add(wsPivot.Cells["A1"], dataRange, "PerEmploee");
pivotTable1.RowFields.Add(pivotTable1.Fields[4]);
var dataField = pivotTable1.DataFields.Add(pivotTable1.Fields[6]);
dataField.Format="#,##0";
pivotTable1.DataOnRows = true;
var chart = wsPivot.Drawings.AddChart("PivotChart", eChartType.Pie, pivotTable1);
chart.SetPosition(1, 0, 4, 0);
chart.SetSize(600, 400);
var wsPivot2 = pck.Workbook.Worksheets.Add("PivotDateGrp");
var pivotTable2 = wsPivot2.PivotTables.Add(wsPivot2.Cells["A3"], dataRange, "PerEmploeeAndQuarter");
pivotTable2.RowFields.Add(pivotTable2.Fields["Name"]);
//Add a rowfield
var rowField = pivotTable2.RowFields.Add(pivotTable2.Fields["OrderDate"]);
//This is a date field so we want to group by Years and quaters. This will create one additional field for years.
rowField.AddDateGrouping(eDateGroupBy.Years | eDateGroupBy.Quarters);
//Get the Quaters field and change the texts
var quaterField = pivotTable2.Fields.GetDateGroupField(eDateGroupBy.Quarters);
quaterField.Items[0].Text = "<"; //Values below min date, but we use auto so its not used
quaterField.Items[1].Text = "Q1";
quaterField.Items[2].Text = "Q2";
quaterField.Items[3].Text = "Q3";
quaterField.Items[4].Text = "Q4";
quaterField.Items[5].Text = ">"; //Values above max date, but we use auto so its not used
//Add a pagefield
var pageField = pivotTable2.PageFields.Add(pivotTable2.Fields["Title"]);
//Add the data fields and format them
dataField = pivotTable2.DataFields.Add(pivotTable2.Fields["SubTotal"]);
dataField.Format = "#,##0";
dataField = pivotTable2.DataFields.Add(pivotTable2.Fields["Tax"]);
dataField.Format = "#,##0";
dataField = pivotTable2.DataFields.Add(pivotTable2.Fields["Freight"]);
dataField.Format = "#,##0";
//We want the datafields to appear in columns
pivotTable2.DataOnRows = false;
pck.Save();
}
return file;
}
我正在使用“LoadFromCollection”方法加载数据透视表,它接收3个参数,其中最后一个参数是我遇到问题的参数:
public ExcelRangeBase LoadFromCollection<T>(IEnumerable<T> Collection, bool PrintHeaders, TableStyles TableStyle)
因此,我尝试将“OfficeOpenXml.Table.TableStyles.None”和“OfficeOpenXml.Table.TableStyles.Custom”都设置为dataRange变量,但所有数据透视表都没有更改,它们都保持Medium9样式,无论我尝试在表样式上设置什么样式
当我设置其他表样式时,普通表的样式发生了变化
是否有人知道是否无法使用ePlus更改数据透视表的样式,并且默认为Medium9主题?如果可能的话,我做错了什么 错误之处在于,更改LoadFromCollection中的TableStyles参数不应更改任何透视表,而应更改表示集合的普通表 您可以看到LoadFromCollection的输出是一个普通的表,而不是pivot 要更改第一个透视表的样式,只需执行以下操作:
pivotTable1.TableStyle = TableStyles.Dark2;
在这里,您可以将深色2更改为您想要的任何可用样式