Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7764|回复: 15

python合并两个Excel文件的脚本

[复制链接]

该用户从未签到

8

主题

175

帖子

342

积分

普通会员

Rank: 2

积分
342
发表于 2024-10-23 07:26:01 | 显示全部楼层 |阅读模式
合并两个Excel文档:第一个文档如下:第二个文档如下:想要合并成下面图片的样子:
学习一段时间了,写了个python合并两个Excel文件的脚本,希望能帮助到像我一样的小白,代码简单,大佬勿喷。不足之处请您不吝赐教:下面代码实现:

# X$ p9 V& y- Y, \<ol>&quot;&quot;&quot;) _+ m) o( i# z% Z  m8 a
Date:2024/10/21 15:462 c. c  B' n+ l& Y: ~$ k
File : MergeExcel.py
9 c1 z8 s# f3 U: ~( g& o1 `+ L&quot;&quot;&quot;5 t) j6 [  t+ d$ c
from copy import copy1 S- D. U% w$ K6 |0 A5 O% f% H9 E; @# d
from openpyxl import load_workbook
) ~' Z+ p2 u* o: z- q0 c0 z" h; G4 p  q6 w6 _/ n' |9 d
% d( a+ L# W& a; }" n
class MergeExcel:+ a3 U7 e; W' Q% w. W* U3 j
    def __init__(self):" P% r* ~3 T" h% L# w
        e1 = &quot;fileDirectory/excel1.xlsx&quot;
( E, n, |$ c7 x8 ~( n+ I        e2 = &quot;fileDirectory/excel2.xlsx&quot;
, x2 c( Q3 h/ V1 C        self.wb1 = load_workbook(e1). L, K3 S% m* [3 @6 `- b
        self.wb2 = load_workbook(e2)
9 x; Z0 }4 d0 t; f        self.sheet1 = self.wb1.active
- ^1 h. l7 k0 I; y; Q/ j+ s6 i# O        self.sheet2 = self.wb2.active1 f' w1 x6 @$ f+ r: L+ J6 v( x
        self.insert_row = 99             # 这里设置从哪行插入第一张表的数据 或者 self.sheet2.max_row + 1: s$ G7 |/ z# z$ e8 G# i6 T

7 e' J; `; o8 p% U# W3 c7 t    @staticmethod
1 O$ M* i) c8 i    def copy_style(source_cell, target_cell):
0 C5 D6 k; w$ ^" |( i" i0 a        if source_cell.has_style:0 ^! Z1 _3 k- p: B9 Z
            target_cell.font = copy(source_cell.font)
; d+ F3 E: ~8 W+ I6 y            target_cell.fill = copy(source_cell.fill)
! X" P+ W. E$ i7 P            target_cell.border = copy(source_cell.border)
; H$ {& K+ T# x. e5 L- _            target_cell.alignment = copy(source_cell.alignment)
6 Q- K. h. {7 t/ D9 u) |2 Z            target_cell.number_format = source_cell.number_format
( @7 @5 t3 P0 ]8 w, V            target_cell.protection = copy(source_cell.protection)
5 c6 Z3 D3 |1 E! s# x            # 使用openpyxl库的cell.comment属性获取单元格的注释。
/ W( e! q- ^" A            if source_cell.comment:8 d6 m- K- p! L% H
                target_cell.comment = source_cell.comment  # 有批注的复制批注
" C* `% I+ u: B, ?% q3 Y
6 Q0 k! X0 H0 w- y. @7 p    def apply_merge_cell(self, merged_ranges):
7 ?1 x6 @2 _7 @1 N+ B        for min_row, min_col, max_row, max_col in merged_ranges:
" d' X+ x% V" p) ]) N& l            self.sheet2.merge_cells(start_row=min_row, start_column=min_col,# {5 k7 e* G: q' B
                                    end_row=max_row, end_column=max_col)
9 I! z' F/ f1 l& N3 W. d$ Z# t' |* K( n
    def copy_value_style(self, source_start_row, source_end_row, source_start_col, source_end_col, target_start_row,% D% z6 c6 V3 ?
                         target_start_col):! l. q2 V) A, h' }: n
        for row in range(source_start_row, source_end_row + 1):$ [+ n/ |3 y5 s0 u* L) N
            for col in range(source_start_col, source_end_col + 1):2 k; C, B. u2 Z1 B) ?
                source_cell = self.sheet1.cell(row=row, column=col)
! Y1 G9 M7 Z3 p; l- }% V                target_cell = self.sheet2.cell(row=row + target_start_row - source_start_row,: F) }9 C, P& }3 s, r
                                               column=col + target_start_col - source_start_col)
7 v% ^$ z2 t- u; U' _2 g                self.sheet2.cell(row=row + target_start_row - source_start_row,( @2 [* l8 E$ r7 m$ n
                                 column=col + target_start_col - source_start_col).value = source_cell.value
9 Q! z0 k9 ^  p
+ N! a( Q; ?, i2 m: F) u$ y& X, Z# |/ m                self.copy_style(source_cell, target_cell)1 E% g, R$ C) R

% v. I* D- K# k+ b2 c/ D) j    def copy_stats(self, source_start_row, source_end_row, source_start_col, source_end_col, target_start_row,
! g$ E" N0 k- K4 S9 t7 {  L( n                   target_start_col):! Z' ^4 }/ K) `; E, \7 V) I8 ~
        merged_ranges = []
1 d( H  D0 D7 x$ h1 _2 y) ?        for merge_range in self.sheet1.merged_cells.ranges:
) Q# s6 v  v8 g! B            min_col, min_row, max_col, max_row = merge_range.bounds/ m* D2 Y0 ~+ V, E8 y
            print(min_row, min_col, max_row, max_col)% j# _) S7 Q. t' E8 P$ \
            print(source_start_row, source_start_col,source_end_row, source_end_col)
; j  J, ]  `8 m. M            if (min_row >= source_start_row and max_row = source_start_col and max_col
回复

使用道具 举报

该用户从未签到

8

主题

163

帖子

332

积分

普通会员

Rank: 2

积分
332
发表于 2024-10-23 07:53:20 | 显示全部楼层
这个代码量、、、、、、、、、、、、、、
回复 支持 反对

使用道具 举报

  • TA的每日心情
    无聊
    2015-8-7 17:52
  • 签到天数: 1 天

    [LV.1]初学乍练

    0

    主题

    4411

    帖子

    8833

    积分

    普通会员

    Rank: 2

    积分
    8833
    发表于 2024-10-23 18:41:05 | 显示全部楼层
    真是好资料
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4361

    帖子

    8722

    积分

    普通会员

    Rank: 2

    积分
    8722
    发表于 2024-10-30 22:04:34 | 显示全部楼层
    努力学习努力学习努力学习
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4507

    帖子

    9016

    积分

    普通会员

    Rank: 2

    积分
    9016
    发表于 2024-11-6 09:21:06 | 显示全部楼层
    好资源收下了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4406

    帖子

    8814

    积分

    普通会员

    Rank: 2

    积分
    8814
    发表于 2024-11-18 17:18:08 | 显示全部楼层
    这么多好资源
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4513

    帖子

    9028

    积分

    普通会员

    Rank: 2

    积分
    9028
    发表于 2024-11-25 23:45:38 | 显示全部楼层
    好资源
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-8-10 10:38
  • 签到天数: 5 天

    [LV.2]登堂入室

    0

    主题

    4411

    帖子

    8905

    积分

    普通会员

    Rank: 2

    积分
    8905
    发表于 2024-12-10 14:19:10 | 显示全部楼层
    可以看看吗
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4441

    帖子

    8884

    积分

    普通会员

    Rank: 2

    积分
    8884
    发表于 2024-12-12 10:22:02 | 显示全部楼层
    厉害厉害,很强很强
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4435

    帖子

    8872

    积分

    普通会员

    Rank: 2

    积分
    8872
    发表于 2024-12-13 13:17:05 | 显示全部楼层
    不错 高清晰
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2025-2-19 05:56 , Processed in 0.154262 second(s), 24 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表