|
Чтение иерархического файла Excel | ☑ | ||
---|---|---|---|---|
0
Oz11
03.12.12
✎
16:23
|
здравствуйте. есть задача прочитать иерархический файл excel. читать собираюсь в дерево значений, чтобы потом удобно создавать элементы в справочнике. не могу определить алгоритм считывания данных. как из екселя выудить информацию что текущая строка принадлежит определенному родителю?
|
|||
1
Wobland
03.12.12
✎
16:26
|
а там родители есть вообще?
|
|||
2
Wobland
03.12.12
✎
16:26
|
записать макрос со свёрткой строк и посмотреть?
|
|||
3
Oz11
03.12.12
✎
16:28
|
читаю очередную строку из файла и среди реквизитов строки СОМобъекта не нахожу ничего похожего ни на родителя, ни на даже уровень этой строки в дереве.
ПС. с макросами не дружу. |
|||
4
Wobland
03.12.12
✎
16:41
|
сдаётся мне, оно не знает, что к чему
http://screencast.com/t/euq2Bq1J |
|||
5
Oz11
03.12.12
✎
17:47
|
(4) наверное это должно было мне как-то помочь.
|
|||
6
Wobland
03.12.12
✎
17:52
|
(5) понял, как над макросами медитировать? ;)
|
|||
7
Oz11
03.12.12
✎
17:56
|
(6) да. спасибо. очень полезная штука. но вот не дошло все равно как определить родителя текущей строки? (если структура хранит все именно так)
|
|||
8
Wobland
03.12.12
✎
18:00
|
(7) да я не знаю. скажи, что такое родитель с точки зрения екселя?
|
|||
9
Oz11
03.12.12
✎
18:26
|
вот что я нашел: ActiveSheet.Rows(ActiveCell.Row).OutlineLevel
показывает текущий уровень строки в структуре сгруппированных строк. теперь осталось обрисовать алгоритм как лучше хранить ссылку на текущего родителя в дереве, чтобы последовательно разворачивать дерево по мере считывания данных из файла. |
|||
10
Wobland
03.12.12
✎
18:45
|
(9) вот можешь же ;)
|
|||
11
Oz11
03.12.12
✎
18:58
|
кому может быть полезно - вот код:
ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell); RowCount = ActiveCell.Row; ColumnCount = ActiveCell.Column; НомерСтроки = 3; НомерКолонки = 1; ДеревоЗагрузки.Строки.Очистить(); СтруктураРодителей.Очистить(); СтруктураРодителей.Вставить("Уровень_0", ДеревоЗагрузки); Для Row = НомерСтроки По RowCount Цикл Уровень = ExcelЛист.Rows(Row).OutlineLevel; ТекущаяСтрока = СтруктураРодителей["Уровень_"+(Уровень-1)].Строки.Добавить(); ТекущийНомерКолонки = 1; Для каждого КолонкаТаблицы Из ДеревоЗагрузки.Колонки Цикл ТекущаяСтрока[КолонкаТаблицы.Имя] = ExcelЛист.Cells(Row, ТекущийНомерКолонки).Value; ТекущийНомерКолонки = ТекущийНомерКолонки + 1; КонецЦикла; // заполним структуру родителей СтруктураРодителей.Вставить("Уровень_"+Уровень, ТекущаяСтрока); КонецЦикла; ДеревоЗагрузки - переменная типа дерево значений с определенными колонками, СтруктураРодителей - переменная типа Структура, хранящая текущего родителя каждого уровня при прохождении текущей строки |
|||
12
Wobland
03.12.12
✎
19:00
|
на всякий случай
ПоследняяСтрока=Sheet.Cells.SpecialCells(11).Row; |
|||
13
Oz11
03.12.12
✎
19:04
|
(12) проверил. действительно последняя строка дерева не заполняется подчиненными строками.
|
|||
14
Oz11
03.12.12
✎
19:20
|
походу все дело в том что берутся активные строки листа ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);,
по умолчанию группировки свернуты в екселе и выходит что последняя группировка не раскрыта. думаю из-за этого код, приведенный выше, определяет не все вложенные строки. возникает еще один вопрос. как взять в листа не активные строки, а все (и те что скрыты)? |
|||
15
Oz11
03.12.12
✎
19:35
|
исправляем (11):
//RowCount = ActiveCell.Row; RowCount = ExcelЛист.Cells.CurrentRegion.Rows.Count; |
|||
16
GrGuest
05.12.12
✎
11:10
|
И от меня спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |