import os import pandas as pd from openpyxl import Workbook folder_path = r'D:/拆分后的工作簿' new_path = r'D:\拆分后的工作簿\新增資料夾\workbook.xlsx' files = os.listdir(folder_path) wb = Workbook() for file in files: if file.endswith('.xlsx'): file_path = os.path.join(folder_path, file) sheet_name = os.path.splitext(file)[0] df = pd.read_excel(file_path, sheet_name=None) for sheet in df: df[sheet].to_excel(wb, sheet_name=sheet_name)
时间: 2024-02-04 18:04:08 浏览: 180
这段代码看起来没有问题,不过你最后没有保存工作簿。你需要将以下代码添加到末尾:
```python
wb.save(new_path)
```
这将工作簿保存到指定的路径下。完整代码如下:
```python
import os
import pandas as pd
from openpyxl import Workbook
folder_path = r'D:/拆分后的工作簿'
new_path = r'D:\拆分后的工作簿\新增資料夾\workbook.xlsx'
files = os.listdir(folder_path)
wb = Workbook()
for file in files:
if file.endswith('.xlsx'):
file_path = os.path.join(folder_path, file)
sheet_name = os.path.splitext(file)[0]
df = pd.read_excel(file_path, sheet_name=None)
for sheet in df:
df[sheet].to_excel(wb, sheet_name=sheet_name)
wb.save(new_path)
```
希望这次能够帮到你!
相关问题
ValueError: Invalid file path or buffer object type: <class 'openpyxl.workbook.workbook.Workbook'>
这个错误通常是因为你在保存工作簿时,传递的参数类型不正确导致的。你需要将工作簿保存到一个文件,而不是直接传递给函数。
以下是修改后的代码:
```python
import os
import pandas as pd
from openpyxl import Workbook
folder_path = r'D:/拆分后的工作簿'
new_path = r'D:\拆分后的工作簿\新增資料夾\workbook.xlsx'
files = os.listdir(folder_path)
wb = Workbook()
for file in files:
if file.endswith('.xlsx'):
file_path = os.path.join(folder_path, file)
sheet_name = os.path.splitext(file)[0]
df = pd.read_excel(file_path, sheet_name=None)
for sheet in df:
df[sheet].to_excel(wb, sheet_name=sheet_name)
wb.save(filename=new_path) # 修改此处,将工作簿保存到文件中
```
希望这次能够解决你的问题。
使用读取文件夹下所有excel文件中sheet_name=“功能点拆分表”的工作簿,需要识别单元格的颜色为黄色或红色的单元格,并提取单元格的信息,其他为空的单元格向上合并单元格,合并列表生成EXCEL后导出,给出面向对象代码
好的,以下是一个面向对象的Python代码,实现了您的要求:
```python
import os
import pandas as pd
from openpyxl import load_workbook
import xlwings as xw
class ExcelProcessor:
def __init__(self, folder_path):
self.folder_path = folder_path
self.sheet_name = '功能点拆分表'
self.yellow_color = 'FFFF00' # 黄色
self.red_color = 'FF0000' # 红色
def read_excel_files(self):
# 读取文件夹下所有excel文件中sheet_name为self.sheet_name的工作簿,返回一个数据框
all_data = []
for file_name in os.listdir(self.folder_path):
if file_name.endswith('.xlsx'):
file_path = os.path.join(self.folder_path, file_name)
wb = load_workbook(file_path)
if self.sheet_name in wb.sheetnames:
ws = wb[self.sheet_name]
data = pd.DataFrame(ws.values)
header = data.iloc[0]
data = data[1:]
data.columns = header
all_data.append(data)
return pd.concat(all_data)
def process_data(self, data):
# 处理数据,提取颜色为黄色或红色的单元格信息,向上合并空单元格
for row_idx, row in data.iterrows():
for col_name, cell in row.items():
if cell.fill.start_color.index == self.yellow_color or \
cell.fill.start_color.index == self.red_color:
# 提取颜色为黄色或红色的单元格信息
print(cell.value)
elif pd.isna(cell.value):
# 向上合并空单元格
merge_range = cell
for i in range(row_idx - 1, -1, -1):
if pd.isna(data.iloc[i][col_name]):
merge_range = merge_range.union(data.iloc[i][col_name])
else:
break
data.loc[merge_range][col_name] = cell.value
data.loc[row_idx][col_name] = None
# 删除空行
data.dropna(how='all', inplace=True)
return data
def write_to_excel(self, data):
# 将数据框写入到新的Excel文件中
wb = xw.Book()
sheet = wb.sheets[0]
sheet.name = self.sheet_name
sheet.range('A1').options(index=False).value = data
wb.save(os.path.join(self.folder_path, 'result.xlsx'))
def process_excel_files(self):
data = self.read_excel_files()
processed_data = self.process_data(data)
self.write_to_excel(processed_data)
if __name__ == '__main__':
folder_path = 'your/folder/path'
excel_processor = ExcelProcessor(folder_path)
excel_processor.process_excel_files()
```
在这个代码中,ExcelProcessor类封装了读取、处理和写入Excel文件的方法。用户只需要实例化该类,传入文件夹路径,然后调用process_excel_files方法即可实现对所有Excel文件的处理。
其中,read_excel_files方法使用了pandas的concat函数来合并所有Excel文件的数据框,process_data方法遍历所有单元格,提取颜色为黄色或红色的单元格信息,并向上合并空单元格。write_to_excel方法使用了xlwings库将数据框写入到新的Excel文件中。
希望这个代码能够帮助您实现您的需求,如果您有任何问题或意见,请随时提出。
阅读全文