将具有多个工作表的 xlsx 文件转换为多个 xlsx 文件

Convert a xlsx file with multiple sheets to multiple xlsx files

我有一个包含多个工作表的 .xlsx 文件,我想将所有工作表拆分为不同的 .xlsx 文件。 例如,我有一个文件 matt.xlsx,它有 5 个工作表,名称分别为 A、B、C、D、E。我想将它们分成 5 个文件,分别命名为 a.xlsx、b.xlsx、c.xlsx、d.xlsx 和 e.xlsx.

我写的代码如下,但它不会向拆分文件写入任何内容,并且当我尝试打开它们时出现错误 "Format of the file does not match"

import os
import csv
from openpyxl import load_workbook
import pandas as pd


def main():

# read wbook from xlsx, 
filepath = os.path.join(os.getcwd())
wb = load_workbook(filename='matt.xlsx')
dest_dir = os.path.join('desktop','new files')
os.makedirs(dest_dir, exist_ok=True)

# loop the sheet
for sheet in wb.worksheets:
    sheet_names = sheet.title.split(" ")
    sheet_names = [x.lower() for x in sheet_names]

    dest_path = os.path.join(dest_dir, sheet_names.xlsx')

    with open(dest_path, 'w') as f:
        writer = pd.ExcelWriter(f, engine='xlsxwriter')
        reader = sheet.rows
        next(reader, None)

提前谢谢你。我是使用 python 的初学者,如果有人能提供帮助,我将不胜感激。

我修改了你的一些代码。您可以在不使用 pandas 的情况下执行此操作。在浏览了一些 openpyxl documentation 之后,看起来下面的代码可能是您正在尝试做的事情的起点。

这会将工作表的值复制到新工作簿,但 none 格式等

查看以下代码是否是您尝试执行的操作的起点。

from openpyxl import load_workbook, Workbook

wb = load_workbook(filename='matt.xlsx')

for sheet in wb.worksheets:
    new_wb = Workbook()
    ws = new_wb.active
    for row_data in sheet.iter_rows():
        for row_cell in row_data:
            ws[row_cell.coordinate].value = row_cell.value

    new_wb.save('{0}.xlsx'.format(sheet.title))

如果您确实想使用 pandas,我会推荐如下内容。这将读入您的数据并为工作簿中存在的每个 sheet 创建一个文件。

这是 link 到 10 minutes to pandas tutorial and the documentation for ExcelFile

import os
import pandas as pd

# create an excel file object
reader = pd.ExcelFile('matt.xlsx')

# loop through all sheet names
for sheet in reader.sheet_names:
    #read in data
    df = pd.read_excel(path, sheet_name=sheet)
    # save data to excel in this location
    # '~/desktop/new files/a.xlsx', etc.
    df.to_excel(os.path.join('desktop','new files', sheet), index=False)