Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Работа с LibreOffice Calc / 19 сообщений из 19, страница 1 из 1
21.09.2021, 10:20
    #40098890
AnWa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
Прошу помочь разобраться с работой с LibreOffice Calc.
Требуется считывание данных с ячейки, запись и объединение.
Для чтения и записи существует только три типа Value, String, Formula.

1) Не могу понять каким образом менять свойство ячейки, указав что это например - Время?
Код: pascal
1.
2.
3.
Sheet := Document.getSheets.getByIndex(0);
Cell := Sheet.getCellByPosition(i, j);
Cell.String := '00:15:00';



2) Не работает формула СУММ выдает - #ИМЯ?, а если складывать каждую ячейку то работает:
Код: pascal
1.
2.
3.
4.
Cell := Sheet.getCellByPosition(m, i);
Cell.SetFormula('=M3+M4+M5+M6+M7+M8+M9+M10+M11'); //работает
Cell := Sheet.getCellByPosition(n, i);
Cell.Formula:= '=СУММ(N3:N11)'; //в Calc отображается в нижнем регистре =сумм(N3:N11)



3) Не нашел как возможно объединять ячейки?

4) Как возможно получить количество заполненных строк?
...
Рейтинг: 0 / 0
21.09.2021, 10:38
    #40098897
Любезный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
AnWa
2) Не работает формула СУММ выдает - #ИМЯ?, а если складывать каждую ячейку то работает:
Код: pascal
1.
2.
3.
4.
Cell := Sheet.getCellByPosition(m, i);
Cell.SetFormula('=M3+M4+M5+M6+M7+M8+M9+M10+M11'); //работает
Cell := Sheet.getCellByPosition(n, i);
Cell.Formula:= '=СУММ(N3:N11)'; //в Calc отображается в нижнем регистре =сумм(N3:N11)


Попробуй использовать английское название функции - по-моему SUM. Но не помню, уже давно делал.

автор3) Не нашел как возможно объединять ячейки?
Я делал так:
Код: pascal
1.
2.
Rng:=Sht.getCellRangeByPosition(0, r, MaxColumnIndex, r);
Rng.Merge(True);
...
Рейтинг: 0 / 0
21.09.2021, 11:11
    #40098908
AnWa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
Любезный

Код: pascal
1.
2.
3.
4.
Cell := Sheet.getCellByPosition(m, i);
Cell.SetFormula('=M3+M4+M5+M6+M7+M8+M9+M10+M11'); //выдает сумму времени
Cell := Sheet.getCellByPosition(n, i);
Cell.Formula:= '=SUM(N3:N11)'; //выдает сумму в числовом значении


Попробуй использовать английское название функции - по-моему SUM. Но не помню, уже давно делал.

Работает, но опять же, выдается сумма в числовом значении, как изменить на время? Хотя при отдельном складывании отображается как время.

Любезный

Я делал так:
Код: pascal
1.
2.
Rng:=Sht.getCellRangeByPosition(0, r, MaxColumnIndex, r);
Rng.Merge(True);


Работает, благодарю.

Остался один вопрос, как управлять типом ячейки?
...
Рейтинг: 0 / 0
21.09.2021, 11:42
    #40098919
Любезный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
AnWa, я не разбирался в этом. Посмотри, может в книге есть.
https://websprav.admin-smolensk.ru/freesoft/freesoft/OpenOffice.org.BASIC Guide.pdf
...
Рейтинг: 0 / 0
21.09.2021, 11:45
    #40098920
Любезный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
Что-то до меня не дошло. Сложение времени - отдельная тема, сомневаюсь, что в книгах может быть что-то такое. Наверное, должны быть отдельные функции.
...
Рейтинг: 0 / 0
21.09.2021, 12:07
    #40098933
Любезный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
Похоже, дело в форматировании ячейки.
https://wiki.openoffice.org/wiki/RU/kb/00000266Часть функций даты и времени Calc возвращает «дату» или «время» (например TODAY() ). Это просто дата в числовом формате, но если ячейка будет не отформатирована, то Calc покажет дату или время, а не числовой формат.
...
Рейтинг: 0 / 0
21.09.2021, 12:44
    #40098956
AnWa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
Любезный
AnWa, я не разбирался в этом. Посмотри, может в книге есть.
https://websprav.admin-smolensk.ru/freesoft/freesoft/OpenOffice.org.BASIC Guide.pdf


В данной книги есть пример. Следующий пример форматирует ячейку B2 так, чтобы числа были показаны с тремя
десятичными знаками и использует запятые в качестве разделителя тысяч.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
Dim NumberFormats As Object
Dim NumberFormatString As String
Dim NumberFormatId As Long
Dim LocalSettings As New com.sun.star.lang.Locale
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(1, 1)
Cell.Value = 23400.3523565
LocalSettings.Language = "en"
LocalSettings.Country = "us"
NumberFormats = Doc.NumberFormats
NumberFormatString = "#,##0.000"
NumberFormatId = NumberFormats.queryKey(NumberFormatString, LocalSettings, True)
If NumberFormatId = -1 Then
 NumberFormatId = NumberFormats.addNew(NumberFormatString, LocalSettings)
End If
MsgBox NumberFormatId
Cell.NumberFormat = NumberFormatId


Теоретически мне надо использовать NumberFormatString, но выдается ошибка:
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EOleError with message 'Method 'NumberFormatString' not supported by automation object'.
---------------------------
Break Continue Help
---------------------------

Код: pascal
1.
Cell.NumberFormatString := 'HH:MM:SS';
...
Рейтинг: 0 / 0
21.09.2021, 12:46
    #40098958
peter64
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
AnWa,
del
...
Рейтинг: 0 / 0
21.09.2021, 12:50
    #40098960
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
AnWa
Project Project1.exe raised exception class EOleError with message 'Method 'NumberFormatString' not supported by automation object'.

Ну ты импортируй библиотеку типов соотв. сервера, и не нужно будет гадать - поддерживается метод или нет, и какие параметры.
...
Рейтинг: 0 / 0
21.09.2021, 13:11
    #40098973
AnWa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
ъъъъъ

Ну ты импортируй библиотеку типов соотв. сервера, и не нужно будет гадать - поддерживается метод или нет, и какие параметры.

Можно подробней?
...
Рейтинг: 0 / 0
21.09.2021, 13:24
    #40098976
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
AnWa
ъъъъъ

Ну ты импортируй библиотеку типов соотв. сервера, и не нужно будет гадать - поддерживается метод или нет, и какие параметры.

Можно подробней?

Ну, ты работаешь с OLE - сервером, судя, например, по имени класса исключения (EOleError).
Значит, можно импортировать библиотеку типов, которую экспортирует этот сервер.
...
Рейтинг: 0 / 0
21.09.2021, 13:34
    #40098982
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
ъъъъъ
Значит, можно импортировать библиотеку типов, которую экспортирует этот сервер.

А, нет никаких .TLB ни шиша.
Разве что ты платную платную библиотеку типа Libre от WINSOFT используешь.
...
Рейтинг: 0 / 0
21.09.2021, 13:48
    #40098985
AnWa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
Запросил свойство у ячейки с типом время и получил ответ 41.
Работает и в обратном порядке:
Код: pascal
1.
Cell.NumberFormat:= 41;// Тип ячейки - Время
...
Рейтинг: 0 / 0
21.09.2021, 14:23
    #40098992
AnWa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
AnWa

4) Как возможно получить количество заполненных строк?

Пока не нашел ответа на этот вопрос.

Код: pascal
1.
Sheet.Rows.Count возвращает 1048576
...
Рейтинг: 0 / 0
21.09.2021, 14:41
    #40099002
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
AnWa
4) Как возможно получить количество заполненных строк?

Может там есть UsedRange?
...
Рейтинг: 0 / 0
21.09.2021, 14:53
    #40099008
AnWa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
wadman

Может там есть UsedRange?


На Sheet.UsedRange.Rows.Count ругается

---------------------------
Project1
---------------------------
Method 'UsedRange' not supported by automation object.
---------------------------
ОК
---------------------------
...
Рейтинг: 0 / 0
21.09.2021, 15:03
    #40099012
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
AnWa,

посмотрите вот эту тему, там много разного было:
https://www.sql.ru/forum/405083-1/delphi-openoffice-zapolnim-probel
В частности вот это:
Delphi & OpenOffice - Заполним пробел (тут про формат ячейки для дат).
...
Рейтинг: 0 / 0
21.09.2021, 15:07
    #40099017
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
...
Рейтинг: 0 / 0
21.09.2021, 16:27
    #40099071
AnWa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с LibreOffice Calc
Определение последнего столбца и строки:
Код: pascal
1.
2.
3.
4.
5.
    cursor := Sheet.createCursor;
    cursor.gotoEndOfUsedArea(True);
    address := cursor.RangeAddress;
    endcol := address.EndColumn;
    endrow := address.EndRow;
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Работа с LibreOffice Calc / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]