|
要在 Excel 中保持 Word 表格的合并单元格样式,您需要特别处理合并单元格的情况。以下是修改后的代码:
- import tkinter as tk
- from tkinter import filedialog
- from docx import Document
- from openpyxl import Workbook
- from openpyxl.styles import Alignment
- import os
- def select_word_file():
- file_path = filedialog.askopenfilename(
- title="选择Word文件",
- filetypes=[("Word文件", "*.docx *.doc")]
- )
- return file_path
- def select_folder():
- folder_path = filedialog.askdirectory(title="选择保存位置")
- return folder_path
- def process_word_file(file_path, output_folder):
- doc = Document(file_path)
- wb = Workbook()
- ws = wb.active
- ws.title = "整理数据"
-
- current_row = 1
-
- for table_idx, table in enumerate(doc.tables):
- # 处理合并单元格信息
- merge_info = []
-
- # 分析合并单元格
- for i, row in enumerate(table.rows):
- for j, cell in enumerate(row.cells):
- # 检查是否是合并单元格的起始位置
- if hasattr(cell, '_tc') and hasattr(cell._tc, 'grid_span'):
- if cell._tc.grid_span > 1:
- merge_info.append({
- 'start_row': i,
- 'start_col': j,
- 'end_row': i,
- 'end_col': j + cell._tc.grid_span - 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
-
- # 保存Excel文件
- output_path = os.path.join(output_folder, "整理数据.xlsx")
- wb.save(output_path)
- print(f"数据已导出到: {output_path}")
- def main():
- root = tk.Tk()
- root.withdraw()
-
- word_file = select_word_file()
- if not word_file:
- print("未选择Word文件")
- return
-
- output_folder = select_folder()
- if not output_folder:
- print("未选择输出文件夹")
- return
-
- process_word_file(word_file, output_folder)
- print("处理完成!")
- if __name__ == '__main__':
- main()
复制代码
**重要说明:**
1. **合并单元格处理**:
- 代码会检测 Word 表格中的列合并情况
- 但 Word 表格的行合并处理比较复杂,可能需要更深入的分析
2. **局限性**:
- 这个示例主要处理列合并
- 对于复杂的行合并和嵌套合并,可能需要使用更专业的库如 docx2python
3. **替代方案**:
如果您需要更完整的格式保持,可以考虑:
- 使用 win32com.client 直接调用 Word 和 Excel 的 COM 接口
- 使用专门的格式转换工具
4. **安装依赖**:
- pip install python-docx openpyxl
复制代码
这个代码会尽量保持表格的基本结构,但对于复杂的合并单元格布局,可能需要额外的处理逻辑。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|