新建excel文件
#创建新的excel表
xls_app = client.gencache.EnsureDispatch("Excel.Application")
wb = xls_app.Workbooks.Add() #穿件一个新的临时excel文件
sht = wb.Worksheets(1) # 选择第一个sheet
打开word文档
#打开要处理的word文档
curr_path = os.getcwd() #获取脚本所在的文件夹路径
doc_app = win32.gencache.EnsureDispatch('Word.Application')#打开word应用程序
doc_app.Visible =1#设置应用程序可见
doc = doc_app.Documents.Open(r'%s\带表格的文档.docx'%curr_path)#打开文档
word内容如下:
word内容包含2个表格和部分字段的文字
遍历所有的word中的表格
# 统计word文档中的表格数量
tables_count = doc.Tables.Count
print("table count:", tables_count)
复制word表格,粘贴到exel的sheet页中
i_sht = 1
for table in doc.Tables:
# 检查sheet的数量,如果不足,则添加新的sheet
print(wb.Worksheets.Count, i_sht)
if(wb.Worksheets.Count == i_sht):
wb.Worksheets.Add(After=sht)#如果什么都不填,默认是向前插入,会改变sheet的编号顺序
i_sht += 1
sht = wb.Worksheets(i_sht)
table.Select()
doc_app.Selection.Copy()
print(sht.Name)
sht.Range("A1").PasteSpecial(Paste=constants.xlPasteAll)
如果Worksheets.Add()没有填写参数,创建出来的sheet顺序是:sheet2、sheet1.
示例中因为添加了after属性,意思是在最新的sheet后面插入,插入效果为:sheet1、sheet2
但是excel粘贴效果为图片:
修改粘贴的命令,可以正常粘贴:
粘贴为原始格式:
sht.Paste(Destination=sht.Range("A1"))
粘贴效果: