前言

当年看《别怕,Excel VBA其实很简单》相见恨晚,看了第一版电子版之后,买了纸质版,然后将其送人。而后,发现出了第二版,买之收藏。之后,发现Python这一编程语言,简直是逆天,业余非程序员的福音。人生苦短,我用python。简短几句代码,实现好多自己不敢想的功能。
自学VBA发现对VBA和python,我有着这样几个看法:(只是针对自动化办公)

  • 非专业表哥,只是普通办公,希望偶尔遇到点重复的工作可以自动化一下。VBA对于我来说,要记得东西还是太多了,语法上不简洁。每写一个功能,代码太长了。
  • VBA虽然在很多程序都有接口,但是,应用范围还是略窄,对于一般用户深入学习后,但是,应用场景太少。有任务驱动,才有动力去提高水平。
  • Python运行速度绝对不算快的,但是,绝对比在Excel中运行VBA的速度还是要快很多
  • Python语言简洁(python大法好),模块丰富,有好多大神造好的轮子等着我们去用。
  • Python应用范围广,既能帮我解决偶尔遇到的表格问题,也能和其他各种软件或者平台联接起来。

运用Python自定义宏(仅限Windows)

  1. 准备工作
  2. 安装xlwings模块

  • 其中,自定义模版可以修改名称,mymacro为自定义宏的python文件,myfun为自定义函数的python文件。
  • 设置Excel信任中心,信任对VBA工程对象模型的访问

自定义宏

  1. 用记事本打开mymacro0,输入下列语句:
import xlwings as xw
@xw.sub
def my_macro():
wb = xw.Book.caller()
wb.sheets[0].range('A1').value = wb.name

则宏名称为my_macro的宏就编写好了,将工作簿的名称输入到A1单元格。自定义宏只需要前两句不变,后面内容自己编写,即自定义宏需要以下面的语句为开头

import xlwings as xw
@xw.sub

运行方式:先alt+F8运行ImportPythonUDFs内置宏,导入我们的自定义宏和函数,导入后,再运行我定义的my_macro宏。

  1. 自定义函数
    准备工作是一致的,打开myfun0,写入第一个自定义函数:
import xlwings as xw
@xw.func
def myfun():
wb = xw.Book.caller()
return wb.name

注意,开头语句为@xw.func而不是@xw.sub了,然后函数相对于宏,有返回值,所以用了return语句。自定义好函数之后,刚可以像Excel自带函数一样的去使用了。如在A1单元格输入”=myfun()",则会得到工作簿的名称。

结束

本文给出了xlwings模块自定义宏和函数的模版,然后简单介绍了如何去定义宏和函数。注意:

  • 一个python文件,只能定义一个宏或者函数,所以模版中已经默认分别给出了三个宏和函数文件,方便直接使用。
  • python文件的名称和相对文件位置不能改变,Excel文件的文件位置不能改变,名称可以改变。如需修改,请参考xlwings官方文档。

xlwings excel(四)的更多相关文章

  1. 插上翅膀,让Excel飞起来——xlwings(四)

    前言 当年看<别怕,Excel VBA其实很简单>相见恨晚,看了第一版电子版之后,买了纸质版,然后将其送人.而后,发现出了第二版,买之收藏.之后,发现Python这一编程语言,简直是逆天, ...

  2. Excel四象限散点图的制作方法

    Excel中四象限散点图带文本数据标签,可以在散点图的基础上进行一些设置即可得到,无需第三方插件或者宏代码,非常方便,以office2013为例,效果如下: 步骤: 1.准备好数据源,选中两列数据源( ...

  3. xlwings excel(三)

    App相当于Excel程序,Book相当于工作簿.N个Excel程序则由apps表示,N个工作簿由books表示. 对工作簿的操作 #导入xlwings模块 import xlwings as xw ...

  4. xlwings excel(一)

    python操作Excel的模块,网上提到的模块大致有:xlwings.xlrd.xlwt.openpyxl.pyxll等,他们提供的功能归纳起来有两种:一.用python读写Excel文件,实际上就 ...

  5. xlwings excel(二)

    常用函数和方法 Book 工作簿常用的apiwb=xw.books[‘工作簿名称'] wb.activate()激活为当前工作簿 wb.fullname 返回工作簿的绝对路径 wb.name 返回工作 ...

  6. python xlwings Excel 内容截图

    import xlwings as xw from PIL import ImageGrab def excel_save_img(path, sheet=0, img_name="1&qu ...

  7. asp.net导出excel-一行代码实现excel、xml、pdf、word、html、csv等7种格式文件导出功能而且美观-SNF快速开发平台

    分享: 腾讯微博  新浪微博   搜狐微博   网易微博  腾讯朋友  百度贴吧  豆瓣   QQ好友  人人网 作者:王春天  原文地址:http://www.cnblogs.com/spring_ ...

  8. C#NPOI对Excel的操作、导入导出时异常处理、最全的NPOI资料在这里~

    一.Excel理论知识 最新版NPOI2.4.1链接:https://pan.baidu.com/s/1iTgJi2hGsRQHyw2S_4dIUw  提取码:adnq • 整个Excel表格叫做工作 ...

  9. R语言-文本挖掘

    ---恢复内容开始--- 案例1:对主席的新年致辞进行分词,绘制出词云 掌握jieba分词的用法 1.加载包 library(devtools) library(tm) library(jiebaR) ...

随机推荐

  1. DQN 强化学习

    pytorch比tenserflow简单. 所以我们模仿用tensorflow写的强化学习. 学习资料: 本节的全部代码 Tensorflow 的 100行 DQN 代码 我制作的 DQN 动画简介 ...

  2. UITapGestureRecognizer 和 UICollectionView、UITableView的点击事件冲突问题

    解决:https://blog.gocy.tech/2016/11/19/iOS-touch-handling/ 1. tap.delegate = self; tap加个代理<UIGestur ...

  3. 前端——BOM与DOM

    目录 前戏 window对象 window的子对象 navigator对象(了解即可) screen对象(了解即可) history对象(了解即可) location对象 弹出框 计时相关 DOM H ...

  4. 使用element的upload组件实现一个完整的文件上传功能(上)

    说到标题就有点心塞了,前段时间项目上需要实现一个文件上传的功能,然后就咔咔的去用了element的upload组件,不用不知道一用吓一跳哇. 在使用的过程中遇到了很多让意想不到的问题,后来也因为时间问 ...

  5. 如何修改eclipse中Dynamic web module的 version

    我们直接在eclipse中修改Dynamic Web Module的话会报错,改不了的 所以我们可以找到项目文件中的.setting文件下的org.eclipse.wst.common.project ...

  6. DOCKER学习_008:Docker容器的运行最佳实践

    一 容器分类 容器按用途大致可分为两类: 服务类容器,如 web server. database等 工具类容器,如cur容器, Iredis-cli容器 通常而言,服务类容器需要长期运行,所以使用 ...

  7. 菜鸟系列Fabric源码学习 — committer记账节点

    Fabric 1.4 源码分析 committer记账节点 本文档主要介绍committer记账节点如何初始化的以及committer记账节点的功能及其实现. 1. 简介 记账节点负责验证交易和提交账 ...

  8. 从零开始のcocos2dx生活(三)Scheduler

    文章目录 取模 Timer() 变量 设置定时器Timer() 一些成员函数 Scheduler() 变量 初始化 哈希表 构造函数schedule() 开启定时器Update() 析构函数~Upda ...

  9. $HDU$ 4336 $Card\ Collector$ 概率$dp$/$Min-Max$容斥

    正解:期望 解题报告: 传送门! 先放下题意,,,已知有总共有$n$张卡片,每次有$p_i$的概率抽到第$i$张卡,求买所有卡的期望次数 $umm$看到期望自然而然想$dp$? 再一看,哇,$n\le ...

  10. html页脚固定在底部的方法

    <style type="text/css"> html { height: 100%; } body { height: 100%; margin: 0; paddi ...