2014-03-04 32 views
3

我從這裏上的各種問題看到加載使用win32com 。我試着強迫我外接的而不是運行加載:加載Excel,如果Excel的一個實例從Python的使用開在Python

xl = win32com.client.gencache.EnsureDispatch('Excel.Application') 
xl.Visible = True 
addin = xl.Workbooks.Open('C:/path/addIn.xll') 
wb = xl.Workbooks.Open('Test.xlsx') 

然而,當我做到這一點的Excel實例打開,我得到一個安全信息,要求我驗證我想打開這個添加 - 在。如果我點擊「僅爲此會話啓用此加載項」Excel立即關閉並且不會打開我所需的xlsx文件。

有沒有人有任何想法如何強制加載項加載,然後讓我打開我的文件?

非常感謝您的幫助!

+0

你需要與Excel交互,或者只是閱讀電子表格數據?如果後者有例程(甚至可以在Unix上工作),則可以使用從電子表格讀取數據(xlrd,python-excel等)。 – holdenweb

+0

我需要在Python中進行一些計算,將結果傳遞到Excel中那麼可以使用Excel插件提供的函數對這些結果進行操作。我很清楚這可能不是一個理想的設置,但我只是幫助一個小項目,而不是真的在立場決定他們如何設置一切! – Ben

回答

4

其實我已經設法從與做用VBA同樣的事情,這MSDN文章借用的東西來解決這個:

http://support.microsoft.com/default.aspx?scid=KB;en-us;q213489

下現在完美的作品:

xl = win32com.client.gencache.EnsureDispatch('Excel.Application') 
xl.Visible = True 
xl.RegisterXLL('C:/path/addin.xll') 
wb = xl.Workbooks.Open('Test.xlsx') 
+1

很高興找到答案併發布。這很有趣,因爲我遇到了RegisterLL(雖然不是你引用的特定頁面,很好找),但是我沒有足夠的信息來確定它是否相關。 – Schollii

1

我使用win32com比其他任何方法使用Excel的成功要好得多,但你可能想看看pyxll(https://www.pyxll.com/introduction.html)。以下是其他一些事情:

  • 您是否檢查過addin.Installed == True
  • 你試過AddIns.Add("c:\windows\addins\TSXL\TSXL.xll").Installed = True
  • 嘗試xl.DisplayAlerts=False打開工作簿
  • 之前,你有沒有嘗試過的Automating Excel via COM/Python - standard addins won't load at startup最後回答的四個步驟,我在這裏複製它們:

    1. 打開表示有問題的插件的XLA/XLL文件
    2. 設置加載項(addin_name).Installed =假
    3. 加載項(addin_name)。新增(addin_file_path)
    4. 設置加載項(addin_name).Installed =真
+0

感謝您的回覆Schollii! – Ben

+0

@ Ben Np。我很想知道你是否嘗試了上述任何一種。 – Schollii

+0

我沒有得到機會(我在發佈問題和看到您的回覆之間偶然發現了其他解決方案)。如果我有時間,我會考慮他們是否也解決了這個問題。 – Ben

0

我有同樣的問題,但從接受的答案中不能使用xl.RegisterXLL('C:/path/addin.xla'),因爲它只適用於.XLL文件,並且我有一個.XLA文件。

相反,我發現這工作:

xl = win32com.client.gencache.EnsureDispatch('Excel.Application') 

# Need to load the addins before opening the workbook 
addin_path = r'C:\path\addin.xla' 
xl.Workbooks.Open(addin_path) 
xl.AddIns.Add(addin_path).Installed = True 

wb = xl.Workbooks.Open(r"C:\my_workbook.xlsm")