首页 > 其他分享 >win32com操作大全(含常见错误解决办法)

win32com操作大全(含常见错误解决办法)

时间:2022-10-14 09:11:48浏览次数:56  
标签:解决办法 False ## Cells excel xlSheet win32com 大全

对于对word、excel输出结果的格式要求较高的工作来说,

win32com这个库操作office真的挺好用。

注意中途不要手动打开你的word excel,不然会报错。

一、导入库

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()

标签:解决办法,False,##,Cells,excel,xlSheet,win32com,大全
From: https://www.cnblogs.com/dige1993/p/16790485.html

相关文章

  • 2022年国内短信平台大全
    ​目前国内短信厂家鱼龙混杂,数量繁多,极难选择,而今天国内短信厂家测评来了,让你再也不用怕被坑了。今天将从平台资历,产品质量,API友好度、是否支持免费测试、个人是否可以使......
  • css面试题大全(持续更新)
    介绍一下css的盒子模型?​css盒子模型详解css选择符有哪些?css3新增伪类有那些?​元素选择符与关系选择符属性选择符伪类选择符,CSS3新增伪类伪对象(伪元素)选择符css那些属性......
  • python规则大全
    ​​https://www.runoob.com/python/python-reg-expressions.html​​​​https://regexr.com/​​​​http://c.runoob.com/front-end/854​​​​http://alf.nu/RegexGolf......
  • Chrome浏览器提示您的连接不是私密连接解决办法
    解决方案:是在当前页面用键盘输入thisisunsafe,不是在地址栏输入,就直接敲键盘就行了,页面即会自动刷新进入网页。原因:因为Chrome不信任这些自签名ssl证书,为了安全起见,......
  • linux大全链接
    ​​http://man.linuxde.net/​​......
  • C#运算符大全_各种运算符号的概述及作用
    以下是对C#中各种运算符号的说明及作用进行了详细的总结介绍一、[]方括号([])用于数组、索引器和属性,也可用于指针。1、数组类型是一种后跟[]的类型:int[]fib=newint......
  • 【Vegas原创】Livewriter不能连接博客园的解决办法
    报错现象: 解决方法:1,日志网址上面,随便输入一个字符,比如:a,下一步2,手动配置日志类型:a)在“Typeof weblogthatyouareusing”中选择“Custom(MetaweblogAPI)”。b)“......
  • SQL大全
    ----------------------------------------------------------------------------------语句功能--数据操作SELECT--从数据库表中检索数据行和列INSERT--向数据库表添......
  • 2020版本idea version control 不见了 解决办法
    2020版本ideaversioncontrol不见了解决办法2020版本ideaversioncontrol不见了解决办法以前窗口底部是有个VersionControl的窗口的(如下图所示),但是现在没有了......
  • CSS中的背景用法大全
    ​​background​​​ 属性是CSS中用于设置元素背景的属性,最简单的​​background​​属性名,是针对背景若干设定的合并简写,最早的CSS只能使用单一背景图片,而在现在却可以......