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

时间:2018-11-13 22:58:15

标签: python python-3.x python-2.7 pandas xlsxwriter

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

我编写的代码如下,但是它没有将任何内容写入拆分文件,并且在尝试打开它们时出现错误,提示“文件格式不匹配”​​

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的初学者,如果有人可以帮助,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

我修改了您的一些代码。您可以不使用熊猫就能做到这一点。看完openpyxl documentation中的某些内容后,似乎下面的代码可能是您尝试做的事情的起点。

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

查看下面的代码是否是您尝试做的事情的起点。

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))

答案 1 :(得分:0)

如果您确实想使用熊猫,我建议您使用以下内容。这将读取您的数据并为工作簿中存在的每个工作表创建一个文件。

这里是10 minutes to pandas tutorialExcelFile文档的链接。

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)