返回顶部
首页 > 资讯 > 后端开发 > Python >用python复制粘贴excel指定单元格(可保留格式)
  • 811
分享到

用python复制粘贴excel指定单元格(可保留格式)

excelpython自动化 2023-09-01 08:09:21 811人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

近期学习了openpyxl的用法,发现居然没有【复制、粘贴】这么基础的函数。而且若要用python带格式复制粘贴指定区域的单元格,参考资料更少。 于是参考各路大佬的笔记,整合如下。 本代码只完成一次复制粘贴,各位可根据自己的需要加以利用,比

近期学习了openpyxl的用法,发现居然没有【复制、粘贴】这么基础的函数。而且若要用python带格式复制粘贴指定区域的单元格,参考资料更少。

于是参考各路大佬的笔记,整合如下。

本代码只完成一次复制粘贴,各位可根据自己的需要加以利用,比如:可搭配遍历文件等实现多个excel中指定区域的复制,并汇总于指定区域的内容。

# 复制区域cell、带格式粘贴: 比如把a1:f16带格式复制粘贴到h23:m38#导入包import openpyxlimport copy#path单引号内放入指定要操作的excel的路径 (本文举例的复制与粘贴,位于同一excel的同一sheet)path = r'E:\OneDrive\Python_Note\Excel操作\03\反馈表-小寨支行.xlsx' wb = openpyxl.load_workbook(path)ws = wb.active  #本行代码意思是指定ws为当前在excel中处于选中状态的sheet为ws。                #若excel内有多个sheet,建议使用ws=wb['sheet的名字']#以字符串输入复制、粘贴的区域,如'a1:f16','h23:m38'(必须大小一致)Source_Area = 'a1:f16'  Target_Area = 'h23:m38'#分别指定复制和粘贴所在sheet的位置(本文复制粘贴的单元格区域都在ws内,ws是什么在上面已经指定好)source_area = ws[Source_Area]   target_area = ws[Target_Area]  #创造source_cell_list,用以和target_cell_list一一对应:source_cell_list = []for source_row in source_area:    for source_cell in source_row:        sc_str = str(source_cell)          point_time = sc_str.count('.')        sc_str = sc_str.replace('.', '', point_time - 1)        start = sc_str.find('.')        sc_str = sc_str[start+1 : -1]        source_cell_list.append(sc_str) #提取出单元格编号的字符串,如'C8'print('source_cell_list:',source_cell_list)target_cell_list = []for target_row in target_area:    for target_cell in target_row:        tc_str = str(target_cell)          point_time = tc_str.count('.')        tc_str = tc_str.replace('.', '', point_time - 1)        start = tc_str.find('.')        tc_str = tc_str[start + 1: -1]        target_cell_list.append(tc_str)  # 提取出单元格编号的字符串,如'L10'print('target_cell_list:',target_cell_list)#获取要复制的单元格总个数:cells = len(source_cell_list) #提取并复制格式:i=0while i<=cells-1:    ws[target_cell_list[0+i]].data_type = ws[source_cell_list[0+i]].data_type    if ws[source_cell_list[0+i]].has_style:        ws[target_cell_list[0+i]]._style = copy.copy(ws[source_cell_list[0+i]]._style)        ws[target_cell_list[0+i]].font = copy.copy(ws[source_cell_list[0+i]].font)        ws[target_cell_list[0+i]].border = copy.copy(ws[source_cell_list[0+i]].border)        ws[target_cell_list[0+i]].fill = copy.copy(ws[source_cell_list[0+i]].fill)        ws[target_cell_list[0+i]].number_fORMat = copy.copy(ws[source_cell_list[0+i]].number_format)        ws[target_cell_list[0+i]].protection = copy.copy(ws[source_cell_list[0+i]].protection)        ws[target_cell_list[0+i]].alignment = copy.copy(ws[source_cell_list[0+i]].alignment)    # 通过引用方法粘贴值: ws['']=ws[''].value    ws[target_cell_list[0+i]] = ws[source_cell_list[0+i]].value    i+=1#保存更改:(若复制粘贴来源于不同文件要分别保存)wb.save(r'E:\OneDrive\Python_Note\Excel操作\03\反馈表-小寨支行-py改.xlsx')

再补充一下如何遍历到某个文件夹下所有的excel。这样就可以实现批量自动提取每个excel的指定位置的数据了:

#插入库(同样库只用插入一遍)import openpyxlimport os#指定文件夹路径:path = r'E:\OneDrive\Python_Note\Excel操作'#使用for循环对文件夹内的每个excel进行相同操作:for file_name in os.listdir(path):    if file_name.endswith('.xlsx') or file_name.endswith(".xls"):        #本次循环对象excel文件的绝对路径:        excel = path + '\\' + file_name         print('开始执行:',excel)        wb = openpyxl.load_workbook(excel)        #以下开始是在每个excel内的所需操作(根据自己需要)                ws = wb.active #指定sheet名,推荐操作的excel都只有一个sheet时用,可以解决各excel里sheet名称不同的问题。        Source_Area = 'a1:f16'          Target_Area = 'h23:m38'             source_area = ws[Source_Area]           target_area = ws[Target_Area] 

来源地址:https://blog.csdn.net/m0_73769011/article/details/130474346

--结束END--

本文标题: 用python复制粘贴excel指定单元格(可保留格式)

本文链接: https://lsjlt.com/news/387791.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作