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

这篇具有很好参考价值的文章主要介绍了用python复制粘贴excel指定单元格(可保留格式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

# 复制区域cell、带格式粘贴: 比如把a1:f16带格式复制粘贴到h23:m38

#导入包
import openpyxl
import 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=0
while 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的指定位置的数据了:文章来源地址https://www.toymoban.com/news/detail-536907.html

#插入库(同样库只用插入一遍)
import openpyxl
import 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] 

到了这里,关于用python复制粘贴excel指定单元格(可保留格式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【openpyxl】python处理excel——删除指定行

    本文给出了用 openpyxl 删除excel满足指定条件的行或列的正确示范,同时给出了一些网络资料的常见错误供读者参考 因为需要删除的行数不固定,正确示范应该采用 while 循环来遍历excel表,方便删除操作,网络上很多教程采用 for 循环,存在循环过程中行号改变的错误 以下例子

    2024年02月12日
    浏览(25)
  • Python-openpyxl-在Excel表格指定区域写入指定数据

    重点1:指定值要写成列表list形式,一行一个list,区域为一个大list; 重点2:定义的函数可以将Values按指定区域传入,在函数参数中指定起始行号和列号,即可通过函数遍历所有取值,得到该区域。

    2024年03月08日
    浏览(22)
  • Python——openpyxl读取Excel表格(读取、单元格修改、单元格加底色)

    🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:一晌小贪欢的博客主页 👍 该系列文章专栏:Python办公自动化专栏 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 ❤️ 欢迎各位佬关注! ❤️ 如我在K列,增加了

    2024年03月20日
    浏览(27)
  • Python用openpyxl操作Excel:读写、遍历、单元格读写

    openpyxl支持读写Excel,自带整合Pandas和NumPy功能。 worksheet cell

    2024年02月16日
    浏览(32)
  • excel表中复制粘贴有隐藏行的情况

    一、原始数据,没有任何隐藏的情况: 二、隐藏3、4行: 这种情况下: 三、我想复制粘贴出可见的内容,全选,ctrl+c复制 四、ctrl+v粘贴到别处,结果却是 发现隐藏的行也被复制粘贴出来了。并不是我们想要的。 解决办法: 在第“三”步中,全选可见内容后, 按alt+; ,即可

    2024年02月09日
    浏览(22)
  • Pandas读取excel合并单元格的正确姿势(openpyxl合并单元格拆分并填充内容)

    在pandas读取excel经常会遇到合并单元格的问题。例如: 此时使用pandas读取到的内容为: 如果去百度,几乎所有人会说应该用如下代码: 这样看起来没问题,但是,该解决方案并不能适用于所有场景,甚至会造成数据错误。 例如: 对班级和备注填充后: 孙武空本来是数据缺

    2024年02月03日
    浏览(24)
  • SAP ABAP Microsoft Excel 在剪贴板上有大量信息。是否保留其内容,以便此后粘贴到其他程序中?

    引言: 在 SAP 批导/上载 Excel 文件时,出现“在剪贴板上有大量信息。是否保留其内容,以便此后粘贴到其他程序中?”的弹窗提示,无论点击“是”、“否”、“取消”最终批导/上载都失败,数据为空。 : SAP ABAP Excel批导上载 ALSM_EXCEL_TO_INTERNAL_TABLE 在剪贴板上有大量

    2024年02月02日
    浏览(23)
  • excel快速选择数据、选择性粘贴、冻结单元格

    一、如何快速选择数据 在excel中,希望选择全部数据,通常使用鼠标选择数据然后往下拉,当数据很多时,也可单击单元格使用ctrl + A选中全部数据,此外,具体介绍另一种方法。 操作:ctrl + shift + 方向箭头 1、优点:可以快速选择规模较大的区域数据 2、缺点:如果起始行或

    2024年02月12日
    浏览(21)
  • 信创办公–基于WPS的EXCEL最佳实践系列 (数据整理复制粘贴)

    信创办公–基于WPS的EXCEL最佳实践系列 (数据整理复制粘贴) 数据的整理复制粘贴等在日常的工作中经常使用。本章内容主要学习对数据进行查找与替换、整理、编辑、拆分多列和应用数字格式,数据处理过程中的步骤,可以帮助我们更好的学习、组织及理解数据。 (1)选

    2024年02月07日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包