簡體   English   中英

如何使用python-pptx替換現有折線圖的數據?

[英]How do you replace data for an existing line chart using python-pptx?

我有一個預先構建並已填充的PowerPoint演示文稿,其中正在修改圖表和表格的數據。 我想保留所有格式(以及大部分文本),但替換幻燈片中折線圖中的數據。

我有一個函數,該函數將使用與條形圖一起使用的pandas數據框替換數據。

def replaceCategoryChart(df, chart, skipLastCol=0):
    """
    Replaces Category chartdata for a simple series chart. e.g. Nonfarm Employment

    Parameters:
    df: dataframe containing new data. column 0 is the categories
    chart: the powerpoint shape chart.
    skipLast: 0=don't skip last column, 1+ will skip that many columns from the end

    Returns: replaced chart(?)
    """
    cols1= list(df)
    #print(cols1)
    #create chart data object
    chart_data = CategoryChartData()
    #create categories
    chart_data.categories=df[cols1[0]]
    # Loop over all series
    for col in cols1[1:-skipLastCol]:
        chart_data.add_series(col, df[col])
    #replace chart data
    chart.replace_data(chart_data)
...
S0_L=  pd.read_excel(EXCEL_BOOK, sheet_name="S0_L", usecols="A:F")
S0_L_chart = prs.slides[0].shapes[3].chart
print(S0_L)
replaceCategoryChart(S0_L, S0_L_chart)
...

python文件成功運行,但是,當我打開PowerPoint文件時,出現錯誤

Powerpoint found a problem with content in Name.pptx. 

Powerpoint can attempt to repair the presentation.

If you trust the source of this presentation, click Repair.

單擊修復后,我嘗試修改的幻燈片被替換為空白布局。

因為此功能適用於條形圖, 所以我認為在理解如何對折線圖使用replace_data()的方式上存在錯誤。

謝謝您的幫助!

如果您的“折線圖”是“ XY散點圖”,則需要一個不同的圖表數據對象XyChartData對象,然后填充其XySeries對象: https : XySeries 最新/ API /圖-data.html#pptx.chart.data.XyChartData

我建議先使用文字值(例如“ South”和1.05使其開始工作,然后再從Pandas數據框中提供值。 這樣,您可以確保代碼的python-pptx部分結構正確,並且知道在哪里查找出現的任何問題。

如scanny所述,replace_data()確實適用於類別折線圖。

修復錯誤是(可能)是由於不正確地添加系列數據而導致的(存在不良循環,下面已更正)。

    # Loop over all series
    for col in cols1[1:len(cols1)-skipLastCol]:
        print('Type of column is ' + str(type(col)))
        chart_data.add_series(col, df[col])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM