Имя: Пароль:
1C
 
Как узнать количество строк в 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().Выгрузить();
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.