pythonwin32com 操作word excl

一、导入库

import win32com
from win32com.client import Dispatch, constants
二、打开进程

w = win32com.client.Dispatch(‘Word.Application’)
xlApp=win32com.client.Dispatch(‘Excel.Application’)

或者

w = win32com.client.DispatchEx(‘Word.Application’)

排坑1:

1、有时会出现win32com.client.Dispatch(‘Word.Application’)报错,好像是某个文档进程被占用时,就会报错。

解决方案: DispatchEx(使用启动独立的进程)

三、设置不可见不警告

0或者False都可以

w.Visible = 0 ## 不显示
w.DisplayAlerts = 0 ## 不警告
四、打开新的文件

doc = w.Documents.Open( FileName = “blablablabla” ) ## 绝对路径要在引号前加r

worddoc = w.Documents.Add() # 创建新的文档

#打开excel:
exc = xlApp.Workbooks.Open(r"blabla.xlsx")
排坑2:docx.Documents.Open()报错,可能是因为docx内的模板文件default.docx不在.py当前目录;或者文档无内容。将模板文件default.docx拷贝到.py的同一目录,手动打开模板文件default.docx,再关闭;或者向空文档写入任意内容

五、编辑(word部分)

插入文字

myRange = doc.Range(0,0)
myRange.InsertBefore(‘Hello from Python!’)

使用样式

wordSel = myRange.Select()
wordSel.Style = constants.wdStyleHeading1

正文文字替换

w.Selection.Find.ClearFormatting()
w.Selection.Find.Replacement.ClearFormatting()
w.Selection.Find.Execute(OldStr, False, False, False, False, False, True, 1, True, NewStr, 2)

页眉文字替换

w.ActiveDocument.Sections[0].Headers[0].Range.Find.ClearFormatting()
w.ActiveDocument.Sections[0].Headers[0].Range.Find.Replacement.ClearFormatting()
w.ActiveDocument.Sections[0].Headers[0].Range.Find.Execute(OldStr, False, False, False, False, False, True, 1, False, NewStr, 2)

表格操作

doc.Tables[0].Rows[0].Cells[0].Range.Text =‘123123’
worddoc.Tables[0].Rows.Add() # 增加一行

打印

doc.PrintOut()

关闭

w.Documents.Close(SaveChanges=0)
del w
w.Quit()
排坑3:使用del w 没有用,使用 w.Quit() 时可以清除进程,但Excel会弹出一个停止工作的窗口。通过下面的办法,查找程序进程ID,直接关闭进程。

def close_excel_by_force(excel):
import win32process
import win32api
import win32con
# Get the window’s process id’s
hwnd = excel.Hwnd
t, p = win32process.GetWindowThreadProcessId(hwnd)
# Ask window nicely to close
try:
handle = win32api.OpenProcess(win32con.PROCESS_TERMINATE, 0, p)
if handle:
win32api.TerminateProcess(handle, 0)
win32api.CloseHandle(handle)
except:
pass

xlApp = client.Dispatch(‘Excel.Application’)


close_excel_by_force(xlApp)
del xlApp
六、编辑(excel部分)

打开excel

xlBook_1=xlApp.Workbooks.Open(Filename=path,
UpdateLinks=0,ReadOnly=False,Format=None,
Password=open_password,WriteResPassword=write_password
打开第1个表,把1变为"aaa"就可以打开名为aaa的sheet

xlSheet_1 = xlBook_1.Worksheets(1)
#获取某个Sheet页数据(页数从1开始)

sheet_data=xlBook_1.Worksheets(1).UsedRange.Value
sheet_data[行][列]

#关于sheet名字,新建sheet,取sheet名字列表,重命名

xlBook_1.Worksheets.Add().Name = ‘AAA’
sht_names = [sht.Name for sht in xlbook.Worksheets]
xlBook_1.Worksheets(3).Name = ‘BBB’
#获取行列范围

row = xlSheet_1.UsedRange.Rows.Count
col = xlSheet_1.UsedRange.Columns.Count
##删除行列

xlSheet_1.Rows(row).Delete()#删除行
xlSheet_1.Columns(row).Delete()#删除列

#预览单元格或者区域的值

print(xlSheet_1.Cells(2,1).Value)
print(xlSheet_1.Range(‘A1:K1’).Value)

A1:K1可以更换为xlSheet_1.Cells(1,1),xlSheet_1.Cells(1,11),这样可以输入行列数,可灵活使用

##输入数值

xlSheet_1.Cells(4, 2).Value= 5
##获取数据,打入DataFrame

获取所有数据

xlSheet1_value = list(xlSheet_1.Range(xlSheet_1.Cells(1,1),xlSheet_1.Cells(row,col)).Value)

把value传入Pandas

xlSheet1_df = pd.DataFrame(data=xlSheet1_value[1:],columns=xlSheet1_value[0])

#保存,另存为

xlwb.SaveAs(‘xxx.xls’)

#关闭Excel

xlwb.Close(Flase) # True就是关闭该文件,并保存。不保存就是False
xlApp.Quit()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值