import os from openpyxl import load_workbook # 指定文件夹路径 folder_path = '文件夹路径' # 获取文件夹中所有excel文件的路径 file_paths = [os.path.join(folder_path, file) for file in os.listdir(folder_path) if file.endswith('.xlsx')] # 创建一个新的工作簿 wb_combined = load_workbook(file_paths[0]) # 获取新工作簿的活动表 ws_combined = wb_combined.active # 读取并整合所有excel文件的数据 for file_path in file_paths[1:]: # 打开excel文件 wb = load_workbook(file_path) # 获取第一个工作表 ws = wb.active # 将每个单元格的值和格式复制到新工作簿中 for row in ws.iter_rows(min_row=2, values_only=True): ws_combined.append(row) # 保存整合后的数据到新的excel文件 output_file = '汇总.xlsx' wb_combined.save(output_file)
时间: 2024-04-15 13:26:08 浏览: 247
这段代码看起来是正确的,可以将文件夹中所有的 Excel 文件整合到一个新的 Excel 文件中,并保留原来的格式。只要将 `'文件夹路径'` 替换为实际存放 Excel 文件的文件夹路径,并确保文件夹中的 Excel 文件拥有相同的表头,就可以使用这段代码了。整合后的数据会保存为一个名为 `'汇总.xlsx'` 的 Excel 文件。如果你有任何问题,请随时问我!
相关问题
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 文件中。
import osimport reimport openpyxlfrom PyPDF2 import PdfFileReader# 定义正则表达式匹配参考文献ref_pattern = re.compile(r"\d+\.[\s\S]*?\n\n")# 定义文件夹路径和Excel文件名folder_path = "your_folder_path"excel_file = "references.xlsx"# 创建Excel文件workbook = openpyxl.Workbook()worksheet = workbook.activeworksheet.title = "References"worksheet.append(["文件名", "参考文献"])# 遍历文件夹中的PDF文件for filename in os.listdir(folder_path): if filename.endswith(".pdf"): file_path = os.path.join(folder_path, filename) pdf = PdfFileReader(open(file_path, "rb")) # 遍历PDF中的页面 for i in range(pdf.getNumPages()): page = pdf.getPage(i) content = page.extractText() # 查找参考文献 refs = ref_pattern.findall(content) if refs: for ref in refs: worksheet.append([filename, ref])# 保存Excel文件workbook.save(excel_file) 这一段代码运行不出结果是为什么呢
这段代码没有导入 `openpyxl` 库,需要在开头添加 `import openpyxl`,否则会报错。
另外,需要注意 `openpyxl` 库的使用,需要先创建一个 `Workbook`,然后获取其 `active` 的 `worksheet`,才能往里面添加数据。在这段代码中,需要添加以下几行代码来创建和获取 `worksheet`:
```
workbook = openpyxl.Workbook()
worksheet = workbook.active
worksheet.title = "References"
worksheet.append(["文件名", "参考文献"])
```
最后,需要将 `os`、`re` 和 `openpyxl` 模块导入的语句分别独立成一行,否则代码会报语法错误。
阅读全文