用EPPLUS分组excel行

当行的值与前一行相同时,我需要的是组行,“B3”的值与“B2”的值相同,如下所示:

在这里输入图像说明

我使用epplus的c#,我看我怎么可以做类似于这个大纲选项,是类似于我想要的,但是这个选项有一些缺点,如不会自动分组的基础上价值观,不能做各种团体….

EPPLUS可以做到这一点吗? 如果它不是posible,我怎么可以添加vba代码到c#?,我试试这个:

StringBuilder vbaCode = new StringBuilder(); vbaCode.AppendLine("Sheets('Sheet1').Activate"); vbaCode.AppendLine("Range('A1: D11').Select"); vbaCode.AppendLine("Selection.Subtotal GroupBy:= 1, Function:= xlSum, TotalList:= Array(2, 3),Replace:= True, PageBreaks:= False, SummaryBelowData:= True"); pck.Save(); 

但不工作,我不能打开Excel文件。

编辑

现在我已经拥塞了,我尝试使用组函数的Interop,但是为了一个外在的原因,他将列分组,而不是行,这是代码:

  var ExApp = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbooks Wbs = ExApp.Workbooks; Microsoft.Office.Interop.Excel.Workbook Wb = Wbs.Open(fi.FullName.ToString()); Microsoft.Office.Interop.Excel.Sheets wss = Wb.Worksheets; Microsoft.Office.Interop.Excel.Worksheet Ws = (Microsoft.Office.Interop.Excel.Worksheet)wss.get_Item("Sheet1"); Ws.Range["A6:A10"].Group(); Ws.Outline.SummaryRow =Microsoft.Office.Interop.Excel.XlSummaryRow.xlSummaryAbove; ExApp.Visible = true; 

我看到这已经回答了,但是我想提供EPPlus的方式,你当然可以做,但你需要手动创build总和单元格:

 [TestMethod] public void Row_Grouping_Test() { //http://stackoverflow.com/questions/41636336/grouping-excel-rows-with-epplus //Throw in some data var datatable = new DataTable("tblData"); datatable.Columns.AddRange(new[] { new DataColumn("Header", typeof (string)), new DataColumn("Col1", typeof (int)), new DataColumn("Col2", typeof (int)), new DataColumn("Col3", typeof (object)) }); for (var i = 0; i < 10; i++) { var row = datatable.NewRow(); row[0] = $"Header {i}"; row[1] = i; row[2] = i * 10; row[3] = Path.GetRandomFileName(); datatable.Rows.Add(row); } //Create a test file var fi = new FileInfo(@"c:\temp\Row_Grouping_Test.xlsx"); if (fi.Exists) fi.Delete(); using (var pck = new ExcelPackage(fi)) { var worksheet = pck.Workbook.Worksheets.Add("Sheet1"); worksheet.Cells.LoadFromDataTable(datatable, false); worksheet.Cells["A11"].Value = "TOTAL"; worksheet.Cells["B11"].Formula = "SUM(B2:B10)"; worksheet.Cells["C11"].Formula = "SUM(C2:C10)"; worksheet.Row(11).Style.Font.Bold = true; //Row Group 1 (start with 1 since row index is 1-based) for (var i = 1; i <= datatable.Rows.Count; i++) worksheet.Row(i).OutlineLevel = 1; pck.Save(); } } 

看起来像这样:

在这里输入图像说明

我对EPPLUS库不熟悉。
但是您可以使用Microsoft.Office.Interop.Excel命名空间轻松实现该任务。
而且你可以像使用Vba-(使用Merge()方法)那样做,注意你需要为你的项目添加一个名字空间的引用。
这里是一个例子:

 using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Microsoft.Office.Interop.Excel; namespace WindowsFormsApplication32 { public partial class Form1 : Form { public Microsoft.Office.Interop.Excel.Application ExApp; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { ExApp = new Microsoft.Office.Interop.Excel.Application(); // CREATE A NEW WORKBOOK (you can also open existing workbook using the Open() method) Microsoft.Office.Interop.Excel.Workbook Wb = ExApp.Workbooks.Add(); // SET WORKSHEET Microsoft.Office.Interop.Excel.Worksheet Ws = Wb.Worksheets.Add(); // MERGE CELLS (the answer to your question) Ws.Range["A1:G5"].Merge(); // GROUP ROWS (the final answer to your question) Ws.Rows["4:7"].Group(); ExApp.Visible = true; } } }