xlwingsapi要如何导入

xlwingsapi要如何导入,第1张

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_hisay_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

尾述

1.打开Excel,点击文件

Excel中如何使用Excel帮助

2.文件——选项

Excel中如何使用Excel帮助

3.Excel选项,然后按照如图所示的5步进行 *** 作

Excel中如何使用Excel帮助

4.如图所示,点击Excel帮助图标,问号

Excel中如何使用Excel帮助

5.可以使用快捷键F1直接调用Excel帮助

Excel中如何使用Excel帮助

6

6.如图在搜索框中输入需要的的内容,就能使用Excel帮助

Excel中如何使用Excel帮助


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11559003.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存