使用LibreOffice Writer,我可以在文档中输入脚本(insert-&gt;脚本)。它们在<text:script script:language ="...">...</text:script>
文件的content.xml
中显示为.odt
。使用jodreports jar文件时,我可以按照http://jodreports.sourceforge.net/?q=node/25中的描述使这些脚本正常工作。
现在我想对其他LibreOffice文档类型执行相同的操作,但是没有选项可以在Calc或Impress中插入 - >脚本。我唯一看到的是宏,但它们存储在单独的xml文件中,而不是content.xml
。如果我能在content.xml
文件中找到正确的标签来输入我的脚本,我肯定jodreports会完成工作......
有什么想法吗?
答案 0 :(得分:1)
这可以通过更改jodreports代码来解决。这不会在<text:script>
文件中添加请求的.odt
标记,因此严格来说这可能不是特定问题的答案,但它将解决让jodreports玩得很好的根本问题LibreOffice Calc文件。
更改 - 使用jodreports 2.4.0代码 - 位于文件net.sf.jooreports.templates.xmlfilters
中的ScriptTagFilter.java
- 包中。在函数doFilter
中,我已经替换了
Nodes scriptNodes = document.query("//text:script[translate(@script:language, 'CIJOPRST', 'cijoprst')='jooscript']", XPATH_CONTEXT);
与
//WRITER document (odt)
Nodes odtScriptNodes = document.query("//text:script[translate(@script:language, 'CIJOPRST', 'cijoprst')='jooscript']", XPATH_CONTEXT);
Nodes scriptNodes = odtScriptNodes;
//CALC document (ods)
Nodes odsPotentialScriptNodes = document.query("//table:table-cell", XPATH_CONTEXT);
for(int nodeIndex = 0; nodeIndex < odsPotentialScriptNodes.size(); nodeIndex++){
Element tableCellElement = (Element) odsPotentialScriptNodes.get(nodeIndex);
Elements textElements = tableCellElement.getChildElements();
if(textElements.size() > 0 && textElements.get(0).getValue().toLowerCase().startsWith("--!jooscript:")){
String fullScript = textElements.get(0).getValue().substring("--!jooscript:".length());
for(int elementIndex = 1; elementIndex < textElements.size(); elementIndex++){
fullScript += System.getProperty("line.separator") + textElements.get(elementIndex).getValue();
}
for(int elementIndex = textElements.size()-1; elementIndex > 0; elementIndex--){
tableCellElement.removeChild(elementIndex);
}
Element firstTextElement = (Element) tableCellElement.getChild(0);
firstTextElement.removeChildren();
firstTextElement.appendChild(fullScript);
scriptNodes.append(firstTextElement);
}
}
允许在表格单元格中使用代码--!jooscript:
。请注意,您可以在表格单元格中的多行中编写代码,以获取指令,例如
@table:table-row
[#list items as item]
@/table:table-row
[/#list]
因为在代码中进一步开始逐行读取实际脚本,如果脚本在一个长行中则会失败。只有第一行应该有--!jooscript:
前缀。
答案 1 :(得分:0)
Inserting a script仅支持LO文本或html文件。 但您可以通过将Writer OLE对象插入到Calc表中来使用解决方法(菜单&#34; Insert
&#34; - &gt;&# 34; Object
&#34; - &gt;&#34; OLE Object
&#34; - &gt;&#34; LibreOffice 4.2 Text
&#34;)。在OLE对象内,&#34; Insert
&#34; - &GT; &#34; Script
&#34;的工作方式与&#34; native&#34;相同。 .odt
个文件。该脚本也会显示在content.xml
文件的.ods
中。
content.xml
中(OLE对象在子目录中有自己的context.xml
),但不是在“ods&#39; content.xml
。