如何在MAC上用Python打开Excel实例?

3

我知道这个问题之前已经被问过,但是不太清楚,在原始问题中,用户提供了excel.exe,这是Windows可执行扩展名,而不是Mac。

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

我应该导入哪个模块?

我是一个新手,我已经学习了Python语言,但是阅读文档有困难。


https://pypi.python.org/pypi/xlrd - lvella
@Ivella 我认为他的计划不是使用xlrd来读写,而是打开一个Excel实例(就像在Windows中调用COM打开Excel窗口一样)。 - Shawn Zhang
@ShawnZhang 我想知道如何先打开Excel实例,然后在该模块中必须有更多的方法来读取或写入。@JoranBeasley 我刚刚尝试了一下,它显示对象属性未找到。我将检查lvella发布的链接。 - Fawad
@lvella,我不仅仅是想从Excel文件中提取数据,我还想打开Excel文件并对其进行更改。 - Fawad
如果您正在寻找打开Excel文件并更改文件中的数据的解决方案。那么,有一个替代方案,您可以使用xlrd读取Excel数据,并使用xlwt包写入数据。这个解决方案不涉及Excel实例。 - Shawn Zhang
显示剩余2条评论
2个回答

4
如果你只需要启动Excel,最好的方法是使用LaunchServices来完成。
如果你有PyObjC(如果你使用的是苹果预安装在10.6及以后版本的Python,则已经拥有;否则,你可能需要安装它):
import Foundation
ws = Foundation.NSWorkspace.sharedWorkspace()
ws.launchApplication_('Microsoft Excel')

如果没有,你可以使用"open"工具:
import subprocess
subprocess.check_call(['open', '-a', 'Microsoft Excel'])

无论哪种方式,你实际上都是以与用户在Finder中双击应用图标相同的方式启动Excel。
如果你想让Excel执行一些简单的操作,比如打开特定的文档,那就不难。查看NSWorkspaceopen文档,然后按照你想要做的内容进行操作。
如果你真的想要控制Excel - 例如打开文档、进行一些更改并保存它 - 你需要使用它的AppleScript接口。
苹果建议的方法是通过ScriptingBridge,或使用双语言方法(编写AppleScripts并通过NSAppleScript执行它们 - 在Python中,你可以通过PyObjC实现)。但是,我可能会使用appscript(从这里获取代码)。尽管它已经被原始创建者放弃了,而且只被稀疏地维护,最终可能会停止与某些未来的OS X版本一起工作,但它仍然比官方解决方案好多了。
以下是一个示例(未经测试,因为我这里没有Excel):
import appscript
excel = appscript.app('Microsoft Excel')
excel.workbooks[1].column[2].row[2].formula.set('=A2+1')

从代码的外观来看,导入子进程能够完成任务。 我需要在这里知道一些东西。就像我之前说的,我是新手。在文档中,子进程被赋予了这个subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False)你传递了“open,-a,Microsoft Excel” Python如何识别哪些参数属于哪些?因为有三个以上,Python如何识别顺序?对我来说,Apple脚本看起来像可读的英语。我想我可能会选择它。 - Fawad
我传递了一个单一的参数,即列表 ['open', '-a', 'Microsoft Excel'],它进入第一个参数 args。其他参数都使用默认值。 (请注意,在3.x中,其他参数都是关键字参数,这意味着除非您按名称传递它们,否则您无法传递多个参数。) - abarnert
关于AppleScript:它很容易阅读,但实际上写起来相当困难。你经常需要找到做类似你想要的事情的示例代码,然后进行修改,因为你无法从头开始编写。好消息是,对于像Excel这样的流行应用程序,有大量的示例代码可供使用。在Google中搜索“Applescript Excel” - 或者只需查看此处的applescript-excel标签 - 您就可以设置了。个人而言,我更喜欢在Python中使用appscript,因为这意味着我可以使用所有漂亮的Python东西,如列表推导和stldib。 - abarnert
还有一件事:如果您使用AppleScript/ScriptingBridge/appscript,启动应用程序时无需执行任何额外操作。当您向应用程序发送命令时,如果它没有运行,则操作系统会自动启动它。因此,如果您选择这种方法,可以忽略我的答案的前半部分。 - abarnert
未经测试的示例中,最后一行应该是excel.workbooks[1].cells.columns[2].rows[2].formula.set('=A2+1'),请注意cellscolumns/rows中的复数形式。或者可以使用cells['B2'] - Felix Zumstein

2
从评论中并不完全清楚你是否需要用数据更新Excel文件,而且假定你需要使用Excel来完成此操作,或者您需要更改一些Excel文件以包含新数据。
通常更容易,而且执行速度更快的方法是在不启动Excel的情况下“更新”Excel文件。然而, "更新"这个词不太准确:你需要读取文件并将其重新写出。当然,你可以覆盖原始文件,这样看起来就像更新一样。
如果您要进行"更新",则可以使用三元组xlrd, xlwt, xlutils,如果您使用的文件是.xls文件(Excel 2003)。 我记得xlwt不支持写入 .xlsx(但是xlrd可以读取这些文件)。
对于.xlsx文件,我使用openpyxl
两种方式都足以编写数据、公式和基本格式等内容。
如果您有现有的Excel文件,您将其作为 '模板' 并且其中包括在使用上述软件包读/写时会丢失的信息,那么您必须使用Excel进行更新。我必须这样做,因为我没有易于包含由客户指定的Visual Basic宏和非常特定的格式的简单方法。有时,只需直观地设置电子表格,然后通过编程方式填充单元格就更容易了。但是这都在Windows上完成的。
如果您真的需要在Mac上使用Excel,因为您需要将现有文件作为模板使用,我建议您查看Applescript。或者,如果可行的话,请查看OpenOffice/LibreOffice PyUno接口。

谢谢。 我实际上想要这些任务:
  1. 打开Excel(使用空白新文档)。 之后(也就是说,我将需要从Excel文件中读取数据):
  2. 读取、更新、删除、保存。
- Fawad
1
听起来你不需要使用Excel。只需选择支持所需格式的库(.xls -> xlwt.xlsx -> openpyxl)。 - Anthon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接