Мой код Python для создания диаграмм из pywin32 в Excel:
def add_chart1(location, sheet, range1, title, left, right, height, width, charttype):
pythoncom.CoInitialize()
xl = win32.gencache.EnsureDispatch('Excel.Application')
xl.Visible = True
ss = xl.Workbooks.Open("demo.xlsx")
worksheet = ss.Worksheets.Item(sheet)
workchart = worksheet.ChartObjects().Add(left, right, height, width).Activate()
xl.ActiveChart.ChartType = charttype
xl.ActiveChart.Axes(c.xlValue).HasMajorGridlines = False
xl.ActiveChart.Axes(c.xlCategory).HasTitle = True
xl.ActiveChart.SetSourceData(Source=worksheet.Range(range1))
#workchart.ChartType = 57 # 3DPie
xl.ActiveChart.HasTitle = True
workchart_title = xl.ActiveChart.ChartTitle
workchart_title.Text = title
xl.ActiveChart.HasLegend = True
xl.ActiveChart.Legend.LegendEntries(1)
xl.ActiveChart.Legend.Position = -4107 # Right Position
ss.SaveAs("demo.xlsx")
ss.Close(False); workbook=None
xl.Application.Quit()
Я выполняю это в приложении колбы. Вызов функции:
import win32com.client as win32
from win32com.client import constants as c
import pythoncom
from flask import *
app = Flask(__name__)
@app.route('/', methods = ['POST'])
def index():
add_chart1('demo.xlsx', 'Chart',range1, 'Visualization', 350, 32, 600, 300, c.xlColumnClustered)
Результат:
File "C:\Anaconda3\Lib\site-packages\win32com\client\__init__.py", line 178, in __getattr__
raise AttributeError(a)
AttributeError: xlColumnClustered
Как видно из других вопросов SO, я очистил кеш в каталоге temp\1\gen_py, но ошибка все равно сохраняется.
Я попробовал все решения этого вопроса.
Но ни один из них не сработал.
Иногда перечисление xlChartType не загружается в первом экземпляре. В таких случаях вместо названий указывайте номер диаграммы, т. е. ее значение. для xlColumnClustered это 51
Значения вы можете найти здесь
Почему вы ожидаете, что
constants
отwin32com.client
будет иметьxlColumnClustered
? Из документации видно, что значениеxlColumnClustered
будет51
, если у вас нет доступа к перечислению.