鱼C论坛

 找回密码
 立即注册
查看: 858|回复: 11

[已解决]复杂的吸收word到excel

[复制链接]
发表于 2024-11-19 10:57:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用tkinter指定一个.doc或者.docx的文件,
再用tkinter指定一个文件夹位置
将.doc或者.docx的文件中所有的表格按以下要求导出数据
1、去除前四行数据
2、去除空行
3、对第8,9,10列含有回车的,做成两行,一行为回车前数据,一行为回车后数据 导出的数据,在指定的文件夹位置新建一个名字为“整理数据.xlsx”,将数据保存到这个excel文件中去,
以上代码按竖行每个代码一行写
最佳答案
2024-11-19 13:28:46
颂风侯 发表于 2024-11-19 13:28
感觉不太对,我没测试,但是这个换行符要在转为datafr ...


明白了,我们可以在从Word文档读取数据时,直接处理换行符并转换为结构化的数据。这样在生成DataFrame之前就已处理好。以下是按您要求的代码逻辑:

  1. import tkinter as tk
  2. from tkinter import filedialog
  3. import pandas as pd
  4. import docx

  5. # 创建并配置窗口
  6. root = tk.Tk()
  7. root.withdraw()

  8. # 文件选择
  9. doc_path = filedialog.askopenfilename(title="选择一个.doc或.docx文件", filetypes=(("Word文件", "*.docx"), ("所有文件", "*.*")))
  10. folder_path = filedialog.askdirectory(title="选择保存目录")

  11. # 读取Word文档
  12. doc = docx.Document(doc_path)

  13. # 创建列表保存新数据
  14. new_data = []

  15. # 处理表格数据
  16. for table in doc.tables:
  17.     for row_idx, row in enumerate(table.rows):
  18.         if row_idx < 4:  # 去除前四行
  19.             continue
  20.         
  21.         row_data = [cell.text.strip() for cell in row.cells]
  22.         
  23.         # 检查第8, 9, 10列是否包含换行符
  24.         split_needed = False
  25.         split_parts = [[] for _ in range(3)]
  26.         
  27.         for i in range(3):
  28.             if '\n' in row_data[7 + i]:
  29.                 split_needed = True
  30.                 split_parts[i] = row_data[7 + i].split('\n')
  31.             else:
  32.                 split_parts[i].append(row_data[7 + i])
  33.         
  34.         if split_needed:
  35.             # 创建新行
  36.             for parts in zip(*split_parts):
  37.                 new_row = row_data[:7] + list(parts) + row_data[10:]
  38.                 new_data.append(new_row)
  39.         else:
  40.             new_data.append(row_data)

  41. # 创建DataFrame
  42. df = pd.DataFrame(new_data)

  43. # 保存数据到Excel
  44. save_path = f"{folder_path}/整理数据.xlsx"
  45. df.to_excel(save_path, index=False)
  46. print(f"数据已保存到:{save_path}")
复制代码


关键步骤说明:
1. 在读取Word表格时,根据单元格内容处理换行符,在第8, 9, 10列中识别换行符并拆分数据。
2. 根据拆分后的内容,生成多行数据以确保不同换行段的正确展现。
3. 生成的结构化数据再用作构建DataFrame,最后输出到Excel。

请确保安装了所需的Python库,包括`pandas`和`python-docx`。注意,这个代码假设表格中的换行符只会出现在第8, 9, 10列中。调整列索引可以适配不同结构的Word表格。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-11-19 12:51:56 | 显示全部楼层
TypeError: replace_text_in_dxf.<locals>.<lambda>() got an unexpected keyword argument 'axis'
出错了,这个错误提示
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-19 12:53:46 | 显示全部楼层
而且这个回车是在word的表格里才有的,读取成dataframe就看不到了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-19 13:17:06 | 显示全部楼层
测试的结果还是不对,应该是对于8,9,10列里面有换行的,对于该行,复制成两行,第一行是对8,9,10列而言用了换行前的内容,第二行是对8,9,10列而言用了换行后的内容,旧的行不用了,新的两行加入到新的dataframe中去
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-19 13:28:37 | 显示全部楼层
感觉不太对,我没测试,但是这个换行符要在转为dataframe之前判断,转了dataframe就无法判断了,能再转dataframe之前判断分行吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-19 14:13:28 | 显示全部楼层
根据这个自己改了下已经解决了,谢谢AI老师,我表述的还是不清除。搞定了,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-30 06:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表