当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 12 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : LibreOffice(OpenOffice)宏程序(python)如何设置单元格的格式?
帖子发表于 : 2012-03-27 12:45 

注册: 2006-09-29 5:11
帖子: 1009
送出感谢: 11
接收感谢: 5
我要设置当前单元格的数字格式,比如设置为"YYYY-MM-DD",搞了半天也搞不好。网上资料太少了。

cell.CellStyle='YYYY-MM-DD' / 'ISO 8061'/'ISODate' 一律无效,CellStyle永远是'Default',也不报错。似乎只读。
后来找到一个方法cell.setPropertyValue('NumberFormat',id),有效。但是那个id不知道怎么获取,资料里说有个getNumberFormatID方法,但是dir没有这个,因此报错。现在只能在cal里找到'yyyy-mm-dd'格式,设置单元格格式后通过调试得到这个格式的id是84。怎么数也数不出来是84。不管了。目前是成功了。但是以后格式ID可能随时变化,那就乱了。

问题:如何通过格式的内容'yyyy-mm-dd'或者名称'ISO 8061'什么的得到那个格式的ID(84)?


_________________
Dell D620 -> Asus U44SG
Dapper->Edgy->Feisty->Gutsy->Hardy->Karmic->Lucid -> Oneric -> Precise->Trusty
Python+JS


页首
 用户资料  
 
2 楼 
 文章标题 : Re: LibreOffice(OpenOffice)宏程序(python)如何设置单元格的格式?
帖子发表于 : 2012-03-27 13:26 

注册: 2010-05-01 21:23
帖子: 1955
送出感谢: 4
接收感谢: 21
楼主,你是怎么在ooo里运行py的?
我研究了好久,都不知道如何运行自己的py脚本。只能用vba。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: LibreOffice(OpenOffice)宏程序(python)如何设置单元格的格式?
帖子发表于 : 2012-03-27 14:18 

注册: 2006-09-29 5:11
帖子: 1009
送出感谢: 11
接收感谢: 5
不是运行Python,只是通过快捷按钮或者快捷键调用Python小程序而已。可能你没有仔细看帮助或者没有认真在网上搜。

1、要把py文件放置在~/.libreoffice(或者.openoffice)/3(或者其他版本)/usr/Script/目录里。最好是用link,这样重装啊备份啊之类的就不怕乱了。然后你就能在 OO里通过宏菜单找到你所有的文件了。
2、py文件里最后一行可能需要指定你的主函数
3. 上网搜范例,或者帮助文档里也有helloworld.py实例。不过如果想要详细的手册,有木有?木有!虽然这个可以有。
4. 如果提示安装JRE,可以忽略,但是每次都要提示。对运行python没有影响,但是安装了以后可以有一个即时debug的功能,就是外部python通过正在运行的OO提供的Java socket来实时操作。以前我装的,现在不用了。如果需要好好学习,那个倒是蛮方便的。


_________________
Dell D620 -> Asus U44SG
Dapper->Edgy->Feisty->Gutsy->Hardy->Karmic->Lucid -> Oneric -> Precise->Trusty
Python+JS


页首
 用户资料  
 
4 楼 
 文章标题 : Re: LibreOffice(OpenOffice)宏程序(python)如何设置单元格的格式?
帖子发表于 : 2012-03-28 15:54 

注册: 2010-05-01 21:23
帖子: 1955
送出感谢: 4
接收感谢: 21
请问楼主知道在python中获取对象: dispatcher
的方法吗?
我通过实验,发现其实在任何目录下的py程序都可以操控openoffice的。但是因为 dispatcher对象无法获取,所以很多功能都无法实现。只能实现简单的插入功能。
vba中获取该对象非常容易,
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

但在py中没有这个函数的。

另外就是
desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)

# access the current writer document
model = desktop.getCurrentComponent()

这个model只能代表writer,干嘛不能代表cal的?


页首
 用户资料  
 
5 楼 
 文章标题 : Re: LibreOffice(OpenOffice)宏程序(python)如何设置单元格的格式?
帖子发表于 : 2012-03-29 12:51 

注册: 2010-05-01 21:23
帖子: 1955
送出感谢: 4
接收感谢: 21
要不楼主给个cal的py脚本看看。我只找到writer的。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: LibreOffice(OpenOffice)宏程序(python)如何设置单元格的格式?
帖子发表于 : 2012-03-29 14:12 

注册: 2006-09-29 5:11
帖子: 1009
送出感谢: 11
接收感谢: 5
你说的已经不是macro了,而是pyuno了。宏必须放在那个目录。外部python程序当然随便放了。
http://www.openoffice.org/udk/python/python-bridge.html


_________________
Dell D620 -> Asus U44SG
Dapper->Edgy->Feisty->Gutsy->Hardy->Karmic->Lucid -> Oneric -> Precise->Trusty
Python+JS


页首
 用户资料  
 
7 楼 
 文章标题 : Re: LibreOffice(OpenOffice)宏程序(python)如何设置单元格的格式?
帖子发表于 : 2012-03-29 17:23 

注册: 2010-05-01 21:23
帖子: 1955
送出感谢: 4
接收感谢: 21
这里我去过,我想要一个有关cal的宏,找不到。或者是ooo里内置的py宏放在什么目录下?


页首
 用户资料  
 
8 楼 
 文章标题 : Re: LibreOffice(OpenOffice)宏程序(python)如何设置单元格的格式?
帖子发表于 : 2012-03-30 8:42 

注册: 2006-09-29 5:11
帖子: 1009
送出感谢: 11
接收感谢: 5
宏的话就简单多了,不需要准备接口,直接用。
为什么不搜索一下呢?我也是刚搜索的,叫"helloworld.py"的只有一个,/usr/lib/libreoffice/basis3.4/share/Scripts/python/ 里面有你需要的。


_________________
Dell D620 -> Asus U44SG
Dapper->Edgy->Feisty->Gutsy->Hardy->Karmic->Lucid -> Oneric -> Precise->Trusty
Python+JS


页首
 用户资料  
 
9 楼 
 文章标题 : Re: LibreOffice(OpenOffice)宏程序(python)如何设置单元格的格式?
帖子发表于 : 2012-03-30 9:45 

注册: 2010-05-01 21:23
帖子: 1955
送出感谢: 4
接收感谢: 21
我翻阅了很多资料了。最后通过多次实验,终于成功在py中操控openoffice了。
一个例子:
#! /usr/python
# -*- coding: UTF-8 -*-
import uno
import unohelper
import os

# get the uno component context from the PyUNO runtime
localContext = uno.getComponentContext()

# create the UnoUrlResolver
resolver = localContext.ServiceManager.createInstanceWithContext(
"com.sun.star.bridge.UnoUrlResolver", localContext )

# connect to the running office
ctx = resolver.resolve( "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" )
smgr = ctx.ServiceManager

# get the central desktop object
desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)

# access the current writer document
model = desktop.loadComponentFromURL("private:factory/scalc", "_hidden", 0,())


#model = desktop.getCurrentComponent()
sheet = model.getCurrentController().getActiveSheet()
c=sheet.getCellByPosition(0,0)
c.setString("111111")
print(c.getString())

c=sheet.getCellByPosition(0,5)
c.setValue(111)
# create a cursor
# insert the text into the document
# Do a nasty thing before exiting the python process. In case the
# last call is a oneway call (e.g. see idl-spec of insertString),
# it must be forced out of the remote-bridge caches before python
# exits the process. Otherwise, the oneway call may or may not reach
# the target object.
# I do this here by calling a cheap synchronous call (getPropertyValue).
ctx.ServiceManager



首先在终端运行ooo,代码:
soffice "-accept=socket,host=localhost,port=2002;urp;"


然后运行上述py程序。成功遥控ooo。


页首
 用户资料  
 
10 楼 
 文章标题 : Re: LibreOffice(OpenOffice)宏程序(python)如何设置单元格的格式?
帖子发表于 : 2012-03-30 14:09 

注册: 2006-09-29 5:11
帖子: 1009
送出感谢: 11
接收感谢: 5
恭喜楼上终于成功。
干嘛非要这样啊?其实我开始是先弄成这样,然后才弄宏的。外部操作没什么用啊,除了通过python终端实时debug,看dir有用。后来嫌JRE升级烦,直接删了。反正现在也不需要调试了。OO下的东西拿到libreoffice下来直接用。


_________________
Dell D620 -> Asus U44SG
Dapper->Edgy->Feisty->Gutsy->Hardy->Karmic->Lucid -> Oneric -> Precise->Trusty
Python+JS


页首
 用户资料  
 
11 楼 
 文章标题 : Re: LibreOffice(OpenOffice)宏程序(python)如何设置单元格的格式?
帖子发表于 : 2012-03-30 14:11 

注册: 2006-09-29 5:11
帖子: 1009
送出感谢: 11
接收感谢: 5
对了,既然可以了,帮忙找找看有什么好方法设置单元格格式,也就是设置日期格式。


_________________
Dell D620 -> Asus U44SG
Dapper->Edgy->Feisty->Gutsy->Hardy->Karmic->Lucid -> Oneric -> Precise->Trusty
Python+JS


页首
 用户资料  
 
12 楼 
 文章标题 : Re: LibreOffice(OpenOffice)宏程序(python)如何设置单元格的格式?
帖子发表于 : 2012-03-30 17:52 

注册: 2010-05-01 21:23
帖子: 1955
送出感谢: 4
接收感谢: 21
用py很难获取对象,如果你用vba的或话,很容易做到单元格格式的设定。因为vba的对象太容易得到了。
如果用宏,使用vba吧,如果某些问题用vba不还实现,随时可以调用py脚本的。shell(“python xxx.py”)
我想外部控制ooo所以才用py的。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 12 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译