【问题标题】:Just need to return distinct values from Excel using EPPlus只需要使用 EPPlus 从 Excel 返回不同的值
【发布时间】:2018-07-20 13:20:04
【问题描述】:

全部,

已经尝试了一天的时间来解决这个问题。做了很多谷歌搜索! 我有一个 excel,其中有 5 列,但在第一列中我有产品编号。我想从 excel 中返​​回 DISTINCT 产品编号。使用 EPPlus 读取 excel。这是我的代码:

string fileName = file.FileName;
                    string fileContentType = file.ContentType;
                    byte[] fileBytes = new byte[file.ContentLength];
                    var data = file.InputStream.Read(fileBytes, 0, Convert.ToInt32(file.ContentLength));

                    if (file.FileName.IndexOf(".xlsx") == 0)
                    {
                        throw new Exception("Please ensure that the file has been converted to latest excel version. The file type must be .xlsx.");
                    }

                    using (var package = new ExcelPackage(file.InputStream))
                    {
                        var currentSheet = package.Workbook.Worksheets;
                        var workSheet = currentSheet.FirstOrDefault();
                        var noOfCol = workSheet.Dimension.End.Column;
                        var noOfRow = workSheet.Dimension.End.Row;
                        //lets remove all records 

                        //get a list of distinct item numbers and remove all records in preparation for upload 
                        //I need help with this statement! 

                        var result = workSheet.Cells.Select(grp => grp.First()).Distinct().ToList();

【问题讨论】:

  • 此语句返回不同的记录,但它们都是不同的,因为它没有查看产品编号的第一列:var result = workSheet.Cells.Select(grp => grp.First()).Distinct ().ToList();

标签: c# excel linq model-view-controller epplus


【解决方案1】:

所以我能够通过调试来解决这个问题。这似乎不是最有效的答案,但在这里:

var result = workSheet.Cells.Where(s => s.Address.Contains("A")).Where(v => v.Value != null).Where(vb => vb.Value.ToString() != "").GroupBy(g => g.Value.ToString()).Distinct().ToList(); 

所以基本上只返回A列(自从地址保存此信息以来的第一列)然后消除空值和空白,按值分组,最后返回不同的列表。

【讨论】:

    【解决方案2】:

    关于您的回答(抱歉没有足够的代表发表评论):

    workSheet.Cells.Where(s => s.Address.Contains("A")).....
    

    这可能包括 ZA、AA 等,如果你只想要 A 列,你可以这样做

    workSheet.Cells[1,1,workSheet.Dimension.End.Row, 1].....
    

    这将从 A1 开始,向下看 A 列直到最后。您仍然可能需要过滤 null、空白等,或者如果您需要从第 5 行开始,这就是我所需要的。示例:

    workSheet.Cells[5,1,workSheet.Dimension.End.Row, 1].GroupBy(g => g.Value.ToString()).Distinct().ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多