【问题标题】:Parse excel data and create multidimensional array解析excel数据并创建多维数组
【发布时间】:2018-11-29 18:34:38
【问题描述】:

我有一个 excel 文件,其内容如下所示。它具有动态的行和列。我可以很好地阅读excel。我想创建一个自定义的 jarray 并从这里返回我的 UI。

Example1
id      lotno       stateno
1       22   
2       1111     
5       99   
7       3           222
55      0           123
21                  2
44                  55

Example2
id      lotno       stateno  bldgno
1       22   
2       1111     
5       99   
7       3           222
55      0           123
21                  2
44                  55
1       23          03        9
55      33          12        2 

如果您看到示例 1,它有 3 个集合:set1: id, lotno; set2:id、lotno、stateno; set3:id,stateno。 示例 2 有 4 个: set1: id, lotno; set2:id、lotno、stateno; set3:id, stateno; set3: id, lotno, stateno, bldgno 这些集合都可以根据 excel 的列进行更改。上面我给出了 2 个 3 列和 4 列的例子。

现在我想分别解析这些集合并将一个 jarray 返回到我的 UI。如何解析excel数据。 所以用简单的excel我使用下面的代码来解析(使用epplus)

 using (ExcelPackage package = new ExcelPackage(file.OpenReadStream()))
 {
  int rowCount = worksheet.Dimension.End.Row;
  int colCount = worksheet.Dimension.End.Column;

  for (int row = 1; row <= rowCount; row++)
  {
      for (int col = 1; col <= colCount; col++)
      {
        var rowValue = worksheet.Cells[row, col].Value;                 
      } 
  } 
}

如果有人可以分享我如何根据我的原始示例制作单独的多维数组,那么我自己制作我的 Jarray。 所以我期望的结果是 3 组,例如 1:

 id     lotno       
 1      22   
 2      1111     
 5      99

 id     lotno       stateno
 7      3           222
 55     0           123

 id     stateno
 21     2
 44     55

感谢任何意见。

【问题讨论】:

    标签: c# excelpackage


    【解决方案1】:

    如果您没有那么多列并且知道有多少列,我将从循环两次开始。一次用于捕捉每组开始和结束的位置。然后我会再次循环这些行并收集数据。
    如果可行 - 所有测试都是绿色的,然后我会改进以使其更好。

    由于您知道列数并且它们少于 32,因此给它们一个数字,例如 1、2、4、8、16... 我们称之为 Alpha。二进制表示最多连续 32 位。如果您将每一行的 Alpha 值添加到每一列中,您会得到一个 int,告诉您每一行中填充了哪一列。为每一行存储该值。

    现在是循环 2 的时间。再次循环行。只要 Alpha 相同,您就属于同一组。当 Alpha 发生变化时,创建一个新集并填充它。

    在你玩的时候会有一些命中和失误,但问题不是太难。
    然后当你决定有很多很多列时......你选择另一种方法来获取 Alpha。当你得到很多很多行时......你选择了一种方法。但我建议您大致按照我的描述开始。

    【讨论】:

    • 列数或行数没有限制。我正在考虑使用与上面使用相同的循环,然后以某种方式检查当前行是否等于下一行(不确定如何使用 null 作为某种指示符)如果下一行不同,我将创建一个新数组等等。同样,我不完全理解您上面的逻辑。你能举个例子吗?
    • 可能类似于检查每个项目,如果 worksheet.Cells[row+1, col].Value == null 那么这意味着我们需要为下一行创建一个新数组
    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 2011-05-29
    相关资源
    最近更新 更多