|
|
|
Как узнать количество строк в OpenOffice.Calc? | ☑ | ||
|---|---|---|---|---|
|
0
prog_ress
18.03.08
✎
17:42
|
есть в OpenOffice.Calc что-то типа экселевской функции Rows.Count, которая выводит количество используемых строк? аналогичная функция в ОО выводит просто 65536, т.е. общее количество..
|
|||
|
1
ne6o
18.03.08
✎
17:46
|
отладчиком встань и посмотри
|
|||
|
2
prog_ress
18.03.08
✎
17:57
|
отладчик просто показывает, что это COMОбъект и все..
|
|||
|
3
ne6o
18.03.08
✎
18:07
|
С офисом так:
Word=Новый COMОбъект("Word.Application"); Документ=Word.Application.Documents.Open(ИмяФайла); Word.Application.Documents.Open(ИмяФайла); Потом становишься на "документ" и смотришь все свойства через отладчик. Правда сильно тормозит, но всё же |
|||
|
4
prog_ress
18.03.08
✎
18:10
|
есть такое дело. но вот с ОО не показывает почему-то свойства, а пишет и тип и значение COMОбъект и все, раскрыть нельзя, как для МСофиса..
|
|||
|
5
b_ru
18.03.08
✎
18:13
|
В экселе она тоже самое вернет. Другое дело UsedRange.Rows.Count
|
|||
|
6
smaharbA
18.03.08
✎
19:08
|
(5) и что это вернет в томже екселе ?
|
|||
|
7
b_ru
18.03.08
✎
19:23
|
(6)
debug.Print ActiveSheet.rows.Count 1048576 debug.Print ActiveSheet.usedRange.rows.count 1 Эксель 2007 поэтому в первом случае возвращет миллион, а не 65 тысяч Лист пустой, поэтому во втором возвращает единичку А вообще, убедиться недолго |
|||
|
8
smaharbA
18.03.08
✎
19:34
|
(7) теперь заполни C7
и снова выполни |
|||
|
9
prog_ress
18.03.08
✎
19:42
|
вернет 7, т.е. номер последней заполненной строки. это и нужно получить в ОО, только хз как.. как-то нужно область получить такую же, как ActiveSheet
|
|||
|
10
smaharbA
18.03.08
✎
20:05
|
(9) а если проверить ? в томже екселе ?
msgbox usedRange.rows.count |
|||
|
11
smaharbA
18.03.08
✎
20:09
|
+(10) в (5) из раза в разы повторяющаяся ошибка...
в ОО примерно так doc=ThisComponent oSheet=thiscomponent.sheets.getByIndex(0) oCursor = oSheet.createCursor() oCursor.gotoEndOfUsedArea(true) oEndAdr = oCursor.getRangeAddress msgbox oEndAdr.EndRow msgbox oEndAdr.Endcolumn но чтобы найти истинно заполненные, а не только оформление, в екселе просче, хотя и в ОО можно |
|||
|
12
b_ru
18.03.08
✎
20:18
|
(10) дятел? ActiveSheet.UsedRange.rows.count И никакой ошибки. А что касается "истинно заполненных", оно, мне кажется, автору не надо. Как и большинству людей.
|
|||
|
13
smaharbA
18.03.08
✎
20:31
|
(12) еще разок, для особо одареных - заполни одну ячейку C7
и выполни msgbox ActiveSheet.UsedRange.rows.count |
|||
|
14
smaharbA
18.03.08
✎
20:31
|
+ а за ActiveSheet и прочие активе надо порукам линейкой... хотя к теме это не относится
|
|||
|
15
b_ru
18.03.08
✎
20:48
|
(13) не сразу но дошло о чем ты. Просто из (0) непонятно, что нужен номер последней сроки, а не количество используемых, а (9) не увидел. За дятла извиняюсь.
(14) да? А что, нужно выполнить действие для какого-то конкретного листа? Может я еще чего-то не учитал? |
|||
|
16
smaharbA
18.03.08
✎
20:50
|
(15) да, а то если враз несколько оле соединений происходит и усер еще и интерактивно, то можно легко наколоться
|
|||
|
17
prog_ress
18.03.08
✎
21:14
|
сорри, в (9) сам не так написал: ActiveSheet читать как UsedRange..
в (11) это и делается, как я понял, только вот на строчке oEndAdr = oCursor.getRangeAddress(); в 1С вываливается ошибка о том, что метод getRangeAddress не найден.. |
|||
|
18
ЫЫЫЫ
19.03.08
✎
00:56
|
(17)У меня вот так работает:
============================ Лист = Книга.getSheets().getByIndex(0); CellCursor = Лист.createCursor(); CellCursor.gotoStartOfUsedArea(Ложь); CellCursor.gotoEndOfUsedArea(Истина); CellRangeAddress = CellCursor.getRangeAddress(); Range = Лист.getCellRangeByPosition(CellRangeAddress.StartColumn, CellRangeAddress.StartRow, CellRangeAddress.EndColumn, CellRangeAddress.EndRow); МассивДанных = Range.getDataArray().Выгрузить(); |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |