liusy202020 发表于 2023-5-11 09:15:00

如何将一个工作簿中的多个工作表拆分

求助:如何将一个工作簿中的多个工作表按照每个表中的字段拆分成多个工作簿,且每个工作簿里面对应的工作表名称和原工作簿的里面的工作表名称保持一致。
例如:图片中的工作簿中包含了5个工作表,现在要将这5个工作表都按照D列区域字段拆分成8个工作簿,然后每个新工作簿中就只包含了每个区域的数据,同时新工作簿中也要5个子工作表且工作表的名称和原工作簿保持一致。

isdkz 发表于 2023-5-11 09:15:36

可以使用VBA宏来实现这个功能。

首先需要打开Visual Basic编辑器,在工程资源管理器中右键点击该工作簿,选择插入->模块,然后在模块中输入以下代码:

Sub SplitWorkbook()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim newWB As Workbook
    Dim newWS As Worksheet
    Dim lastRow As Long
    Dim i As Long
   
    Set wb = ThisWorkbook
   
    For Each ws In wb.Worksheets
      lastRow = ws.Cells(Rows.Count, "D").End(xlUp).Row
      For i = 2 To lastRow
            ' Check if new workbook needs to be created
            If newWB Is Nothing Or ws.Cells(i, "D").Value <> newWS.Cells(2, "D").Value Then
                ' Create new workbook and copy worksheet
                Set newWB = Workbooks.Add
                ws.Copy Before:=newWB.Worksheets(1)
                Set newWS = newWB.Worksheets(1)
                newWS.Name = ws.Cells(i, "D").Value
            End If
            
            ' Copy row to new worksheet
            ws.Rows(i).Copy newWS.Rows(newWS.Cells(Rows.Count, "A").End(xlUp).Row + 1)
      Next i
      
      ' Save new workbook
      newWB.SaveAs Filename:=wb.Path & "\" & ws.Name & ".xlsx", FileFormat:=xlOpenXMLWorkbook
      newWB.Close SaveChanges:=False
      Set newWB = Nothing
    Next ws
End Sub


然后在工作簿中按下Alt+F8,选择SplitWorkbook,并点击运行。

这个宏会遍历每个工作表,然后按照D列区域字段将每个工作表拆分成多个工作簿,每个新工作簿中包含了每个区域的数据,同时新工作簿中也有5个子工作表且工作表的名称和原工作簿保持一致。最后每个新工作簿都会保存在原工作簿的同一目录下。

isdkz 发表于 2023-5-11 09:19:09

要实现这个需求,我们可以使用Python的pandas库和openpyxl库。Pandas用于处理和操作数据,而openpyxl则用于操作Excel文件。以下是具体的步骤:

首先,安装所需的库。在你的Python环境中,运行以下命令安装pandas和openpyxl:

pip install pandas openpyxl


然后,这是一个简单的Python脚本,它将读取你的Excel工作簿,按照D列的区域字段拆分工作表,然后将每个区域的数据写入新的工作簿。

import pandas as pd
import os

# 读取Excel文件
xlsx = pd.ExcelFile('your_file.xlsx')

# 从Excel文件中获取工作表的名称
sheet_names = xlsx.sheet_names

# 创建一个字典来存储每个区域的DataFrame
dfs_dict = {}

for sheet_name in sheet_names:
    # 读取工作表中的数据
    df = xlsx.parse(sheet_name)
   
    # 获取区域列表
    regions = df['D'].unique()

    for region in regions:
      # 根据区域拆分DataFrame
      df_region = df == region]
      
      # 将拆分后的DataFrame存储到字典中
      if region not in dfs_dict:
            dfs_dict = {sheet_name: df_region}
      else:
            dfs_dict = df_region

# 根据字典创建新的Excel文件
for region, dfs in dfs_dict.items():
    # 创建Excel写入器
    writer = pd.ExcelWriter(f'{region}.xlsx', engine='openpyxl')

    for sheet_name, df in dfs.items():
      # 将DataFrame写入Excel文件
      df.to_excel(writer, sheet_name=sheet_name, index=False)

    # 保存Excel文件
    writer.save()


以上脚本假设你的Excel文件名为 'your_file.xlsx',并且你要根据的区域字段位于列 'D'。如果实际情况不同,需要修改对应的部分。同样,生成的新工作簿将以区域名命名,保存在Python脚本相同的目录下。

在运行此脚本之前,确保你的Python环境有足够的权限访问和修改这个目录。

wp231957 发表于 2023-5-11 09:19:35

isdkz 发表于 2023-5-11 09:15
可以使用VBA宏来实现这个功能。

首先需要打开Visual Basic编辑器,在工程资源管理器中右键点击该工作簿, ...

python一样能实现,不过你这个明显是ai
页: [1]
查看完整版本: 如何将一个工作簿中的多个工作表拆分