Разобрать данные Excel и создать многомерный массив - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть файл Excel, который может иметь содержимое, как показано ниже.У него есть динамические строки и столбцы.Я могу читать из Excel отлично.Я хочу создать пользовательский jarray и вернуться к своему пользовательскому интерфейсу из этого.

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, статусено.Пример 2 имеет 4: set1: id, lotno;set2: id, lotno, stateno;set3: id, stateno;set3: id, lotno, stateno, bldgno Все эти наборы могут меняться в зависимости от столбцов Excel.Выше я привел 2 примера с 3 и 4 столбцами.

Теперь я хочу проанализировать наборы отдельно и вернуть jarray обратно в мой интерфейс.Как я могу разобрать данные 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

Любые входные данные приветствуются.

1 Ответ

0 голосов
/ 29 ноября 2018

Если у вас не так много столбцов, и вы знаете, сколько я бы начал с повторения строк в два раза.Один раз для ловли, где каждый набор начинается и заканчивается.Затем я снова зациклил строки и собрал данные.
Когда это сработает - все тесты зеленого цвета, тогда я бы уточнил, чтобы сделать его лучше.

Так как вы знаете количество столбцов, а их меньшечем 32, дайте им число, подобное 1, 2, 4, 8, 16 ... Давайте назовем это Альфа.Двоичный, что означает до 32 бит подряд.Если вы для каждой строки добавляете Alphas вместе для каждого столбца со значением в нем, вы получаете один int, сообщающий, какой столбец заполнен в каждой строке.Сохраните это значение для каждой строки.

Теперь время для цикла 2. Снова зациклите строки.Пока Альфа одинакова, вы находитесь в одном наборе.Когда Альфа изменится, создайте новый набор и заполните его.

Во время игры будет несколько попаданий и промахов, но проблема не слишком сложная.
Тогда, когда вы решите иметь много и многостолбцы ... вы выбираете другой метод для получения альфа.И когда вы получаете много и много строк ... вы выбираете еще метод.Но я предлагаю вам начать примерно так, как я описал.

...