問題1、增加圖表,按網上搜索的設置圖表標題一直報錯(pywintypes.com_error: (-2147352567, '發生意外。', (0, 'S', '該對象無標題。', None, 0, -2147024809), None))
問題2、標簽問題位置調整,標簽默認在圖表右側
問題3、遇到具體問題的處理方法,比如:msoElementChartTitleAboveChart 雙面 在圖表上方顯示標題。這個參數的枚舉值顯示為雙面,要換成具體的int型數字的方法。
下面列舉具體的問題原因及解決方法:
1 # generate chat 2 chart = sht.charts.add(500, 10) 3 chart.set_source_data(sht.range("B7:E8")) 4 chart.chart_type = 'pie_exploded' 5 chart.api[1].ChartTitle.Text = 'TestReport' # change the title name
這部分代碼跟網上找到的都一樣,比如這個篇:https://blog.csdn.net/weixin_42146296/article/details/103647940,但很納悶運行這段代碼正常,運行我自己的就報錯,然后把生成的圖表手動去操作時發現標題選項未勾選,代碼默認生成的報告就不包含標題對象,此時再去看原來的報錯,已經明確提示了“該對象無標題”,如問題1中后面紅色字體加粗部分,只怪當時也看不懂這句什么意思,一步一步嘗試才發現這個坑
那接下來首選就是要讓這個標題通過代碼使能,並進行顯示出來,然后才能去改標題,使用excel的錄抽宏功能,就能很正常的知道使用api的哪個屬性了,錄制宏過程請看前一篇文章,此處跳過,直接列出宏
修改代碼如下:
1 # generate chat 2 chart = sht.charts.add(500, 10) 3 chart.set_source_data(sht.range("B7:E8")) 4 chart.chart_type = 'pie_exploded' 5 chart.api[1].SetElement('msoElementChartTitleAboveChart') # enable the title show up 6 chart.api[1].ChartTitle.Text = 'TestReport' # change the title name
報錯如下:報錯的意思很明顯是整型的枚舉值
return self._oleobj_.InvokeTypes(2502, LCID, 1, (24, 0), ((3, 1),),Element
ValueError: invalid literal for int() with base 10: 'msoElementChartTitleAboveChart'
通過百度搜索關鍵字:msoElementChartTitleAboveChart,無語了微軟官網上也顯示有問題,竟然顯示“雙面”,這是什么意思,別急,繼續往下看,這個文檔錯誤還能把人憋死不成
繼續查看前面所錄制的宏,由於通過網頁查找到官網的也顯示有錯誤,只能再重新返回VBA去找辦法,光標放至msoElementChartTitleAboveChart並右鍵,選擇【快速信息】,顯示的值為2
所以重新修改代碼如下:
1 # generate chat 2 chart = sht.charts.add(500, 10) 3 chart.set_source_data(sht.range("B7:E8")) 4 chart.chart_type = 'pie_exploded' 5 chart.api[1].SetElement(2) # enable the title show up 6 chart.api[1].ChartTitle.Text = 'TestReport' # change the title name
生成的圖表如下:PERFECT
下面列出幾個給我啟發的文檔,應該是幫了我很大的忙:
2、使用xlwings 的API接口屬性方法,官方文檔鏈接
3、SetElement對應的詳細枚舉值