再次使用delphi进行openoffice calc

Posted

技术标签:

【中文标题】再次使用delphi进行openoffice calc【英文标题】:openoffice calc with delphi again 【发布时间】:2012-02-14 09:16:35 【问题描述】:

我不仅在这里使用搜索引擎,而且厌倦了它;只想要一个简单问题的简单答案(或链接):

如何从 Delphi (7) 代码打开计算表并将 123 写入单元格 A1? (或者任何 calc 的 hello world?)

【问题讨论】:

您可以查看有关如何打开新工作表的答案:***.com/questions/5732253/… 我检查了那个,但它对我来说不够详细 - 我对 openoffice 编程完全陌生。 问题是,没有简单的答案。自动化 OpenOffice 相当复杂。您可以从这里开始:openoffice.org/api 并首先阅读开发人员指南,尤其是第一步、专业 UNO 和高级 UNO。之后,查看 IDL 参考。 -1 这个问题有点懒。没有表现出任何努力。 我不认为它是懒惰的。我认为这很简单。关于努力:我在这里通过结合 cmets 中的知识分享了我关于解决这个问题的知识,不包括你的那些似乎很懒惰并且没有表现出努力的东西(至少阅读关于这个主题的第二条评论,以及关于问题)。 【参考方案1】:

你可以看看这个演示: http://sourceforge.net/projects/ooomacros/files/Delphi%20OOo/Version%201.2/Delphi_OOo_v12en.zip/download

我在一个月前测试了 Document 部分(有效),examples.pas 中还有一些电子表格代码。

【讨论】:

谢谢,我用你的例子解决了这个问题。请参阅下面“Calc”版本的答案。【参考方案2】:

好的,经过一些研究并使用上面的信息,我非常感谢你,这是一个简单的答案:

使用零件

Uses ComObj, OOoMessages, OOoTools, OOoConstants, OOoXray;

主要代码

打开空白文档,将'hello 123'文本写入a1然后保存到桌面

procedure HelloWorldExample;
var
  mentesiOpciok,oSheet,oSheets,myCalc : Variant;
begin
  ConnectOpenOffice;
  myCalc:=StarDesktop.loadComponentFromURL('private:factory/scalc', '_blank', 0, dummyArray);
  oSheets:=myCalc.getSheets;
  oSheet:=oSheets.getByIndex(0);
  //oSheet.getCellByPosition(0, 0).SetValue(123);
  oSheet.getCellByPosition(0, 0).SetFormula('hello 123!');

  mentesiOpciok:=CreateProperties(['FilterName', 'MS Excel 97']);
  myCalc.storeToURL('file:///C:/Documents and Settings/Zéiksz/Asztal/calcdoc.xls', mentesiOpciok);
  showMessage('kész :)');
  myCalc.close(true);
  DisconnectOpenOffice();
end;

使用 getcellbyposition(...).setvalue 来设置数值,或者使用 setformula 来设置字符串(不太确定,但里面有一个字符串,哈哈)。

彼得

编辑:我在互联网上找到的最有用的信息在这个论坛中: http://www.oooforum.org/forum/viewtopic.phtml?t=4996

【讨论】:

使用 .SetFormula('="hello 123!"');而不是 .SetFormula('hello 123!');

以上是关于再次使用delphi进行openoffice calc的主要内容,如果未能解决你的问题,请参考以下文章

OpenOffice 自动化将基本代码翻译成 Delphi

OpenOffice 自动化 delphi

从 OpenOffice 保存为 pdf

处理 OpenOffice.org 的“保存/关闭事件”

关于delphi枚举类型的调用的问题?谢谢大家

Delphi的基本代码