import os import pandas as pd from openpyxl import load_workbook from openpyxl.utils.dataframe import dataframe_to_rows class ExcelProcessor: def __init__(self, path): self.path = path def process_excel(self): for root, dirs, files in os.walk(self.path): for filename in files: if filename.endswith('.xlsx') or filename.endswith('.xls'): filepath = os.path.join(root, filename) self.process_file(filepath) def process_file(self, filepath): wb = load_workbook(filepath) for sheet in wb: if sheet.title == '系数表': df = pd.DataFrame(sheet.values) df_t = df.T df_t.columns = df_t.iloc[0] df_t = df_t[1:] self.add_to_sheet(wb, df_t, '系数表_T') wb.save(filepath) def add_to_sheet(self, wb, df, sheet_name): try: ws = wb[sheet_name] except KeyError: ws = wb.create_sheet(sheet_name) for r in dataframe_to_rows(df, index=False, header=True): ws.append(r) for col in ws.columns: for cell in col: if cell.data_type == 'f': cell.value = cell.value return ws上述代码如何实例化使用
时间: 2024-02-10 08:17:54 浏览: 158
这段代码定义了一个ExcelProcessor类,用于处理指定路径下的Excel文件。要实例化该类,可以按如下方式进行:
1. 导入ExcelProcessor类:`from excel_processor import ExcelProcessor`
2. 创建ExcelProcessor实例对象,例如:`processor = ExcelProcessor('/path/to/excel/files')`
3. 调用ExcelProcessor的方法进行Excel文件处理,例如:`processor.process_excel()`
需要注意的是,这段代码中的Excel文件处理方法是根据指定路径下的所有Excel文件进行遍历处理的。因此,在实例化ExcelProcessor对象时需要传入正确的路径参数。另外,为了能够运行该代码,还需要将代码保存在名为'excel_processor.py'的文件中,并在实例化ExcelProcessor对象时正确导入该类。
相关问题
修改下面代码,将dataframe的行索引也一起添加到Excel中import pandas as pd from openpyxl import Workbook from openpyxl.utils.dataframe import dataframe_to_rows data = {'Name': ['John', 'Emma', 'Peter'], 'Age': [25, 28, 30], 'Gender': ['Male', 'Female', 'Male']} df = pd.DataFrame(data) wb = Workbook() ws = wb.active for row in dataframe_to_rows(df, index=False, header=True): ws.append(row) wb.save('data.xlsx')
你可以将下面的代码插入到你的代码中,以添加DataFrame的行索引到Excel中:
```python
# 将索引列添加到DataFrame中
df_with_index = df.reset_index()
# 将DataFrame写入Excel
for row in dataframe_to_rows(df_with_index, index=False, header=True):
ws.append(row)
```
完整的修改后的代码如下所示:
```python
import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
data = {'Name': ['John', 'Emma', 'Peter'],
'Age': [25, 28, 30],
'Gender': ['Male', 'Female', 'Male']}
df = pd.DataFrame(data)
# 创建Excel文件和工作表
wb = Workbook()
ws = wb.active
# 将索引列添加到DataFrame中
df_with_index = df.reset_index()
# 将DataFrame写入Excel
for row in dataframe_to_rows(df_with_index, index=False, header=True):
ws.append(row)
# 保存Excel文件
wb.save('data.xlsx')
```
现在,在Excel文件中,你将看到DataFrame的行索引也被添加进去了。希望对你有帮助!
import os import pandas as pd from openpyxl import load_workbook # 指定要合并的文件夹路径 folder_path = r"E:\aaaa\aaaa" fields_to_write = ['aaaa', 'aaaa'] # 获取文件夹中所有的 xlsx 文件路径 xlsx_files = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.endswith('.xlsx')] # 创建一个空的 DataFrame 用于存储合并后的数据 merged_data = pd.DataFrame() # 循环读取每个 xlsx 文件,将它们合并到 merged_data 中 for xlsx_file in xlsx_files: # 使用 pandas 读取 xlsx 文件,并清理无效字符引用 wb = load_workbook(filename=xlsx_file, read_only=True, data_only=True) for sheet_name in wb.sheetnames: ws = wb[sheet_name] for row in ws.rows: for cell in row: cell.value = cell.value if cell.value is None else str(cell.value).strip() df = pd.read_excel(wb) # 将读取到的数据追加到 merged_data 中 merged_data = merged_data.append(df, ignore_index=True) # 在 merged_data 中添加新的一列数据 merged_data['new_column'] = 'new_value' # 将合并后的数据写入到新的 xlsx 文件中 merged_data[fields_to_write + ['new_column']].to_excel(r"E:\aaaa\aaaa\merged_file.xlsx", index=False)这个代码会出现AttributeError: Cell is read only报错,请优化下
`AttributeError: Cell is read only` 错误通常发生在尝试修改 `openpyxl` 中的只读单元格时。只读单元格是指在读取工作簿时设置了 `read_only=True` 参数的情况下,`openpyxl` 将工作簿中的所有单元格标记为只读,以提高性能并减少内存占用。
你可以尝试将读取工作簿时的参数 `read_only` 设置为 `False`,并且使用 `write_only` 参数来提高写入性能,例如:
```python
import os
import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows
# 指定要合并的文件夹路径
folder_path = r"E:\aaaa\aaaa"
fields_to_write = ['aaaa', 'aaaa']
# 获取文件夹中所有的 xlsx 文件路径
xlsx_files = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.endswith('.xlsx')]
# 创建一个空的 DataFrame 用于存储合并后的数据
merged_data = pd.DataFrame()
# 循环读取每个 xlsx 文件,将它们合并到 merged_data 中
for xlsx_file in xlsx_files:
# 使用 pandas 读取 xlsx 文件,并清理无效字符引用
wb = load_workbook(filename=xlsx_file, read_only=False, data_only=True, keep_vba=False, keep_links=False, keep_protection=False)
for sheet_name in wb.sheetnames:
ws = wb[sheet_name]
for row in ws.rows:
for cell in row:
cell.value = cell.value if cell.value is None else str(cell.value).strip()
df = pd.read_excel(wb)
# 将读取到的数据追加到 merged_data 中
merged_data = merged_data.append(df, ignore_index=True)
# 在 merged_data 中添加新的一列数据
merged_data['new_column'] = 'new_value'
# 创建一个新的工作簿
wb_new = load_workbook(write_only=True)
ws_new = wb_new.create_sheet('merged_data')
# 将 DataFrame 中的数据逐行写入到新的工作簿中
rows = dataframe_to_rows(merged_data[fields_to_write + ['new_column']], index=False)
for row in rows:
ws_new.append(row)
# 保存合并后的数据到新的 xlsx 文件中
wb_new.save(r"E:\aaaa\aaaa\merged_file.xlsx")
```
在上面的代码中,我们将读取工作簿时的参数 `read_only` 设置为 `False`,并且使用 `write_only` 参数来提高写入性能。我们也将 `keep_vba`、`keep_links`和`keep_protection`这些参数设置为 `False`,以确保在读取工作簿时不会受到不必要的限制。最后,我们使用 `write_only` 模式创建了一个新的工作簿,并将 DataFrame 中的数据逐行写入到新的工作簿中,然后保存到新的 xlsx 文件中。
阅读全文