我有一个包含多张图纸的.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的初学者,如果有人可以帮助,我将不胜感激。
答案 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 tutorial和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)