2016-12-16 142 views
2

我正在使用openpyxl寫入工作簿。但是該工作簿需要關閉以編輯它。有沒有辦法寫一個打開的Excel表格?我想要一個使用命令行運行Python代碼並填充單元格的按鈕。如何使用Python寫入打開的Excel文件?

我建立的當前進程使用VBA關閉文件,然後Python將其寫入並再次打開它。但這是無效的。這就是爲什麼我需要一種寫入打開文件的方式。

+0

你是否特意使用openpyxl?我通常更喜歡xlrd和xlwt,因爲它們具有相同的靈活性。 – SashaZd

+0

我沒有理由專門使用openpyxl。到目前爲止,我已經能夠同步VBA和python,並且openpyxl正在做一份體面的工作。爲什麼你建議使用xlwt或xlrd? –

+0

@SashaZd這是脫離主題,但你提到了xlwt作爲一個選項。 Openpyxl一直給我一些格式問題。就此而言,xlwt更好嗎?它保持Excel格式嗎? –

回答

2

通常,兩個不同的進程不應該寫入同一個文件,因爲它會導致同步問題。

更好的方法是關閉父進程(又名VBA代碼)中的現有文件,並將工作簿的位置傳遞給python腳本。

python腳本將打開它並寫入單元格中的內容並退出。

+0

因此,VBA代碼執行Python代碼並關閉Excel文件。 Python代碼完成其工作並將其寫入到已關閉的相同Excel文件中,然後將其打開。 但是,我正在嘗試構建的這種工具將涉及大量的交互,並且每次發生這種情況時,我都不希望Excel工作簿被關閉並編輯,然後再次打開。就像VBA代碼可以寫入一個打開的Excel文件一樣,我試圖用Python來實現同樣的功能。 –

+0

我不認爲excel工作簿具有任何種類的同步原語以允許兩個併發寫入。 Python不知道VBA代碼已經打開了這個文件,同樣也適用於VBA代碼。我同意你的看法,可能會有很多互動,但最終的產品可能會更可靠。另外,我不認爲多次打開和關閉文件是非常耗時的。 –

2

不可能,因爲Excel文件不支持併發訪問。

+0

COM與openpyxl有什麼關係? –