powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Работа с LibreOffice Calc
19 сообщений из 19, страница 1 из 1
Работа с LibreOffice Calc
    #40098890
AnWa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу помочь разобраться с работой с 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
Работа с LibreOffice Calc
    #40098897
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Работа с LibreOffice Calc
    #40098908
AnWa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Любезный

Код: 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
Работа с LibreOffice Calc
    #40098919
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnWa, я не разбирался в этом. Посмотри, может в книге есть.
https://websprav.admin-smolensk.ru/freesoft/freesoft/OpenOffice.org.BASIC Guide.pdf
...
Рейтинг: 0 / 0
Работа с LibreOffice Calc
    #40098920
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то до меня не дошло. Сложение времени - отдельная тема, сомневаюсь, что в книгах может быть что-то такое. Наверное, должны быть отдельные функции.
...
Рейтинг: 0 / 0
Работа с LibreOffice Calc
    #40098933
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, дело в форматировании ячейки.
https://wiki.openoffice.org/wiki/RU/kb/00000266Часть функций даты и времени Calc возвращает «дату» или «время» (например TODAY() ). Это просто дата в числовом формате, но если ячейка будет не отформатирована, то Calc покажет дату или время, а не числовой формат.
...
Рейтинг: 0 / 0
Работа с LibreOffice Calc
    #40098956
AnWa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Любезный
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
Работа с LibreOffice Calc
    #40098958
Фотография peter64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnWa,
del
...
Рейтинг: 0 / 0
Работа с LibreOffice Calc
    #40098960
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AnWa
Project Project1.exe raised exception class EOleError with message 'Method 'NumberFormatString' not supported by automation object'.

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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