900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > python使用win32com复制Excel图表

python使用win32com复制Excel图表

时间:2020-08-01 15:28:03

相关推荐

python使用win32com复制Excel图表

python使用win32com复制Excel图表

需求win32com安装代码详细使用说明

需求

需求:制作一个含有图表和公式的excel表模板,根据模板复制N份excel表,并重命名表名,将数据填入到对应excel表中,每个表中的图表和公式根据数据实时更新。。

win32com安装

安装win32com需要安装pywin32

pip install pywin32

代码详细使用说明

首先要制作好一个模板excel表,并含有公式和图表

import pythoncom,win32com,osnewFileName='pythoncomdemo.slsx'pythoncom.CoInitialize()#initialization# current_address = os.path.abspath('.')# excel_address = join(current_address,newFileName)# print excel_address# xl_app = win32com.client.gencache.EnsureDispatch("Excel.Application")# # xl_app.Visible = True# wb = xl_app.Workbooks.Open(excel_address)xl_app = win32com.client.DispatchEx('Excel.Application')#Start a new excel.if already open a excel,still start a new.# xl_app = win32com.client.Dispatch('Excel.Application')#Start a new excel.if already open a excel ,do not start a new.absPath = os.path.abspath(newFileName)wb = xl_app.Workbooks.Open(absPath)for i in range(0,10):#生成10个excel表sht = wb.Worksheets('tempture') #获得模板表new_sht_name = 'newsheet%s'%i #新表名称为'newsheet%s'%isht.Copy(Before=sht)#复制新表位于在模板表前面,且为活动表wb.ActiveSheet.Name = new_sht_name#给当前活动表重命名copyshett=wb.Worksheets(new_sht_name)#获得新表#print copyshett.Range("L22").Valuewb.Save()#保存excelwb.Close()#关闭excelpythoncom.CoUninitialize()#Release resources

以上代码复制了10个模板表,使用win32com可以将图表一起复制。使用openpyxl对excel表进行数据的填写。以下为将数据写入excel表的代码

from openpyxl import load_workbookworkbook = load_workbook(newFileName, data_only=False)#data_only=False为以公式形式读写excel,可不写;data_only=True为以数值形式读写excelsheetnames = workbook.get_sheet_names()ws1 = workbook.get_sheet_by_name(sheetnames[0])#Get the first tableworkbook.remove_sheet(workbook.get_sheet_by_name(tempsheet))#根据表名删除excel表ws1['C3'] = 12#往C3单元格写入数字12ws1[chr(65) + str(7)]='chr'#往A7单元格中写入字符串chrws1['D1']='=IF(LEN(B'+str(7)+')>0, ROW()-8)'#往B7写入公式,数字为当前行数减去8ws1.cell(row=3,column=5).value='hebingdanyuange'ws1.cell(row=3, column=5).alignment = Alignment(horizontal="center", vertical="center")#E3单元格居中显示ws1.merge_cells(start_row=3, start_column=5, end_row=3, end_column=6)#合并单元格E3:G3ws1.cell(row=3, column=5).fill = PatternFill("solid", fgColor="DC143C")#合并单元格颜色为红色value=ws1['L22'].value#获得单元格L22的值workbook.save(newFileName)#保存excel,括号中输入新的excel名称可以另存为新excelworkbook.close()

以下为win32com往excel中读写数据

ws1.Range('C3').Value = 'win32com'#往excel中写入数据value=ws1.Range("L22").Value#获得L22单元格的值xl_app.Worksheets('SUMMARY').Activate()#指定sheet为活动sheet

注:在使用workbook = load_workbook(newFileName, data_only=False)读取含有公式的单元格值时读取到的是公式;若使用workbook = load_workbook(newFileName, data_only=True)读取到的是None时,需要使用win32com打开并保存关闭后即可读取到公式计算后的数值。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。