Преобразование файла xlsx с несколькими листами в несколько файлов xlsx - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть файл .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 голосов
/ 14 ноября 2018

Если вы хотите использовать панд, я бы порекомендовал что-то вроде ниже. Это прочитает ваши данные и создаст файл для каждого листа, который существует в вашей книге.

Вот ссылка на учебник 10 минут для панд и документацию для 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)
0 голосов
/ 14 ноября 2018

Я изменил часть вашего кода. Вы можете сделать это без использования панд. После просмотра некоторой документации openpyxl кажется, что приведенный ниже код может стать отправной точкой для того, что вы пытаетесь сделать.

При этом значения рабочих таблиц будут скопированы в новые рабочие книги, но нет форматирования и т. Д.

Посмотрите, является ли приведенный ниже код отправной точкой для того, что вы пытаетесь сделать.

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