main
黄海 9 months ago
parent a2b45dac5f
commit b5752cf69e

@ -1,9 +1,12 @@
import os
import win32com
from win32com.client import Dispatch
import re
# pip install pywin32 openpyxl
# pip install pywin32
working_dir = r"D:/dsWork/YunNanDsBase/Doc/全省及州市县区人口与教育报告集20241023/16个州市报告2022/分析报告20240510/"
import openpyxl
# 在工作目录下创建Excel目录
excel_dir = working_dir + 'Excel'
@ -13,22 +16,15 @@ if not os.path.exists(excel_dir):
# 关键词
keyword = '人口变化及其对教育的影响'
# 是不是打Word显示
docApp = win32com.client.Dispatch('Word.Application')
# 是不是打Word显示
docApp.Visible = False
docApp.DisplayAlerts = 0
# doc = docApp.Documents.Open('c:/1.docx')
# doc = docApp.Documents.Open('c:/昭通市人口变化及其对教育的影响20240416.docx')
# doc = docApp.Documents.Open('c:/昆明市人口变化及其对教育的影响20240419.docx')
# doc = docApp.Documents.Open(working_dir+'红河哈尼族彝族自治州人口变化及其对教育的影响20240419.docx')
# 遍历工作目录下所有的docx文件将文件名用keyword进行分隔前一半是州市名称后一半是上报的时间我们取前一半的州市名称
for file in os.listdir(working_dir):
if file.endswith('.docx') and not file.startswith('~'):
if file.endswith('.docx') and not file.startswith('~'):
file_name = file.split('.')[0]
# 判断一下file_name中是不是存在keyword,如果不存在,则输出错误,并结束程序
if keyword not in file_name:
@ -46,10 +42,12 @@ for file in os.listdir(working_dir):
doc = docApp.Documents.Open(doc_path)
# 遍历文档中所有的文字段落,判断是不是以 图+数字开头
idx = 1
# 图表的名称列表
tb_list = []
for para in doc.Paragraphs:
x = para.Range.Text.strip().replace("", "").replace(" ", " ")
if x.startswith(""):
print(x)
tb_list.append(x)
idx = idx + 1
# 遍历文档中的所有内嵌形状
@ -58,17 +56,24 @@ for file in os.listdir(working_dir):
if inline_shape.Type == win32com.client.constants.wdInlineShapeChart: # 检查是否为内嵌图表
shape = doc.InlineShapes(idx)
sheet = shape.Chart.ChartData.Workbook.Worksheets(1)
# 行数
row_size = sheet.UsedRange.rows.Count
# 列数
col_size = sheet.UsedRange.columns.Count
print(row_size, col_size)
# 遍历获取表格中的数据
# for i in range(1, row_size + 1):
# for j in range(1, col_size + 1):
# print(sheet.Cells(i, j).Value, end=" ")
# print("")
# print("")
# 创建一个新的Excel工作簿
wb = openpyxl.Workbook()
ws = wb.active
# 遍历Excel工作表中的所有单元格并将其写入新的工作簿
for row in range(1, sheet.UsedRange.Rows.Count + 1):
for col in range(1, sheet.UsedRange.Columns.Count + 1):
cell_value = sheet.Cells(row, col).Value
ws.cell(row=row, column=col, value=cell_value)
# 保存新的Excel文件
original_string = tb_list[idx - 1]
# 使用正则表达式过滤,只保留中文、英文和数字
original_string = original_string[1:]
if ' ' in original_string:
original_string = original_string.split(" ")[1]
filtered_string = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9]', '', original_string)
wb.save(city_dir + '/'+''+str(idx)+'' + filtered_string + ".xlsx")
print("保存文件:" + filtered_string + ".xlsx")
# 下一个图表的索引号
idx = idx + 1
print(idx - 1)

Loading…
Cancel
Save