|
发表于 2024-11-19 13:17:16
|
显示全部楼层
明白了!你希望将8, 9, 10列中有换行符的行,根据换行符拆分成两行。以下是实现这一功能的具体代码:
- import tkinter as tk
- from tkinter import filedialog
- import pandas as pd
- import docx
- # 创建并配置窗口
- root = tk.Tk()
- root.withdraw()
- # 打开文件选择对话框,选择Word文件
- doc_path = filedialog.askopenfilename(title="选择一个.doc或.docx文件", filetypes=(("Word文件", "*.docx"), ("所有文件", "*.*")))
- # 打开文件夹选择对话框,选择保存目录
- folder_path = filedialog.askdirectory(title="选择保存目录")
- # 读取Word文档
- doc = docx.Document(doc_path)
- # 提取表格数据
- data = []
- for table in doc.tables:
- for row in table.rows:
- new_row = [cell.text.strip() for cell in row.cells]
- data.append(new_row)
- # 创建DataFrame并去掉前四行
- df = pd.DataFrame(data[4:])
- # 创建新的DataFrame用于存储处理后的数据
- new_data = []
- # 循环处理每一行
- for idx, row in df.iterrows():
- # 分别处理8, 9, 10列
- split_rows = [row]
-
- for col_idx in [7, 8, 9]: # 对应第8, 9, 10列
- cell_value = row[col_idx]
- if '\n' in cell_value:
- parts = cell_value.split('\n')
- # 创建新行并替换含换行符的列
- for i, part in enumerate(parts):
- if i == 0:
- split_rows[0][col_idx] = part
- else:
- new_row = row.copy()
- new_row[col_idx] = part
- new_data.append(new_row)
- # 如果该行没有被分割,直接添加
- if len(split_rows) == 1:
- new_data.append(row)
- # 保存到指定目录中的Excel文件
- final_df = pd.DataFrame(new_data)
- save_path = f"{folder_path}/整理数据.xlsx"
- final_df.to_excel(save_path, index=False)
- print(f"数据已保存到:{save_path}")
复制代码
此代码的关键点:
1. 使用 `split('\n')` 对含换行符的单元格进行拆分。
2. 如果发现有换行符,则复制该行,并将换行前后的内容分别放入8, 9, 10列的新行中。
3. 每行处理完毕后,结果存入 `new_data` 列表,并最终创建新的 DataFrame 保存到Excel。
请确保安装了 `pandas` 和 `python-docx` 库以支持脚本运行。注意:列索引是从0开始的,所以第8列索引为7,第9列为8,依此类推。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|