Что нового

Получить и вернуть данные в ячейки Calc

And

Новичок
Сообщения
36
Репутация
0
Скрипт на Autoit, но я недавно и не совсем понятно.

В скрипте нужно, чтобы данные записывались и забирались из ячеек Calc (Не MS Excel, а именно Libreoffice Calc).

1) Стандартные команды для окон для этого не подойтут, т.к. Calc написан не в стандартной форме MS программ, как и Excel? Или можно стандартно?
2) Нужно использовать библиотеку? Вот эту OOoCalc.au3? И через нее по функциям давать команды?
3) Или можно только через COM объекты что-то делать?

Если есть уже готовые решения для этих конкретно этих задач (вставка и загрузка из ячеек Calc) можете их привести, если они небольшие.
 
Автор
A

And

Новичок
Сообщения
36
Репутация
0
Объясните пожалуйста. В файле OOoCalc.au3 есть функция Func _OOoCalcWriteCell($oObj, $vValue, $vRangeOrRow, $iCol = -1, $vSheet = -1)

Как написать в скрипте, чтобы произвести запись в calc документе с названием abc.ods в A1 ячейку первого листа часла 1? Первый раз использую UDF функции.

Код:
#include <OOoCalc.au3>
Dim $var = 1
Func _OOoCalcWriteCell(C:\abc.ods, $var, 0, 0, 1)
EndFunc


Написано красным цветом, что функция уже определена и не компилируется. Как правильно задать условие для выполнения
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
С этой UDF тоже не работал, но попробуйте так:
Код:
#include <OOoCalc.au3>
Dim $var = 1
_OOoCalcWriteCell("C:\abc.ods", $var, 0, 0, 1)
 
Автор
A

And

Новичок
Сообщения
36
Репутация
0
Скомпилировалось, но ничего не происходит, у меня libreoffice portable. Может вы знаете, влияет ли reg ключи на UDF функцию для Calc

Вот есть файл OOoCalc.au3

В нем блок для этого примера
Код:
Func _OOoCalcWriteCell($oObj, $vValue, $vRangeOrRow, $iCol = -1, $vSheet = -1)
	Local $sFuncName = "_OOoCalcWriteCell"
	If Not IsObj($oObj) Then
		__OOoCalcErrorNotify("Error", $sFuncName, "", "$_OOoCalcStatus_InvalidDataType - Invalid Calc object")
		Return SetError($_OOoCalcStatus_InvalidDataType, 1, 0)
	EndIf
	If Not IsInt($vRangeOrRow) And Not __OOoCalcRangeIsValid($vRangeOrRow) Then
		__OOoCalcErrorNotify("Error", $sFuncName, "", "$_OOoCalcStatus_InvalidValue - Invalid range or row")
		Return SetError($_OOoCalcStatus_InvalidValue, 3, 0)
	EndIf
	If Not IsInt($iCol) Then
		__OOoCalcErrorNotify("Error", $sFuncName, "", "$_OOoCalcStatus_InvalidDataType - Column must be an integer")
		Return SetError($_OOoCalcStatus_InvalidDataType, 4, 0)
	EndIf
	If IsInt($vRangeOrRow) And $iCol < 0 Then
		__OOoCalcErrorNotify("Error", $sFuncName, "", "$_OOoCalcStatus_InvalidValue - Invalid column")
		Return SetError($_OOoCalcStatus_InvalidValue, 4, 0)
	EndIf
	If Not IsInt($vSheet) And Not IsString($vSheet) Then
		__OOoCalcErrorNotify("Error", $sFuncName, "", "$_OOoCalcStatus_InvalidDataType - Sheet must be integer or string")
		Return SetError($_OOoCalcStatus_InvalidDataType, 5, 0)
	EndIf
	If $vSheet > -1 And Not __OOoCalcWorksheetIsValid($oObj, $vSheet) Then
		__OOoCalcErrorNotify("Error", $sFuncName, "", "$_OOoCalcStatus_NoMatch - Invalid sheet")
		Return SetError($_OOoCalcStatus_NoMatch, 5, 0)
	EndIf
	Local $oSheet = __OOoCalcGetSheet($oObj, $vSheet)
	If Not IsObj($oSheet) Then
		__OOoCalcErrorNotify("Error", $sFuncName, "", "$_OOoCalcStatus_GeneralError - Unable to get sheet object")
		Return SetError($_OOoCalcStatus_GeneralError, 0, 0)
	EndIf
	Local $oCell = __OOoCalcGetCell($oSheet, $vRangeOrRow, $iCol)
	If Not IsObj($oCell) Then
		__OOoCalcErrorNotify("Error", $sFuncName, "", "$_OOoCalcStatus_GeneralError - Unable to get cell object")
		Return SetError($_OOoCalcStatus_GeneralError, 0, 0)
	EndIf
	Select
		Case IsString($vValue)
			$oCell.setString($vValue)
		Case IsInt($vValue) Or IsNumber($vValue)
			$oCell.setValue($vValue)
		Case Else
			$oCell.setFormula($vValue)
	EndSelect
	Return SetError($_OOoCalcStatus_Success, 0, 1)
EndFunc


Непонятно каким это работает. Как подхватывается и как скрипт находит LO на компьютере в определенной пользовательской папке, если LO portable версия, я не программирую, да и скрипты не писал.
 
Верх