0

我有一个 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的列而改变。上面我给出了 3 列和 4 列的 2 个示例。

现在我想分别解析这些集合并将一个 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

任何输入表示赞赏。

4

1 回答 1

0

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

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

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

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

于 2018-11-29T19:40:30.433 回答