office高级应用与python综合案例教程_日常学习Day1:Python 操作 Office 组件

先是看到书上的 Python com 编程 觉得这个还有点意思啊

感觉自动写 excel 自动读 excel 数据也许将来用得到呢。。

先走了个小小弯路,想下载书中例程中使用的 win32com 函数库,但发现这个库不是单独存在的,而是 pywin32 的一部分。pywin32 本身还包括了很多 win 编程会用到的 api 函数

下载 pywin32

pip install pywin32

使用 com 能干很多事情 office 组件都不在话下,但似乎文档不是很容易找。都不知道该如何搜索 api。

Excel

于是转向一些专门用于处理 Excel 的 python 函数库

经过一个很详细的 excel 模块比较贴Crossin:Python-Excel 模块哪家强?​zhuanlan.zhihu.comv2-09ff8ec68c202bf4e0806540a57c08e9_180x120.jpg

选择了其中的 xlwings

文档可以简单地搜到http://docs.xlwings.org/en/stable/quickstart.html​docs.xlwings.org

在 QuickStart 中很快就掌握基本的用法,简单翻译一部分

建立同工作簿的连接:

>>> import xlwings as xw

>>> wb = xw.Book() # 创建新的 excel 文件

>>> wb = xw.Book('FileName.xlsx') # 建立起同当前目录中某个 excel 文件的连接

>>> wb = xw.Book(r'C:\path\to\file.xlsx') # 在 Windows 平台上: 使用 r 将字符串转为 raw stringe 避免反斜杠转义

示例话一个 sheet 实例:

>>> sht = wb.sheets['Sheet1']

对表格写入/读取就是这么简单:

>>> sht.range('A1').value = 'Foo 1'

>>> sht.range('A1').value

'Foo 1'

提供了许多实用的功能,比如写入范围拓展:(译者注:实际将前一个 list 写入 A1-A3 后一个 list 写入 B1-B3)

>>> sht.range('A1').value = [['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]]

>>> sht.range('A1').expand().value

[['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]]

强大的格式转换功能 可以搞定大多数你感兴趣的数据类型,包括支持读写 Numpy arrays 以及 Pandas DataFrames :

>>> import pandas as pd

>>> df = pd.DataFrame([[1,2], [3,4]], columns=['a', 'b'])

>>> sht.range('A1').value = df

>>> sht.range('A1').options(pd.DataFrame, expand='table').value

a b

0.0 1.0 2.0

1.0 3.0 4.0

Matplotlib 可以插入 Excel 作为图片显示:

>>> import matplotlib.pyplot as plt

>>> fig = plt.figure()

>>> plt.plot([1, 2, 3, 4, 5])

[]

>>> sht.pictures.add(fig, name='MyPlot', update=True)

>

可以使用xw.Range 直接表示当前活跃的 sheet 而不需要另外指定

如果你想直接操作当前正在活跃的 sheet ,你不需要实例化一个,而是可以直接这么使用:

>>> import xlwings as xw

>>> xw.Range('A1').value = 'Foo'

>>> xw.Range('A1').value

'Foo'

注意: 你可以在交互式应用中使用 xw.Range . 但在脚本中你必须每次实例化一个 sheet 对象

在 QuickStart 中没有讲如何保存,我们来到 API 手册

save(path=None)

保存工作簿.如果制定了路径参数,那么这个函数的工作就类似另存为到路径参数中。如果没有提供路径参数,并且修改的内容还没有被保存,那么就会执行保存操作,将修改保存到当前的文件中,覆盖原有的文件内容,并不会产生弹窗提示。

Parameters:path (str, default None) – Full path to the workbook

Example

>>> import xlwings as xw

>>> wb = xw.Book()

>>> wb.save()

>>> wb.save(r'C:\path\to\new_file_name.xlsx')

根据教程,我写了简单的测试文件,并进行了读写,保存的基本操作。暂时不会去尝试更高级的应用了,因为目前也没有这个需求。

另外我之前也尝试了直接使用 com ,感觉 xlwings 速度要慢一些。当然这是肯定的,因为 xlwings 底层肯定也是 com

import xlwings as xw

def create_excel():

wb = xw.Book()

sht = wb.sheets['Sheet1']

sht.range('A1').value = 'T1'

print(sht.range('A1').value)

wb.save('t1.xlsx')

return sht.range('A1')

def open_excel(file_path):

wb = xw.Book(file_path)

sht = wb.sheets['Sheet1']

sht.range('A1').value = [['T2','T3','T4'],['T5','2','3']]

print(sht.range('A1').value)

wb.save(file_path)

return sht.range('A1')

if __name__ == '__main__':

create_excel()

open_excel(r'D:\projects\project_com\t1.xlsx')

PPT

Excel 暂时没有什么用途,但我突然想到前阵子在实验室有一个做 ppt 的需求。需要放上很多图片来进行算法效果的对比。之前的都是手工制作的,我也做了一下下苦力,如果能够自动生成 ppt ,放上文字和图片那就解放生产力了。

搜索了一下,可以使用 python-pptx 使用 pip 下载和找文档都非常方便https://python-pptx.readthedocs.io/en/latest/user/quickstart.html#add-picture-example​python-pptx.readthedocs.iov2-5f81b134cf14f089319a88094c80121d_180x120.jpgGetting Started - python-pptx 0.6.12 documentationGetting Started - python-pptx 0.6.12 documentation​python-pptx.readthedocs.iov2-5f81b134cf14f089319a88094c80121d_180x120.jpg

使用示例代码构建了一个 ppt,每页平铺图片,然后使用文本框显示当前页号。python-pptx 有一个神奇的 layout 机制,还不是很明白,不过当前的效果已经可以满足所需了。

from pptx import Presentation

from pptx.util import Cm

img_path = 'gz.png'

prs = Presentation()

blank_slide_layout = prs.slide_layouts[6]

for y in range(1,8):

slide = prs.slides.add_slide(blank_slide_layout)

txBox = slide.shapes.add_textbox(1, 1, 1, 1)

tf = txBox.text_frame

tf.text = "No.%d"%y

for x in range(1,8):

top = Cm(5)

left = Cm(3*x)

height = Cm(3)

width = Cm(2)

pic = slide.shapes.add_picture(img_path, left, top, height=height,width = width)

prs.save('test.pptx')

参考Crossin:Python-Excel 模块哪家强?​zhuanlan.zhihu.comv2-09ff8ec68c202bf4e0806540a57c08e9_180x120.jpg使用python生成ppt - CSDN博客​blog.csdn.netv2-b2f6d5c318fe4016a236f48aaecad4ec_180x120.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值