Enseñarle 4 formas de usar Python por lotes para fusionar múltiples Excel y múltiples Hojas

I. Introducción

Hola a todos, este es el programa Yuanyouyou. Compartí un artículo de automatización de Python con usted hace dos días: le enseñé cómo usar Python para dividir fácilmente Excel en varios archivos CSV , y luego un lector encontró un problema en el grupo de intercambio avanzado de Python. Tiene muchas tablas de Excel y necesita Combinar estos archivos de Excel.

imagen

Si encuentra dificultades para aprender y desea encontrar un entorno de aprendizaje y comunicación de Python, puede unirse a nuestro grupo QQ: 721195303, siga el editor, le ahorrará mucho tiempo y reducirá muchos problemas encontrados.

Por supuesto, es factible abrir la copia y pegar uno por uno, pero este método lleva mucho tiempo, es laborioso y propenso a errores. También se pueden procesar varios archivos manualmente. Si hay docenas o incluso cientos de ellos, será cegado. Sin embargo, este problema es para Python. ¡Tan fácil, echemos un vistazo!

 

2. Objetivos del proyecto

Utilice Python para realizar el procesamiento de combinación de múltiples Excel y múltiples Hojas.

 

3. Preparación del proyecto

Software: PyCharm

Bibliotecas necesarias: pandas, xlrd, os

 

Cuatro, análisis de proyectos

1) ¿Cómo elegir el archivo de Excel que se fusionará?

Utilice os para fusionar todos los archivos de Excel.

2) ¿Cómo seleccionar las hojas que se van a fusionar?

Utilice la biblioteca xlrd para leer en Excel y obtener el nombre de la hoja que se fusionará.

3) ¿Cómo fusionar?

Usando la biblioteca de pandas, abra todos los nombres de las hojas uno por uno en un ciclo y use concat () para agregar y combinar datos.

4) ¿Cómo guardar el archivo?

Use to_excel para guardar los datos y obtener el archivo de destino combinado final.

 

Cinco, realización del proyecto

1. El primer paso es importar las bibliotecas necesarias

import pandas as pd
import xlrd
import os

2. Seleccione el archivo de Excel que se fusionará en el segundo paso.

 #要合并文件路径
    path="D:/b/"
    #获取文件夹下所有EXCEL名
    xlsx_names = [x for x in os.listdir(path) if x.endswith(".xlsx")]

3. El tercer paso es seleccionar la hoja que se fusionará.

   # 获取第一个EXCEL名
    xlsx_names1 = xlsx_names[0]

    aa = path + xlsx_names1
    #打开第一个EXCEL
    first_file_fh=xlrd.open_workbook(aa)
    # 获取SHEET名
    first_file_sheet=first_file_fh.sheets()

4. El cuarto paso es combinar el contenido de la hoja en un bucle.

   #按SHEET名循环
    for sheet_name in sheet_names:
        df = None
        # 按EXCEL名循环
        for xlsx_name in xlsx_names:
            sheet_na = pd.ExcelFile(path + xlsx_name).sheet_names
            if sheet_name in sheet_na:
                #print(sheet_name)
                _df = pd.read_excel(path + xlsx_name, sheet_name=sheet_name,header=None)
                if df is None:
                    df = _df
                else:
                    df = pd.concat([df, _df], ignore_index=True)
            else:continue

5. El quinto paso es guardar el archivo combinado.

 
 
      df.to_excel(excel_writer=writer, sheet_name=sheet_name, encoding="utf-8", index=False)
        print(sheet_name + "  保存成功!共%d个,第%d个。" % (len(sheet_names),num))
        num += 1
    writer.save()
    writer.close()

 

Seis, visualización de efectos

1. Datos de Excel antes del procesamiento:

imagen

2. Indicación de progreso de la operación:

3. El resultado después de la fusión:

 

Siete, resumen

Este artículo presenta cómo usar Python para fusionar varios archivos de Excel y varias hojas, lo que reduce muchos de los problemas de copiar y pegar, ahorra tiempo y esfuerzo, no es fácil cometer errores, no tiene mucho código y la adición de bucle es un poco incómodo. Piénsalo y entenderás. Si no entiendes, deja un mensaje y haz preguntas en cualquier momento, aprendamos y progresemos juntos.

Los amigos que tengan ideas también pueden empaquetar el código en el artículo para hacer un pequeño software ejecutable exe, empaquetarlo y enviarlo a otros para que lo usen, o ganar una propina. El tutorial sobre empaque no se repetirá aquí, bienvenido a ir: Tres Comandos de empaquetado de Pyinstaller que debe recordar: use Python para lograr el empaquetado exe .

 

Ocho huevos de pascua

Los siguientes dos códigos son proporcionados por amigos en el grupo, y el editor también lo ha probado por sí mismo. El pro-test es efectivo, ¡y todos son bienvenidos a probarlo activamente!

Código del amigo del grupo Jayson:

# -*- coding: utf-8 -*-
# @Author: hebe
# @Date:   2020-04-18 18:31:03
# @Last Modified by:   hebe
# @Last Modified time: 2020-04-18 19:40:48
import os 
import glob
import openpyxl

def merge_xlsx_files(xlsx_files):
    wb = openpyxl.load_workbook(xlsx_files[0])
    ws = wb.active
    ws.title = "merged result"

    for  filename in xlsx_files[1:]:
        workbook = openpyxl.load_workbook(filename)
        sheet = workbook.active
        for row in sheet.iter_rows(min_row=1):
            values = [cell.value for cell in row]
            ws.append(values)
    return wb

#path is very important here , must true.
def get_all_xlsx_files(path):
    xlsx_files = glob.glob(os.path.join(r'C:\\Users\\pdcfi\\Desktop\\', '*.xlsx'))
    sorted(xlsx_files, key=str.lower)
    return xlsx_files

def main():
    xlsx_files = get_all_xlsx_files(os.path.expanduser('~lmx'))
    wb = merge_xlsx_files(xlsx_files)
    wb.save('merged_form.xlsx')

if __name__ == '__main__':
    main()
    
print("all excel append OK!")

Código de mi amigo Liu Zaoqi:

# -*- coding: utf-8 -*-
from openpyxl import load_workbook, Workbook
import glob

path = "C:\\Users\\pdcfi\\Desktop\\excel\\"
new_workbook = Workbook()
new_sheet = new_workbook.active

# 用flag变量明确新表是否已经添加了表头,只要添加过一次就无须重复再添加
flag = 0

for file in glob.glob(path + '/*.xlsx'):
    workbook = load_workbook(file)
    sheet = workbook.active

    coloum_A = sheet['A']
    row_lst = []
    for cell in coloum_A:
        if cell:
            print(cell.row)
            row_lst.append(cell.row)

    if not flag:
        header = sheet[1]
        header_lst = []
        for cell in header:
            header_lst.append(cell.value)
        new_sheet.append(header_lst)
        flag = 1

    for row in row_lst:
        data_lst = []
        for cell in sheet[row]:
            data_lst.append(cell.value)
        new_sheet.append(data_lst)

new_workbook.save(path + '/' + '符合筛选条件的新表.xlsx')

Código de Qunyou Engineer:

import tkinter as tk
from tkinter import filedialog
import os
import pandas as pd
import glob

root = tk.Tk()
root.withdraw()

# 选择文件夹位置
filelocation = os.path.normpath(filedialog.askdirectory(initialdir=os.getcwd()))
lst = []

# 读取文件夹下所有文件(xls和xlsx都读取)
for i in glob.glob(filelocation + "\\\\" + "*.*"):
    if os.path.splitext(i)[1] in [".xls", ".xlsx"]:
        lst.append(pd.read_excel(i))

# 保存合并后的excel文件
writer = pd.ExcelWriter(filedialog.asksaveasfilename(title="保存", initialdir=filelocation, defaultextension="xlsx",
                                                     filetypes=[("Excel 工作簿", "*.xlsx"),
                                                                ("Excel 97-2003 工作簿", "*.xls")]))
pd.concat(lst).to_excel(writer, 'all', index=False)
writer.save()

print('\n%d个文件已经合并成功!' % len(lst))

Finalmente, los pequeños socios que necesitan el código de proyecto de este artículo

 

Por supuesto, la realización de las funciones de este artículo no se limita a los tres métodos mencionados anteriormente. También se puede hacer usando pandas. Si tiene otros métodos, bienvenido a hacer amigos para aprender y comunicarse.

Todavía quiero recomendar el grupo de aprendizaje de Python que construí por mí mismo : 721195303. Todos los estudiantes del grupo están aprendiendo Python. Si quieres aprender o estás aprendiendo Python, puedes unirte. Todos son parte del desarrollo de software y comparten productos de vez en cuando (solo relacionados con el desarrollo de software de Python), incluida una copia de los últimos materiales avanzados de Python y la enseñanza basada en cero compilada por mí en 2021. ¡Bienvenidos amigos que están avanzados e interesados ​​en Python a unirse!

Supongo que te gusta

Origin blog.csdn.net/aaahtml/article/details/114160986
Recomendado
Clasificación