Python与Excel交互

1、安装xlwings,参考 http://docs.xlwings.org/en/stable/installation.html#installation

2、创建项目。

>> xlwings quickstart myproject

生成了两个文件。

https://github.com/longlongpicture/myblogpicture/raw/master/exceljiaohu1.PNG

其中,myproject.xlsm是Excel文件,myproject.py用来写一些功能函数。

3、打开myproject.py,编写工具。

import xlwings


def addlist():
    wb = xlwings.Book.caller()
    wb.sheets[0].range("A1").value = [(1,),(2,),(3,),(4,),(5,)]
    wb.sheets[0].range("B2").value = [6,7,8,9,10]


@xlwings.func
def sumlist(ls):
    return sum(ls)

4、打开myproject.xlsm,提示“宏已被禁用”,点击"启用内容"按钮。

5、按下 Alt+F11,启动Microsoft Visual Basic for Applications,双击"Sheet1"。

1
2
3
Sub HelloWorld()
    RunPython ("import myproject; myproject.addlist()")
End Sub

6、点击工具栏上的绿色三角按钮,执行代码。

https://github.com/longlongpicture/myblogpicture/raw/master/exceljiaohu2.PNG

7、测试xlwings选项卡,设置Interpreter(Python解释器)【C:\Users\mayan\Anaconda3\python3.exe】、PYTHONPATH(Python模块路径)【C:\Users\mayan\Anaconda3\Lib\site-packages】、UDF Modules(用户定义函数)【myproject】,点击Import Functions,弹出命令行窗口,最小化不要关闭。如果没有xlwings选项卡,找到 C:\Users\mayan\Anaconda3\Lib\site-packages\xlwings\addin ,双击 xlwings.xlam 。

https://github.com/longlongpicture/myblogpicture/raw/master/exceljiaohu3.PNG

8、在Excel中编写公式。

https://github.com/longlongpicture/myblogpicture/raw/master/exceljiaohu4.PNG

9、回车可以看到运算结果。

https://github.com/longlongpicture/myblogpicture/raw/master/exceljiaohu5.PNG

通过同样的原理,我们可以用Python完成Excel中需要编写VBA才能完成的事情,尤其结合Python强大的数据分析能力和Excel强大的数据组织能力,可以非常有力地提高数据分析的效率。

Excel中国式排名

假设Y5是数据的第一行,Y5:Y45是所有数据,那么在排名列的第一行输入

=RANK(Y5,$Y$5:$Y$45,0)

向下填充之后就实现中国式排名了。

Python将PDF转成图片

使用Python的fitz库,参考代码:

import fitz

sizelist = [5, 5.5, 6.5, 7.5, 8, 9,
            10, 10.5, 12, 14, 16, 18,
            20, 22, 24, 26, 28, 36,
            42, 48, 60, 72]

for si in sizelist:
    print(si)
    docs = fitz.open("字库/"+str(si)+"/字库.pdf")
    pagenum = 1
    for i in range(0, docs.pageCount):
        page = docs.getPagePixmap(i)
        page.writePNG("textdb/"+str(si)+"/page" + str(pagenum)+".png")
        pagenum = pagenum + 1

pexpect执行无错误,也无结果

最后一行代码可以解决这个问题。

import pexpect

userid = 1
userpass = "abcdef"
username = "写程序的龙龙"
useremail = "codinglonglong@126.com"

child = pexpect.spawn('ssh-keygen -t rsa -C "' + useremail + '"')
print("1")
child.expect(": ")
child.sendline("/home/long/.ssh/u" + str(userid))
print("2")
child.expect(": ")
child.sendline(str(userpass))
print("3")
child.expect(": ")
child.sendline(str(userpass))
child.expect(pexpect.EOF)