利用python中的win32com模块操作Word、Excel文件
阅读原文时间:2023年07月09日阅读:1

word操作

doc文件转换为docx文件

安装win32com模块:pip3 install pypiwin32

import os
from win32com.client import Dispatch, DispatchEx, constants

def doc_to_docx(f_path):
w = Dispatch('Word.Application')
# w = DispatchEx('Word.Application') # 启动独立进程
w.Visible = 0 # 后台运行
w.DisplayAlerts = 0 # 不警告

# 打开文件  
doc = w.Documents.Open(f\_path)

# 新建docx类型文件  
new\_path = os.path.splitext(f\_path)\[0\] + '.docx'

'''  
word\_doc = w.Documents.Add() # 创建新的文档

# 插入文字  
myRange = doc.Range(0,0)  
myRange.InsertBefore('Hello python!')

# 使用样式  
wordSel = myRange.Select()  
wordSel.Style = constants.wdStyleHeading1  
'''  
# 保存  
doc.SaveAs(new\_path, 16, False, "", True, "", False, False, False, False)  # 参数1、2必须传,如果文档有密码保护则需要传第四个参数,参数2可以是12,或者16,或其他适合的类型,其余参数都是默认值,不传也可以

# 关闭退出  
doc.Close()  
w.Quit()

# 删除源文件  
os.remove(f\_path)  
return new\_path

doc_to_docx(r"C:\Users\Desktop\新建 Microsoft Word 文档.doc")

安装模块python-docx:pip3 install python-docx

往Word文档中插入图片,并设置宽度

from docx import Document

def insert_img():
msg = '插入图片'
image1 = r"C:\Users\Pictures\Camera Roll\1.jpg"
image2 = r"C:\Users\Pictures\Saved Pictures\IMG_20180214_113145.jpg" # 保存在本地的图片

# 实例化对象  
doc = Document()  
doc.add\_paragraph(msg)  # 添加文字  
doc.add\_picture(image1, width=Inches(3))  # 添加图, 设置宽度  
doc.add\_picture(image2, width=Inches(5))

doc.save(r"C:\\Users\\rongg\\Desktop\\word\_添加图片.docx")  # 保存路径

Excel操作

注:只能操作已经存在的Excel表格,不存在会报错

from win32com.client import Dispatch

def excel_write(f_path, data, pwd=123):
excel_app = Dispatch('Excel.Application')
excel_app.Visible = 0 # 后台运行
excel_app.DisplayAlerts = 0 # 禁止弹窗

# 打开Excel文件, 有密码时前三个参数必须传  
xl\_handle = excel\_app.Workbooks.Open(f\_path, UpdateLinks=3, ReadOnly=False, Format=None, Password=pwd)

# 指定sheet页  
sheet1 = xl\_handle.Worksheets('Sheet1')  
for i in range(len(data)):  
    for j in range(len(data\[0\])):  
        sheet1.Cells(i + 1, j + 1).Value = data\[i\]\[j\]  
print('done!')

# 选择单元格  
range\_obj = sheet1.Range('A2')  
range\_obj.EntireRow.Insert()  # 在选择的单元格前插入行

# 设置边框  
'''  
5 双点虚线  
6 加粗点虚线  
7 单实线  
8 点虚线  
9 双实线  
10 单点虚线  
'''  
range\_obj.Borders.LineStyle = 7

# 为单元格赋值  
sheet1.Cells(8, 1).Value = 'Hello'  
sheet1.Cells(8, 2).Value = 'Excel'

# 关闭退出  
xl\_handle.Close(True)  # True  必须传入,否则不会保存  
excel\_app.Quit()

excel_write(
r"C:\Users\Desktop\新建 Microsoft Excel 工作表.xlsx",
[['name', 'age', 'gender'], ['jack', 22, 'man'], ['bob', 18, 'man'], ['alice', 19, 'woman']]
)

执行后的结果如下: 

后续更新。。。。