2016-10-02 68 views
1

作爲開源輔助技術項目(here)的一部分,我通過python API(python-pptx)訪問PowerPoint文件。這兩種PowerPoint形狀的方式不同(通過API訪問)

當我看着顏色時,某些形狀會引起異常。但很難看出哪一個。

我創造了這個小例子:https://www.dropbox.com/s/o5z22lqwb66jemq/forUpload.pptx?dl=0

而事實上,這裏是截圖:

enter image description here

它由一個單一的幻燈片,與左邊工作的形狀和形狀那在右邊失敗。使用格式畫家將使形狀起作用(或不依賴於格式的來源),但我已經通過各種方式檢查我能想到的格式,並且這兩組形狀看起來完全相同。

最小示例中的兩組形狀如何不同? 。

(對於那些誰可能是從一個API點興趣引起該問題的行是:

self.colours[co][ro] = shape.fill.fore_colour.rgb 

這是https://github.com/joereddington/TheOpenVoiceFactory/blob/master/grab_text.py

和例外是:

Traceback (most recent call last): File "grab_text.py", line 374, in <module> 
    grids = extract_grid(prs) File "grab_text.py", line 353, in extract_grid 
    grids.append(Grid(prs, slide, gridSize)) File "grab_text.py", line 119, in __init__ 
    self.process_shape(shape) File "grab_text.py", line 164, in process_shape 
    ro] = shape.fill.fore_color.rgb File "/Library/Python/2.7/site-packages/pptx/dml/fill.py", line 43, in fore_color 
    return self._fill.fore_color File "/Library/Python/2.7/site-packages/pptx/dml/fill.py", line 161, in fore_color 
    raise TypeError(tmpl) TypeError: a transparent (background) fill has no foreground color 

+0

有在例如四張幻燈片。哪一個對應於你左邊的工作描述,對不對? – scanny

+0

另外,當你得到異常時,你到底在做什麼以及什麼是完整的堆棧跟蹤? – scanny

+0

@scanny,道歉,錯誤的鏈接。我還添加了一些與代碼相關的東西。 – Joe

回答

0

您需要撥打:

shape.fill.solid() 

嘗試訪問fore_color屬性之前。

填充可以有幾種類型,每種類型都有不同的屬性集。 .fore_color屬性特定於實心填充。默認情況下,填充是透明的(即無)。

多一點關於它的文檔在這裏: http://python-pptx.readthedocs.io/en/latest/user/autoshapes.html#fill

+0

工作 - 我會對答案做一個小小的修改 - 它有點違反直覺,這個調用必須在閱讀之前完成,而不是寫入...... :) – Joe

+0

@Joe:更新以澄清。 – scanny