|
|
发表于 2025-10-22 16:32:39
|
显示全部楼层
当然可以,我来修改代码满足您的要求:
1. Excel文件直接保存在Word文件所在的文件夹
2. 添加.doc文件转换功能
- import tkinter as tk
- from tkinter import filedialog, messagebox
- from docx import Document
- from openpyxl import Workbook
- import os
- import glob
- import win32com.client as win32
- import pythoncom
- def select_word_folder():
- """选择包含Word文件的文件夹"""
- folder_path = filedialog.askdirectory(title="选择包含Word文件的文件夹")
- return folder_path
- def convert_doc_to_docx(doc_path, docx_path):
- """将.doc文件转换为.docx格式"""
- try:
- pythoncom.CoInitialize() # 初始化COM
- word = win32.Dispatch("Word.Application")
- word.Visible = False
-
- doc = word.Documents.Open(doc_path)
- doc.SaveAs(docx_path, 16) # 16表示docx格式
- doc.Close()
- word.Quit()
- pythoncom.CoUninitialize() # 取消初始化COM
-
- return True
- except Exception as e:
- print(f"转换文件 {doc_path} 时出错: {str(e)}")
- return False
- def process_word_files(word_folder):
- """处理文件夹中的所有Word文件"""
- # 查找文件夹中的所有Word文件
- doc_files = glob.glob(os.path.join(word_folder, "*.doc"))
- docx_files = glob.glob(os.path.join(word_folder, "*.docx"))
-
- # 转换.doc文件为.docx
- converted_files = []
- for doc_file in doc_files:
- docx_temp_path = doc_file + "x" # 临时.docx文件路径
- print(f"正在转换: {os.path.basename(doc_file)} -> {os.path.basename(docx_temp_path)}")
-
- if convert_doc_to_docx(doc_file, docx_temp_path):
- converted_files.append(docx_temp_path)
- print(f"成功转换: {os.path.basename(doc_file)}")
- else:
- print(f"转换失败: {os.path.basename(doc_file)}")
-
- # 合并所有要处理的文件
- all_files = docx_files + converted_files
-
- if not all_files:
- print("在指定文件夹中未找到Word文件")
- return False
-
- # 创建Excel工作簿
- wb = Workbook()
- ws = wb.active
- ws.title = "整理数据"
-
- current_row = 1
-
- for word_file in all_files:
- print(f"正在处理文件: {os.path.basename(word_file)}")
-
- try:
- doc = Document(word_file)
-
- # 添加文件名作为标题
- original_name = os.path.basename(word_file)
- if word_file in converted_files:
- # 如果是转换的文件,显示原始名称(去掉最后的x)
- original_name = original_name[:-1]
- ws.cell(row=current_row, column=1, value=f"文件: {original_name}")
- current_row += 1
-
- # 处理每个表格
- for table_idx, table in enumerate(doc.tables):
- # 添加表格标识
- ws.cell(row=current_row, column=1, value=f"表格 {table_idx + 1}")
- current_row += 1
-
- # 提取表格数据(跳过前4行)
- data_rows = []
- for i, row in enumerate(table.rows):
- if i < 4: # 跳过前4行
- continue
-
- row_data = []
- for cell in row.cells:
- cell_text = cell.text.strip()
- row_data.append(cell_text)
-
- # 检查是否是空行
- if any(row_data):
- data_rows.append(row_data)
-
- # 将数据写入Excel
- for row_data in data_rows:
- for col_idx, cell_value in enumerate(row_data):
- ws.cell(row=current_row, column=col_idx+1, value=cell_value)
- current_row += 1
-
- # 在表格之间添加空行
- current_row += 1
-
- # 在文件之间添加空行
- current_row += 2
-
- except Exception as e:
- print(f"处理文件 {word_file} 时出错: {str(e)}")
- continue
-
- # 保存Excel文件
- output_path = os.path.join(word_folder, "整理数据.xlsx")
- wb.save(output_path)
-
- # 清理临时转换的文件
- for temp_file in converted_files:
- try:
- os.remove(temp_file)
- print(f"已删除临时文件: {os.path.basename(temp_file)}")
- except:
- print(f"删除临时文件失败: {os.path.basename(temp_file)}")
-
- print(f"所有数据已导出到: {output_path}")
- print(f"共处理了 {len(all_files)} 个Word文件")
- return True
- def main():
- root = tk.Tk()
- root.withdraw() # 隐藏主窗口
-
- # 选择Word文件所在的文件夹
- word_folder = select_word_folder()
- if not word_folder:
- print("未选择Word文件文件夹")
- return
-
- # 处理所有Word文件
- success = process_word_files(word_folder)
-
- if success:
- messagebox.showinfo("完成", f"所有Word文件已处理完成!\nExcel文件已保存到:\n{word_folder}\\整理数据.xlsx")
- else:
- messagebox.showerror("错误", "处理过程中出现问题,请检查控制台输出。")
-
- print("批量处理完成!")
- if __name__ == '__main__':
- main()
复制代码
**代码改进说明:**
1. **自动保存位置**:
- Excel文件现在直接保存在Word文件所在的文件夹
- 文件名为"整理数据.xlsx"
2. **.doc文件转换**:
- 使用`win32com.client`库将.doc文件转换为.docx格式
- 转换后的临时文件会在处理完成后自动删除
- 在Excel中会显示原始文件名(去掉转换时添加的"x")
3. **依赖库**:
- 需要安装`pywin32`库来处理.doc文件:
4. **用户界面**:
- 添加了完成提示对话框
- 显示处理进度和结果
**使用步骤:**
1. 运行程序
2. 选择包含Word文件的文件夹(可以包含.doc和.docx文件)
3. 程序会自动处理所有文件并生成Excel
4. 完成后会显示提示信息
**注意事项:**
- 需要安装Microsoft Word软件才能进行.doc到.docx的转换
- 转换过程可能会比较慢,特别是处理大量文件时
- 如果遇到权限问题,可能需要以管理员身份运行程序
这个版本应该能满足您的需求,自动处理文件夹中的所有Word文件(包括.doc格式),并将结果直接保存在同一文件夹中。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|