2013-03-27 191 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

相關問題