复杂的吸收word到excel
用tkinter指定一个.doc或者.docx的文件,再用tkinter指定一个文件夹位置
将.doc或者.docx的文件中所有的表格按以下要求导出数据
1、去除前四行数据
2、去除空行
3、对第8,9,10列含有回车的,做成两行,一行为回车前数据,一行为回车后数据 导出的数据,在指定的文件夹位置新建一个名字为“整理数据.xlsx”,将数据保存到这个excel文件中去,
以上代码按竖行每个代码一行写 以下是简化版的Python代码,使用tkinter选择文件和文件夹,然后处理Word文档中的表格数据并导出到Excel文件。为确保代码可读性,省略了详细错误处理和特定环境配置代码:
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 = []
for cell in row.cells:
new_row.append(cell.text.strip())
if any(new_row):# 去掉空行
data.append(new_row)
# 创建DataFrame
df = pd.DataFrame(data)
# 处理第8,9,10列的回车
for col in :
df = df.apply(lambda x: x.split('\n'), axis=1).explode().reset_index(drop=True)
# 保存到指定目录中的Excel文件
save_path = f"{folder_path}/整理数据.xlsx"
df.to_excel(save_path, index=False)
print(f"数据已保存到:{save_path}")
注意:此代码仅为示例,可能需要根据实际Word文档结构进行调整。例如,确保列索引在数据范围内,并且pandas和python-docx库已经安装。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 TypeError: replace_text_in_dxf.<locals>.<lambda>() got an unexpected keyword argument 'axis'
出错了,这个错误提示 颂风侯 发表于 2024-11-19 12:51
TypeError: replace_text_in_dxf..() got an unexpect ...
这个错误提示表明,在你的代码中调用了一些函数时,传递了一个名为'axis'的关键字参数,但该函数不接受这个参数。这个问题可能出现在以下代码片段中:
df = df.apply(lambda x: x.split('\n'), axis=1).explode().reset_index(drop=True)
在Pandas库中,`apply`方法确实有一个`axis`参数,但是这个用法通常在DataFrame上生效。如果你操作的是DataFrame的特定列(Series),就不需要这个参数。以下是一个可能的解决方案:
for col in :# 假设第8,9,10列对应的索引是7,8,9
df.iloc[:, col] = df.iloc[:, col].apply(lambda x: x.split('\n') if isinstance(x, str) else x)
df = df.explode(df.columns).reset_index(drop=True)
请确保在处理前,你的DataFrame中有正确的列和行索引,并且pandas库已经被正确导入。如果其他部分有问题,您也可以从错误提示中找到具体位置进行查看和修正。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 而且这个回车是在word的表格里才有的,读取成dataframe就看不到了 颂风侯 发表于 2024-11-19 12:53
而且这个回车是在word的表格里才有的,读取成datafram ...
理解您的问题,读取Word文档后,某些单元格中的换行可能在DataFrame显示时被忽略。我们需要在读取Word文档时就处理这些换行。在 `docx` 模块中读取内容时,可以先处理换行再存储数据。以下是调整后的代码思路:
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 = []
for cell in row.cells:
text = cell.text.strip()
# 将换行符处理为列表中的多项
if '\n' in text:
new_row.append(text.split('\n'))
else:
new_row.append()
# 展开多维列表,形成可处理的DataFrame格式
new_row =
# 只添加非空行并忽略前4行
if any(new_row) and len(data) >= 4:
data.append(new_row)
# 创建DataFrame
df = pd.DataFrame(data)
# 保存到指定目录中的Excel文件
save_path = f"{folder_path}/整理数据.xlsx"
df.to_excel(save_path, index=False)
print(f"数据已保存到:{save_path}")
关键步骤:
1. 在读取每个单元格内容时,使用 `cell.text.split('\n')` 将含有换行符的单元格拆分为多个元素。
2. 去除DataFrame中的前四行,确保只保留需要的内容。
3. 在保存至Excel文件前,确保数据结构完整,便于处理各类复杂文本格式。
此代码假定您使用的是 `.docx` 文件格式,并且使用了 `python-docx` 和 `pandas` 库。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 测试的结果还是不对,应该是对于8,9,10列里面有换行的,对于该行,复制成两行,第一行是对8,9,10列而言用了换行前的内容,第二行是对8,9,10列而言用了换行后的内容,旧的行不用了,新的两行加入到新的dataframe中去 颂风侯 发表于 2024-11-19 13:17
测试的结果还是不对,应该是对于8,9,10列里面有换行的 ...
明白了!你希望将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 =
data.append(new_row)
# 创建DataFrame并去掉前四行
df = pd.DataFrame(data)
# 创建新的DataFrame用于存储处理后的数据
new_data = []
# 循环处理每一行
for idx, row in df.iterrows():
# 分别处理8, 9, 10列
split_rows =
for col_idx in :# 对应第8, 9, 10列
cell_value = row
if '\n' in cell_value:
parts = cell_value.split('\n')
# 创建新行并替换含换行符的列
for i, part in enumerate(parts):
if i == 0:
split_rows = part
else:
new_row = row.copy()
new_row = 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 小助理,如未能正确解答您的问题,请继续追问。 感觉不太对,我没测试,但是这个换行符要在转为dataframe之前判断,转了dataframe就无法判断了,能再转dataframe之前判断分行吗 颂风侯 发表于 2024-11-19 13:28
感觉不太对,我没测试,但是这个换行符要在转为datafr ...
明白了,我们可以在从Word文档读取数据时,直接处理换行符并转换为结构化的数据。这样在生成DataFrame之前就已处理好。以下是按您要求的代码逻辑:
import tkinter as tk
from tkinter import filedialog
import pandas as pd
import docx
# 创建并配置窗口
root = tk.Tk()
root.withdraw()
# 文件选择
doc_path = filedialog.askopenfilename(title="选择一个.doc或.docx文件", filetypes=(("Word文件", "*.docx"), ("所有文件", "*.*")))
folder_path = filedialog.askdirectory(title="选择保存目录")
# 读取Word文档
doc = docx.Document(doc_path)
# 创建列表保存新数据
new_data = []
# 处理表格数据
for table in doc.tables:
for row_idx, row in enumerate(table.rows):
if row_idx < 4:# 去除前四行
continue
row_data =
# 检查第8, 9, 10列是否包含换行符
split_needed = False
split_parts = [[] for _ in range(3)]
for i in range(3):
if '\n' in row_data:
split_needed = True
split_parts = row_data.split('\n')
else:
split_parts.append(row_data)
if split_needed:
# 创建新行
for parts in zip(*split_parts):
new_row = row_data[:7] + list(parts) + row_data
new_data.append(new_row)
else:
new_data.append(row_data)
# 创建DataFrame
df = pd.DataFrame(new_data)
# 保存数据到Excel
save_path = f"{folder_path}/整理数据.xlsx"
df.to_excel(save_path, index=False)
print(f"数据已保存到:{save_path}")
关键步骤说明:
1. 在读取Word表格时,根据单元格内容处理换行符,在第8, 9, 10列中识别换行符并拆分数据。
2. 根据拆分后的内容,生成多行数据以确保不同换行段的正确展现。
3. 生成的结构化数据再用作构建DataFrame,最后输出到Excel。
请确保安装了所需的Python库,包括`pandas`和`python-docx`。注意,这个代码假设表格中的换行符只会出现在第8, 9, 10列中。调整列索引可以适配不同结构的Word表格。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 根据这个自己改了下已经解决了,谢谢AI老师,我表述的还是不清除。搞定了,谢谢 颂风侯 发表于 2024-11-19 14:13
根据这个自己改了下已经解决了,谢谢AI老师,我表述的 ...
不客气,很高兴听到你解决了问题!如果将来还有什么问题或需要帮助,随时可以询问。祝你今后的学习和编程之旅一帆风顺!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]