Use Python para hacerlo: herramienta de combinación / división de archivos EXCEL (incluida la versión VBA)

Prefacio:

¿Qué hace cuando ha recopilado los registros EXCEL de n individuos y necesita agregarlos en una tabla de resumen? Si no utiliza medios técnicos, sería muy problemático abrir, copiar y pegar uno por uno. En este punto, necesita una herramienta que pueda completar la fusión en unos segundos.

Uno, fusiona EXCEL

1. VBA se da cuenta de la fusión

Sin rutina, el siguiente código VBA (de la red, después de la modificación):

Sub 合并当前目录下所有工作簿的全部工作表()
Dim MyPath, MyName, AWbName
Dim Wb As Workbook, WbN As String
Dim G As Long
Dim Num As Long
Dim BOX As String
Application.ScreenUpdating = False
MyPath = ActiveWorkbook.Path
MyName = Dir(MyPath & "\" & "*.xls")
AWbName = ActiveWorkbook.Name
Num = 0
Do While MyName <> ""
If MyName <> AWbName Then
Set Wb = Workbooks.Open(MyPath & "\" & MyName)
Num = Num + 1
With Workbooks(1).ActiveSheet
.Cells(.Range("B200000").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4)
For G = 1 To Sheets.Count
Wb.Sheets(G).UsedRange.Copy .Cells(.Range("B200000").End(xlUp).Row + 1, 1)
Next
WbN = WbN & Chr(13) & Wb.Name
Wb.Close False
End With
End If
MyName = Dir
Loop
Range("B1").Select
Application.ScreenUpdating = True
MsgBox "共合并了" & Num & "个工作薄下的全部工作表。如下:" & Chr(13) & WbN, vbInformation, "提示"
End Sub

No importa si no lo entiende, ya no necesita aprender VBA, simplemente ejecute y listo. Entonces, ¿cómo se usa?

Hay 3 tablas EXCEL para fusionar en el siguiente directorio, y los datos en cada tabla son diferentes,
Inserte la descripción de la imagen aquí
cree un archivo EXCEL y ábralo para almacenar los datos fusionados;
Figura

Abra la interfaz VBA a través de la tecla de método abreviado Alt + F11;
Figura

Abra Sheet1, copie y pegue el código anterior en él, presione F5 para ejecutar;
Figura

Los datos de los otros 3 archivos EXCEL en el mismo directorio se fusionarán aquí;
Figura

Existen varios métodos para la automatización de oficinas. Veamos cómo el omnipotente Python implementa esta función.

2. Python implementa merge

Vaya directamente al código, consulte la nota para obtener instrucciones:

def merge_excel(dir):
    print('--- 执行合并 ---')
    filename_excel = [] # 存表名
    frames = [] # 存表内容
    d = dir.replace('/','\\\\') # 因pandsa读取路径为双斜杠,需转换
    if d.endswith('\\\\') == False: # 若为磁盘根目录则路径结尾自带\\,若为文件夹则无,需添加\\
        d = d + '\\\\'
    print("路径是:",d,"\n有以下文件:")
    for files in os.listdir(path=dir): # 遍历目录下的文件
        print(files)
        if 'xlsx' in files or 'xls' in files : # 搜索xlsx/xls后缀文件
            filename_excel.append(files)	
            df = pd.read_excel(d+files) # 读取一个表内容存入一个DataFrame
            frames.append(df)
    if len(frames)!= 0: # 若存在EXCEL表则合并保存
        result = pd.concat(frames) # 上下连接多个df
        result.to_excel(d+"合并结果表.xlsx")

merge_excel("D:/某文件夹")

Segundo, dividir EXCEL

Dividir durante mucho tiempo y dividir durante mucho tiempo ( esta oración no está tan citada ). Entonces, si desea distribuir el trabajo, por ejemplo, ¿cómo dividir una tabla grande en varias tablas pequeñas de acuerdo con el número de filas? Primero echemos un vistazo a la versión de VBA.

1. Dividido por VBA

Sub ChaiFenSheet()
    Dim r, c, i, WJhangshu, WJshu, bt As Long
    r = Range("A" & Rows.Count).End(xlUp).Row
    b = InputBox("请输入分表行数")
    If IsNumeric(b) Then
           WJhangshu = Int(b)
        Else
            MsgBox "输入错误", vbOKOnly, "错误"
            End
    End If
    c = Cells(1, Columns.Count).End(xlToLeft).Column
    bt = 1 '标题行数
    'WJhangshu = 50 '每个文件的行数
    WJshu = IIf(r - bt Mod WJhangshu, Int((r - bt) / WJhangshu), Int((r - bt) / WJhangshu) + 1)
    
    '------
    Set fs = CreateObject("Scripting.FileSystemObject") '
    For i = 0 To WJshu
        Workbooks.Add
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Format(i + 1, String(Len(WJshu), 0)) & "." & fs.GetExtensionname(ThisWorkbook.FullName)   '扩展名
        Application.DisplayAlerts = True
        ThisWorkbook.ActiveSheet.Range("A1").Resize(bt, c).Copy ActiveSheet.Range("A1")
        ThisWorkbook.ActiveSheet.Range("A" & bt + i * WJhangshu + 1).Resize(WJhangshu, c).Copy _
        ActiveSheet.Range("A" & bt + 1)
        ActiveWorkbook.Close True
    Next
End Sub

De manera similar a la tabla combinada, primero abra la tabla grande que se dividirá, presione Alt + F11 para ingresar a la interfaz VBA y luego presione F5 para ejecutar el código. Como se muestra en la figura siguiente, 15 tareas en una tabla se dividen en 3 tablas nuevas
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

2. Python implementa split

El código fuente de la parte dividida fue escrito por mi colega yang:

def split_excel(path,num):
    # print("--- 执行拆分 ---")
    p = path.replace('/', '\\\\') # 传入pd库read_excel方法的路径,含文件名
    dir = p[ : p.rfind('\\') + 1 ] # 输出被拆分表的目录,不含文件名
    sheetname = path[ path.rfind('/') + 1 :].strip('.xlsx').strip('.xlx') # 无后缀的文件名
    data = pd.read_excel(p) # 数据
    nrows = data.shape[0]  # 获取行数
    split_rows = num # 自定义要拆分的条数,即分隔成多少行一份
    count = int(nrows/split_rows) + 1  # 拆分的份数
    # print("应当拆分成%d份"%count)
    begin = 0
    end = 0
    for i in range(1,count+1):
        sheetname_temp = sheetname+str(i)+'.xlsx' # 拆分后的每个表名
        if i == 1:
            end = split_rows
        elif i == count:
            begin = end
            end = nrows
        else:
            begin = end
            end = begin + split_rows
        print(sheetname_temp)
        data_temp = data.iloc[ begin:end , : ] # [ 行范围 , 列范围 ]
        data_temp.to_excel(dir + sheetname_temp)
    # print('拆分完成')

split_excel("test.xlsx",5)

Como fanático de PyQt5 y del dibujo, puse estas dos piezas de código en la interfaz y las empaqueté en un pequeño dispositivo. El ícono del archivo exe es una combinación de letras X y L dibujadas por el autor ( porque la lectura de velocidad XL es EXCEL ), Los íconos de funciones de fusión y división también son muy vívidos (un alarde serio de vender melones ). El programa ejecutable y el código fuente completo se han subido a github (← clic), ¡bienvenido a descargar y usar!

Figura

¡gracias por leer!

Supongo que te gusta

Origin blog.csdn.net/zohan134/article/details/107291303
Recomendado
Clasificación