【问题标题】:How can I group-by some fields and sum other fields with epplus如何按某些字段分组并用 epplus 对其他字段求和
【发布时间】:2019-03-04 21:32:09
【问题描述】:

我有一个 Excel 数据列表,我想对其进行查询。我希望 epplus 识别第一列中的复制数据,并将复制字段中第二列中的值相加。如果这是我的数据:

 Name   Value
 Ali    12  
 Hasan  4
 Hasan  3
 Ali    3

我想用 epplus 来做这个:

 Name   Value
 Ali    15  
 Hasan  7

我找到了Select multiple fields group by and sum,但 epplus 并没有这样做。谁能帮帮我?这是我在 epplus 中的代码。

string fileman = Path.Combine(Path.GetTempPath(), "MyExceldata.xlsx");
using (ExcelPackage package = new ExcelPackage(new FileInfo(fileman)))
                {
                    ExcelWorksheet sheet = package.Workbook.Worksheets["Data"];
                    for (int i = 1; i <= sheet.Dimension.Rows, i++)
                    {
                        //column of name //--running my query in epplus
                        sheet.Cells[i,1].Value
                        //column of value //--running my query in epplus
                        sheet.Cells[i, 2].Value

                    }
                    //--running my query in epplus
                    package.Save();
                }

【问题讨论】:

  • 链接的答案正在执行一个 LINQ 查询,该查询将在从电子表格中读取数据后发生。您的问题不是 100% 清楚,但我认为您正在从电子表格中读取这些数据,然后想要处理它?
  • 耶,电子表格首先应该由 Epplus 读取。
  • @wahedfazeli 看看这篇文章是否对你想要做的事情有帮助:stackoverflow.com/questions/33398255/create-advanced-filter/…

标签: c# excel epplus


【解决方案1】:

链接的答案为您提供了您所需要的,但也许我们需要在您在上面查看的特定上下文中查看它。

让我们定义一个类来保存您的模型:

class Item {
    public string Name {get;set;}
    public int Value {get;set;}
}

然后,根据您的问题,我们将获得一份样本数据列表:

var items = new List<Item>{
    new Item { Name = "Ali", Value = 12 },
    new Item { Name = "Hasan", Value = 4 },
    new Item { Name = "Hasan", Value = 3 },
    new Item { Name = "Ali", Value = 3 }
};

我们可以运行的 LINQ 查询执行以下操作:

var grouped = items.GroupBy(g => g.Name)
    .Select(s => new Item
    { 
        Name = s.Key,
        Value = s.Sum(x => x.Value)
    });

即:

  • 按名称对所有项目进行分组(因为这是您的唯一标识符)
  • 从分组中,我们将为每个唯一标识符选择一个新的Item
  • 我们将对属于该组的项目的值求和

如果我们检查grouped的内容,它将包含:

Name        Value
----        -----
Ali         15
Hasan       7

【讨论】:

  • 但是Epplus没有解决。我想知道如何用epplus代码转换这个代码。
  • 我问“我假设您正在从电子表格中读取此数据,然后想要处理它?”,您回答“是”。您想在电子表格中添加公式或类似内容吗?数据如何填充?在将数据写入电子表格之前先对数据进行分组不是更容易吗?
  • 我所有的编程都是用 epplus 完成的,我什至用 epplus 编写了一些其他查询。我只想将此查询与我的其他查询一起添加。
  • 我真的不明白你想要做什么。初始数据集是否由您创建并填充到电子表格中?您可以使用当前正在使用的代码更新问题吗? EEPlus 只不过是一个可以让你读写 Excel 电子表格的库,那么当你谈到“查询”时,你的意思是什么?
  • 你的意思是如果我将这个代码(Linq 的代码)和 epplus 的代码一起添加,它不会有问题吗?
猜你喜欢
  • 1970-01-01
  • 2012-07-01
  • 2019-11-08
  • 2020-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多