我在LibreOffice calc中做了一个函数。它有效,但我希望有一个conext帮助/提示功能,就像内置的LibreOffice功能一样。
示例:当我键入“= besselk(”时,它会显示提示BESSELK(X; N)。使用函数向导时,还会显示函数和参数说明。 Besselk besselk
假设我有一个计算矩形区域的函数
function arearect(a, b)
arearect = a * b
end function
我想有这样的事情:
function arearect(a, b)
FUNCTION DESCRIPTION "Compute rectangle area"
ARGUMENT DESCRIPTION "base length"
ARGUMENT DESCRIPTION "height"
arearect = a * b
end function
所以,当我输入“= arearect”时,会出现参数说明,所有描述符都会出现在函数向导中。
感谢
答案 0 :(得分:0)
将用户定义的函数创建为Spreadsheet Add-In。然后在定义加载项的.xcu文件的Description
节点中输入帮助文本。
例如,我创建了一个名为REVERSE的函数。这是我的CalcAddIns.xcu文件:
<?xml version="1.0" encoding="UTF-8"?>
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
oor:name="CalcAddIns" oor:package="org.openoffice.Office">
<node oor:name="AddInInfo">
<node oor:name="name.JimK.ReverseStringImpl" oor:op="replace">
<node oor:name="AddInFunctions">
<node oor:name="reverse" oor:op="replace">
<prop oor:name="DisplayName"><value xml:lang="en">reverse</value></prop>
<prop oor:name="Description">
<value xml:lang="en">Flips a string backwards. For example "apple" becomes "elppa".</value>
</prop>
<prop oor:name="Category"><value>Add-In</value></prop>
<!-- This won't help, because there is no reverse() in Excel. -->
<prop oor:name="CompatibilityName"><value xml:lang="en">reverse</value></prop>
<node oor:name="Parameters">
<node oor:name="s" oor:op="replace">
<prop oor:name="DisplayName"><value xml:lang="en">s</value></prop>
<prop oor:name="Description"><value xml:lang="en">The string to reverse.</value></prop>
</node>
</node>
</node>
</node>
</node>
</node>
</oor:component-data>
加载项还需要一些其他文件。这是我的XCalcFunctions.idl:
#include <com/sun/star/uno/XInterface.idl>
module name { module JimK { module CalcFunctions {
interface XCalcFunctions
{
string reverse( [in] string s );
};
}; }; };
实际实施很简单。我用过python:
def reverseString(inString):
s = unicode(inString)
# This is extended slice syntax [begin:end:step]. With a step of -1,
# it will traverse the string elements in descending order.
return s[::-1]
结果:
修改强>:
我的扩展程序的Components.py中还有另一篇文章:
class StringReverserAddIn(unohelper.Base, XCalcFunctions):
def __init__(self, ctx):
self.ctx = ctx
@staticmethod
def factory(ctx):
return StringReverserAddIn(ctx)
def reverse(self, inString):
from lingt.app.calcfunctions import reverseString
return reverseString(inString)
g_ImplementationHelper.addImplementation(
StringReverserAddIn.factory,
"name.JimK.LinguisticTools.ReverseStringImpl",
("com.sun.star.sheet.AddIn",),)
该文件在manifest.xml中声明:
<!--- The Python code -->
<manifest:file-entry
manifest:full-path="Components.py"
manifest:media-type="application/vnd.sun.star.uno-component;type=Python"/>
完整的扩展程序:https://extensions.libreoffice.org/extensions/lingtools。