xlwingsapi要如何导入

author author     2023-04-20     228

关键词:

xlwingsapi要如何导入
起初我发现python的flask模块结合excel函数WEBSERVICE,ENCODEURL可以实现在excel中调用python实现一些功能,比如md5,sha1加密,后来发现python可以直接用xlrd/xlwt这类模块操作excel,但xlrd/xlwt连xlsx都不支持,便转到了openpyxl,openpyxl的缺点是不能在文件打开状态写入,不好调试,文件被写坏了都不知道。于是选择了xlwings这个可以“代替VB成为Excel后台”的插件,个人认为差强人意,最大的缺点是官方文档很多说的并不清楚
xlwings中文文档
插件安装:

xlwings安装使用

安装python
cmd:pip install xlwings
cmd:xlwings addin install
重启excel可以在功能区看到xlwings一栏如图
在这里插入图片描述
建议是用cmd安装,用户文件夹名必须是英文不然xlwings addin install会报错
ps:我安装插件就花了一天,就因为上面这个。xlwings addin install一直失败,百度搜索无果,(中途直接在github里下载插件,虽然插件导入成功,但导入函数会有关于pywin32报错,这是我推荐cmd命令安装的原因)查看报错文件里代码才定位问题,寻法修改为英文,不成,最后还是创建了一个英文账户(无奈~)
如果一切顺利(希望如此) 基本上按照xlwings:操作Excel,通过宏调用Pyhton(VBA调Python)[@author qcyfred]一文所述就可以调用python来操作excel啦,
记录我所遇到的坑:

RunPython ("from xw import say_hi; say_hi()")
1
1
!!!这我是在其评论区发现的(感谢@longnershot):vba中这段代码里的xw是python文件名,要多加注意

解析json的python代码

主要用到递归思想:

# -*- coding: utf-8 -*-
import copy
import itertools
import json
import urllib.request
import xlwings as xw
import json
from openpyxl.utils import get_column_letter

def pyFunc():
resp = urllib.request.urlopen(
"https://api.bilibili.com/x/v2/reply?pn=2&type=1&oid=455803935&sort=2")
pending_data = json.loads(resp.read())["data"]["replies"]

def getkey(data):
def get_tree_list(data, lst,tr_lsts):
for idx, item in enumerate(data) if isinstance(data, list) else data.items():
_lst = copy.deepcopy(lst)
_lst.append(idx)
if (isinstance(item, dict) and item.keys()) or (isinstance(item, list) and len(item) > 0):
get_tree_list(item, _lst, tr_lsts)
else:
tr_lsts.append(_lst)
lst = []
tr_lsts = []
get_tree_list(data, lst, tr_lsts)
return tr_lsts
tl = []
for i in pending_data:
keys = getkey(i)
for j in keys:
jlen = len(j)
if len(list(filter(lambda x: len(x) >= jlen and x[:jlen] == j, tl))) == 0:
for m in range(jlen):
if j[0:m] in tl:
tl.remove(j[0:m])
tl.append(j)
tl.sort()

wb = xw.Book.caller()
sht = wb.sheets[0]

def get_tree_dict(ptl, ptree, pdlen,pcol, prow):
dst =[list(g) for k,g in itertools.groupby(ptl,lambda x:x[pdlen])]
ctree = ptree["child"] =
mlen = max(list(map(lambda x: len(x), ptl)))
st=pcol
cdlen = pdlen+1
for ctl in dst:
title = ctl[0][pdlen]
ctd = ctree[title] =
cmlen = max(list(map(lambda x: len(x), ctl)))
ccol=st
nst=st+len(ctl)
crow =prow+mlen-cmlen+1
ctd["start"] = get_column_letter(ccol)
ctd["end"] = get_column_letter(nst-1)
rg = sht.range(ctd["start"]+str(prow) +
":"+ctd["end"]+str(crow-1))
rg.merge()
rg.value = title
if cmlen >cdlen:
get_tree_dict(ctl, ctd, cdlen,ccol, crow)
st +=len(ctl)
ptree =
get_tree_dict(tl, ptree, 0, 1, 1)
def insertData(cdata, _ptree, xs):
for idx, item in enumerate(cdata) if isinstance(cdata, list) else cdata.items():
_ctree=_ptree["child"][idx]
if (isinstance(item, dict) and item.keys()) or (isinstance(item, list) and len(item) > 0):
insertData(item, _ctree,xs)
else:
ys=_ctree["start"]
ye=_ctree["end"]
rg = sht.range(ys+str(xs) +
':'+ye+str(xs))
rg.merge()
rg.value = str(item)
# if isinstance(item, str):
# rg.api.Font.Color = 0x0000FF #b/g/r
# elif isinstance(item, int):
# rg.api.Font.Color = 0xFF0000
# else:
# rg.api.Font.Color = 0x00FF00

tlmlen=max(list(map(lambda x: len(x),tl)))
for i,v in enumerate(pending_data):
insertData(v, ptree,

其中pending_data即为待处理的json,是一个dict列表[,,....]
wb = xw.Book.caller() sht = wb.sheets[0] 按照个人需要修改sht 如sht=wb.active等等
修改for idx, item in enumerate(cdata) if isinstance(cdata, list) else cdata.items()以及(isinstance(item, dict) and item.keys()) or (isinstance(item, list) and len(item) > 0)可以只对dict类型解析,list则直接转str
调用range api,必须用字符串表示区间:range(“A1:D5”)有效,相对本与之等价的range((1,1),(5,4))无效,openpy.utils中的get_column_letter可以实现列数字转列字符串
# if isinstance(item, str):
# rg.api.Font.Color = 0x0000FF #b/g/r
# elif isinstance(item, int):
# rg.api.Font.Color = 0xFF0000
# else:
# rg.api.Font.Color = 0x00FF00
1
2
3
4
5
6
1
2
3
4
5
6
尾述
参考技术A 基本使用方法:新建一个excel文件,取名为xlwings_wb.xlsx,并新建一个sheet,取名为first_sht,在其A1单元格内插入字符串

eclipse如何导入aar(要详细步骤)

参考技术A 参考技术B  http://www.cnblogs.com/shortboy/p/4424944.html追问解压出来的文件复制到哪里 查看详情

navicat如何导入大量数据?navicat要怎么才能导入大量数据啊

参考技术A首先你需要先创建好一张表,双击打开例如下图然后你需要右击刚才新建的表名,选择设计表,然后将id的类型改为int,并选中左下角的自动增加然后你需要将你要导入的大量数据放入到一个Excel表中,但需要注意的是... 查看详情

oracle如何导入相同名称的表

表名相同,都是T1,一张表来自正式数据库服务器,一张表来自测试数据库服务器。我现在要将这两张表导入我的本地库,做一下比对我建议使用数据泵(impdp)来导入数据,而不要用传统的imp指令来导入,因为数据泵的效率要比... 查看详情

webpack 错误:找不到要导入的文件或无法读取:波旁威士忌,如何解决?

...ack错误:找不到要导入的文件或无法读取:波旁威士忌,如何解决?【英文标题】:webpackerror:Filetoimportnotfoundorunreadable:bourbon,howtofix?【发布时间】:2018-08-0401:32:17【问题描述】:我正在尝试将Bourbon包加载到我的SCSS文件中。我正... 查看详情

如何利用phpmyadmin导入和导出mysql数据库

利用phpmyadmin导入和导出mysql数据库可以参考以下操作步骤。1、在浏览器打开phpmyadmin,输入数据库用户名和密码登录后如下图所示。在下图中就能看到导入和导出操作。2、导出操作,首先选择要操作的数据库,然后单击“导出”... 查看详情

如何把excel表导入sqlserver

我有份excel表,请问如何把它导入SqlServer数据库中的一个现有的表中?首先要检查你的excel表里面的数据内容、格式、长度、空值等是否都符合要求。这些都可以了,右键点击要导入的SQL数据库名,选择“任务”——〉“导入数... 查看详情

Intellij IDEA - 将项目导入颠覆 - 选择要导入的内容

...osewhattoimport【发布时间】:2016-01-2502:07:22【问题描述】:如何从项目中选择要导入Subversion的文件夹和文件?当我执行CVS-导入到版本控制-导入到Subversion时,它只是导入整个选定的文件夹。例如,如果我不想导入.idea文件夹 查看详情

如何把csv文件导入到sql数据库

参考技术A1、打开SQLyog软件,打开一个数据库连接,连接后显示已创建的数据库。2、然后展开要执行导入操作的数据库,展开数据库下的所有表。3、接着右击要操作的表,选择导入下的导入使用本地加载的CSV数据。4、之后指定... 查看详情

如何导入别人androidstudio

方法如下:1.去到要导入项目的目录下把.idea.gradle与build三个文件夹,*.iml,local.properties删除(*表示所有),经本人验证红框中的gradle文件夹不能删除。2.进入app文件夹同理把build,*.iml删除。3.打开已经run成功的项目的build.graid把cl... 查看详情

如何把csv文件导入到sql数据库

1、首先打开sql server选择一个数据库,右击选择任务,点击导入数据打开导入导出向导:2、进入向导,下一步来到数据源的选择界面:3、接着点击数据源下拉框,选择平面文件源:4、在弹出的窗口中,选择csv文件,筛选一... 查看详情

如何将excel表导入mysql

    在平时的工作学习中,难免会遇到需要把EXCEL表中的数据导入到MYSQL中,比如要把EXCEL中的数据进行核对,或者要把测试用例导入到TestLink中。本人搜集相关的资料并加以实践总结出了以下几种方法:  1.... 查看详情

如何解决(插件 postcss)错误:找不到或无法读取要导入的文件:smui-theme. Material UI Svelte 项目

】如何解决(插件postcss)错误:找不到或无法读取要导入的文件:smui-theme.MaterialUISvelte项目【英文标题】:Howtosolve(pluginpostcss)Error:Filetoimportnotfoundorunreadable:smui-theme.MaterialUISvelteproject【发布时间】:2020-05-1613:34:53【问题描述】:... 查看详情

excel中如何导入sqlserver里的数据

...不仅可以自己录入,还可以从SQLServer数据库中导入。那么如何导入呢?下面我给大家分享一下。工具/材料Excel01首先打开SQLServer数据库,准备一个要导入的数据表,如下图所示,数据表中插入一些数据02接下来打开Excel软件,点击... 查看详情

如何导入字体?

】如何导入字体?【英文标题】:Howdoyouimportafont?【发布时间】:2012-01-1123:33:42【问题描述】:我想知道您将如何导入字体。我正在尝试使用自定义下载的字体,但由于大多数要运行它的计算机都没有这种字体,因为它不是默认... 查看详情

sap中如何导入excel数据

没明白你要导入什么数据,如果只是选择条件,直接上传就可以了,如果是批量导入表数据,最好让ABAP给你开发一个程序了参考技术A以前用过SAP,不过很少导入,一般都是导出导入一般都是一列,没有整个工作薄的 查看详情

scratch如何在角色里导入代码

您好,Scratch是一种可视化编程语言,可以让用户使用图形化界面来创建自己的程序。要在角色里导入代码,首先您需要打开Scratch编辑器,然后点击“文件”菜单,选择“导入”,然后选择您要导入的文件。接下来,您可以在角... 查看详情

jumpserver如何快速导入资产

...面看到可以使用表格导入,于是就有了本篇,来分享一下如何快速复制粘贴机器信息到表格模板中,让大家能够顺利批量导入资产到JumpServer中二、导入导入入口在资产列表的右上角,先下载模板下载完打开模板我们可以看到,... 查看详情

eclipse如何导入文件

...可以把其他文件导入到Eclipse中。下面,我们来看看Eclipse如何导入文件吧。01打开Eclipse首先确定电脑上已经安装了Eclipse软件,并打开它,如下图所示:02Import然后在左侧空白地方右击,选择【Import】选项,如下图所示:03Next在弹... 查看详情