Графики теряются при перезаписи в существующий файл Excel в Python

Я использую openpyxl для записи в существующий файл, и все работает нормально. Однако после сохранения данных в файле графики исчезают.

Я понимаю, что Openpyxl в настоящее время поддерживает создание диаграмм только на листе. Диаграммы в существующих книгах будут потеряны.

Есть ли в Python альтернативные библиотеки для этого. Я просто хочу передать несколько значений, поэтому все графики и расчеты происходят в Excel.

Спасибо.

2 ответа

Решение

Это в настоящее время (версия 2.2) невозможно.

Я получил альтернативное решение для выполнения макроса Excel из Python, который может быть решением для вышеупомянутой проблемы.

Создайте ExcelWorkbook.xlsm и напишите макрос Excel (который очень прост, вам может помочь перекодирование макросов Excel) для любой задачи, которую вы хотите выполнить, и запустите макрос из python. График и форма объекта будут в безопасности.

openpyxl может использоваться для написания и чтения ExcelWorkbook.xlsm

from openpyxl import Workbook, load_workbook
import os
import win32com.client

#The excel macro should be written and saved (Excelworkbook.xlsm) before using this code. 
#Use macro codeExcelworkbook.xlsm to edit ExcelWorkBookContainGraph.xlsx
##################### Openpyxl #####################
#Open the Excelworkbook.xlsm (Macro workbook)
wb = load_workbook(filename='Excelworkbook.xlsm', read_only=False, keep_vba=True)
ws = wb.worksheets[0] #Worksheet will be sheet1[0]

##### Do the required task (read, write, copy..etc) in excel using openpyxl #####

#save Excelworkbook.xlsm
wb.save('Excelworkbook.xlsm')

#################### Run the excel macro #####################
if os.path.exists("Excelworkbook.xlsm"):
    xl=win32com.client.Dispatch("Excel.Application")
    xl.Workbooks.Open(Filename=os.path.dirname(os.path.abspath(__file__))+"\Excelworkbook.xlsm")#, ReadOnly=1)
    xl.Application.Run("Excelworkbook.xlsm!Module1.Macro1")
    xl.Application.Save() # if you want to save then uncomment this line and change delete the ", ReadOnly=1" part from the open function.
    xl.Application.Quit() # Comment this out if your excel script closes
    del xl  

############### Working with excel contains Graph ###############
xl=win32com.client.Dispatch("Excel.Application")
xl.Workbooks.Open(Filename=os.path.dirname(os.path.abspath(__file__))+"\ExcelWorkBookContainGraph.xlsx")#, ReadOnly=1)
try:
    xl.ActiveWorkbook.SaveAs("C:\ExcelExample\ExcelWorkBookContainGraph.xlsx")#Change the save path as per your requirment
    xl.Application.Quit() # Comment this out if your excel script closes
    del xl
except:
    #If you get some error while saving kill the running excel task in background
    print 'Error in saving file'
    xl.Application.Quit() # Comment this out if your excel script closes
    del xl  
Другие вопросы по тегам