我编写了一个宏,它应该从OpenOffice文档(Writer,而不是Calc)中的表中将两个日期(dd.mm.yyyy)作为字符串。这两个日期应该合并到这个: DDMMYYYY-DDMMYYYY。这应该用作文件名。
Table只有一行和6列,第一个Date在table2中:D1:D1,第二个在table2中:F1:F1。 我将其“翻译”为table2(1,4)和table2(1,6)
This German site正在做我想做的事情,但使用OOCalc文档中的电子表格而不是OOWriter。
够了,这是我的代码:
sub save
oDoc=thisComponent
sStartDate = oDoc.Table2(1, 4)
sEndDate = oDoc.Table2(1, 6))
sFilename = sStartDate.String & sEndDate.String
sURL = ConvertToURL("file:///home/cp/Documents/" & sFilename & ".odt")
msgbox sURL
' oDoc.StoreAsURL(sURL, Array())
end sub
是的,我运行linux,所以路径应该是正确的。 当我尝试运行此脚本时,它说:
Property or Method not found table2
我当然试过谷歌但不知何故我找不到解决方案。正确方向的提示就足够了,我也猜想我必须写“更多”:
sStartDate = oDoc.getString(table2(1, 4))
或类似的东西。也没工作。我尝试的另一件事是使用(0,3)而不是(1,4)。
如果有人能帮我一点,我会很感激! :) 我希望我已经做好了我在这里发布的所有内容。
Vaelor
编辑: 我已根据第14.9章中的HERE找到PDF,将脚本修改为此。
现在看起来像这样,
sub save
oDoc=thisComponent
Dim oTable
Dim sTableName As String
sTableName = "Table2"
oTable = oDoc.getTextTables().getByName(sTableName)
' oTable = oTables.getByName(sTableName)
sStartDate = oTable.getCellByPosition(0, 3)
sEndDate = oTable.getCellByPosition(0, 5)
sFilename = sStartDate.String & sEndDate.String
sURL = ConvertToURL("file:///home/cp/Documents/" & sFilename & ".odt")
msgbox sURL
' oDoc.StoreAsURL(sURL, Array())
end sub
但是,仍然没有工作。现在我得到了这个异常IndexOutOfBoundsException。 (我想链接它,但它说,我不能发布超过2个链接:-()
我的第一个想法是我必须将cels更改为0,3和0,5。更改之后,错误仍然会发生。 : - (
EDIT2: 由于我没有得到回应,我想我会在Python中尝试这个,也许它会产生更好的结果。
答案 0 :(得分:2)
此代码演示了如何查找具有给定名称的文本表以及如何访问单个单元格。
function get_table_by_name(name as string) as object
dim oenum as object
dim oelem as object
oenum = thisComponent.text.createEnumeration
while oenum.hasMoreelements
oelem = oenum.nextElement
if oelem.supportsService("com.sun.star.text.TextTable") then
if oelem.Name = name then
get_table_by_name = oelem
exit function
end if
end if
wend
end function
Sub Main
dim table as object
table = get_table_by_name("Table1")
if not isNull(table) then
msgbox "Got " & table.Name & " " & table.getRows().getCount() & "x" & table.getColumns().getCount()
msgbox "Cell[0,0] is " & table.getCellByPosition(0, 0).getString()
end if
End Sub