python用walk探测所给路径下所有的excel文档中sheet_name=“系数表”的内容行列转置,新增到excel下sheet_name=“系数表_T”中,用面向对象写,要解决重写后公式计算的单元格不显示数据的问题
时间: 2024-03-27 20:38:44 浏览: 115
好的,我理解了你的问题。以下是对应的代码实现。
```python
import os
import pandas as pd
from openpyxl import load_workbook
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
```
这里我定义了一个 `ExcelProcessor` 的类,用于处理 Excel 文件。其中,`process_excel` 函数用于遍历所给路径下的所有 Excel 文件进行处理;`process_file` 函数用于处理单个 Excel 文件,具体实现是将 `sheet_name` 为“系数表”的内容行列转置,并将转置后的结果新增到名为“系数表_T”的工作表中;`add_to_sheet` 函数用于将转置后的结果添加到指定工作表中,并且处理重写后公式计算的单元格不显示数据的问题。
具体而言,对于重写后公式计算的单元格不显示数据的问题,我使用了 openpyxl 库提供的 `dataframe_to_rows` 函数将转置后的数据逐行添加到工作表中,并且在添加时使用了 `cell.data_type == 'f'` 的条件来判断单元格是否为公式类型,如果是公式类型则直接将其赋值为其本身,这样可以避免计算后不显示数据的问题。
阅读全文