2013-03-27 356 views
3

我认为这个问题以前已经问过,但还不清楚,在原始问题中,用户提供了excel.exe,这是一个windows可执行文件扩展名,不适用于mac。如何在MAC上的python中打开Excel实例?

  • 我需要在MAC上的Python中打开新的Excel实例。

应该导入哪个模块?

我是新手我已经完成学习python语言,但无法理解文档。

+0

https://pypi.python.org/pypi/xlrd – lvella 2013-03-27 04:00:11

+0

@Ivella我觉得他是不是打算读/用xlrd写,他打算打开一个Excel实例(就像在Windows中调用COM来打开一个Excel窗口) – 2013-03-27 04:01:22

+0

你不能在mac上执行os.startfile(“something.xls”)吗? – 2013-03-27 04:02:52

回答

2

如果您需要使用数据“更新”Excel文件,并且假设您需要Excel来完成这项工作,或者您需要更改一些Excel文件以包含新数据,那么从这些评论中不完全清楚。

通常,在不启动Excel的情况下“更新”一个Excel文件时,它通常要容易得多,而且速度肯定更快(重要的速度)。但是更新不是正确的词:你必须阅读文件并写出新的文件。您当然可以覆盖原始文件,因此它看起来像是一个更新。

对于'更新',如果您使用的文件是.xls文件(Excel 2003),则可以使用三重xlrd, xlwt, xlutils。 IIRC xlwt不支持.xlsx进行写入(但xlrd可以读取这些文件)。

对于.xlsx文件我用openpyxl

两者都不够好写的东西,如数据,公式和基本格式。

如果您有您与信息“模板”,如果你读/写使用上述包之一,然后你必须去与更新Excel中的文件,该文件会迷路利用现有的Excel文件。我必须这样做,因为我没有简单的方法来包含Visual Basic宏和客户端指定的非常具体的格式。有时候,它更容易在视觉上设置电子表格,然后以编程方式填充单元格。但是这一切都是在Windows上完成的。

如果你真的必须在Mac上驱动Excel,因为你需要使用现有的文件作为模板,我建议你看看Applescript。或者,如果是选项,请查看OpenOffice/LibreOffice PyUno界面。

+0

谢谢。 我其实想要这些任务 1.打开Excel(带有空白的新文档)。 之后(意思是我想要从excel文件中读取数据) 2.读取,更新,删除,保存。 – Fawad 2013-03-27 18:48:41

+0

听起来像你不需要Excel。只要去支持你需要产生的格式的库('.xls' - >'xlwt','.xlsx' - >'openpyxl') – Anthon 2013-03-27 20:16:20

+0

是的,我用openpyxl工作正常。 – Fawad 2013-03-28 01:36:44

4

如果您只需启动Excel,最好的方法就是使用LaunchServices来执行此操作。

如果你有PyObjC(该怎么做,如果你正在使用Python,苹果预先安装在10.6及更高版本;否则,您可能必须安装它):

import Foundation 
ws = Foundation.NSWorkspace.sharedWorkspace() 
ws.launchApplication_('Microsoft Excel') 

如果没有,你随时可以使用的工具open

import subprocess 
subprocess.check_call(['open', '-a', 'Microsoft Excel']) 

无论哪种方式,你有效地启动Excel中相同的方式,如果用户双击Finder中的应用程序图标。

如果你想让Excel做一些简单的事情就像打开一个特定的文档一样,这并不困难。看看NSWorkspaceopen文档,看看如何做你想做的。

如果您确实想要控制 Excel - 例如,打开文档,进行一些更改并保存 - 您将要使用其AppleScript界面​​。

苹果建议这样做的方式是通过ScriptingBridge,或者使用双语言的方法(写的AppleScript,并通过NSAppleScript哪位执行它们,在Python中,您可以通过PyObjC做)。但是,我可能会使用appscript(从here获取代码)。尽管最初的创作者已经放弃了它,而且只是维护得很少,并且最终可能会停止使用某些未来的OS X版本,但它仍然比官方解决方案好得多。

下面是一个示例(未经测试,因为我没有Excel这里):

import appscript 
excel = appscript.app('Microsoft Excel') 
excel.workbooks[1].column[2].row[2].formula.set('=A2+1') 
+0

从代码的外观 导入子进程能够完成任务。 我需要知道的东西在这里。正如我刚才所说,我是新手。 在子给出这个 subprocess.check_call(参数,*,标准输入=无,标准输出=无,标准错误=无,外壳= FALSE)的文档 你通过 “开放,-a,Microsoft Excel中” python如何识别哪些参数属于哪个?因为有3个以上,python如何识别命令? 苹果脚本对我来说看起来是可读的英文。我想我可能会那样做。 – Fawad 2013-03-27 18:57:13

+0

我传递了一个参数,列表'['open','-a','Microsoft Excel']',它转到第一个参数'args'。其他参数都获得它们的默认值。 (请注意,在3.x中,其他参数都是关键字,这意味着除非通过名称传递它们,否则不能传递超过1个参数。) – abarnert 2013-03-27 20:04:28

+0

至于AppleScript:它非常易于阅读,但实际上很难来写。你经常不得不找到一些接近你想要的东西然后修改它的示例代码,因为你无法弄清楚如何从头开始编写它。好消息是对于像Excel这样的流行应用程序,那里有大量的示例代码。谷歌的“Applescript Excel” - 或者只是看看这里的applescript-excel标签 - 你应该设置。就个人而言,我更喜欢在Python中使用'appscript',因为这意味着我可以使用列表解析和stldib等所有漂亮的Python东西。 – abarnert 2013-03-27 20:07:48