Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格
Python 需要创建和读取excel表里面的数据,需要用 openpyxl 这个包,今天安装好备用。
首先,进入C命令窗口:
>> cd C:\Users\dell\AppData\Local\Programs\Python\Python37\Scripts
然后,在当前目录下使用pip命令安装:
(直接安装会连接超时、建议选择国内镜像安装相应的包)
>> cdC:\Users\dell\AppData\Local\Programs\Python\Python37\Scripts>pip install --index https://pypi.mirrors./simple/ openpyxl
这时,窗体内闪动以下内容:
2、导入安装成功的openpyxl库。
from openpyxl import Workbook
3、创建一个工作簿。
wb = Workbook()
4、创建工作簿的同时,也有了第一个工作表。
使用下面这行代码来获取工作表。
ws=wb.active
5、给工作表取个名字吧。
【这里是工作表的名字,不是Excel文件的名字。】
ws.title = "我的第一份电子表格"
6、将我们创建好的一切保存到文件中,这样通过Python代码创建的第一个Excel文件就诞生了。
wb.save("我的第一份电子表格.xlsx")
7、Run一下试试看,文件会创建在和Python文件同一级的文件夹中。
看一个空白的Excel表格就创建好了。
进入到你的python目录下看看在不在?
仔细看看:
“我的第一份电子表格” 真的就躺在那儿了!
打开看看正不正常:
9、最后,我也模仿巧乐希老师的介绍,再加上一个打印语句表扬一下努力的自己,创建成功的打印输出。
fromopenpyxlimportWorkbookwb=Workbook()ws = wb.activews.title = "我的第一份电子表格"wb.save("我的第一份电子表格.xlsx")print("恭喜你,表格创建成功了!!!")
接下来继续模仿别人的教程、也来在表格中写入一张乘法表吧!
(以下来源于巧乐希的公众号,学习备忘)
其实,下面的语句还有些看不懂,爸爸叫我先记下来,以后慢慢消化!
向表格里写入运算式
首先,要分析一下九九乘法表的结构,虽然小朋友大都可以倒背如流,但它是怎么样的一个顺序还是需要研究一番的。
看看上面的图片,是不是有这样的特点呢?
第一行:1×1=1
第二行:2×1=2 2×2=4
第三行:3×1=3 3×2=6 3×3=9
...
...
第八行:8×1=8 8×2=16 8×3=24 8×4=32 8×5=40 8×6=48 8×7=56 8×8=64
第九行:9×1=9 9×2=18 9×3=27 9×4=36 9×5=45 9×6=54 9×7=63 9×8=72 9×9=81
通过分析可以看出,
第一行只有1列,
第二行有2列,
......,
第八行有8列,
第九行有9列。
将算式分为
【第一个数字】×【第二个数字】=【计算结果】;
【第一个数字】= 行号
【第二个数字】= 列数
【计算结果】= 行号 × 列数
分析完成,开始敲代码。
1、首先,按照行的顺序来完成数据的写入用以下的语句。
#使用for循环,重复9次,完成9行。for row in range(1,10):
row表示行,range(1,10)的解说如下:
#python range()函数可创建一个整数列表,一般用在 for 循环中。#函数语法range(start,stop[,step])
#参数说明:
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
2、每一行有多少列呢?进行列的操作。在第几行,就有多少列。
第一行的时候只有1列,所以当row=1的时候,column也只能有一个,此时是range(1,2),那么就只有一个1。
第二行的时候只有2列,所以当row=2的时候,column有两个,此时是range(1,3),那么有1,2。
.......
forcolumninrange(1,row+1):
3、在Excel中确定了行和列就可以找到对应的单元格了。通过ws.cell(),将对应的行和列传入函数就可以确定单元格。
cell = ws.cell(row = row, column = column)
4、要写入什么数据呢,需要先将对应的输入格式调整好。
第一个数字×第二个数字数字=计算结果
第一个数字=行号
第二个数字=列数
计算结果=行号×列数
输入格式是这样的:
行号 × 列数= 行号 × 列数
通过字符串将它们链接起来,这里记得将数字转成字符串str()。
cell_value = str(row) + "×" + str(column) + "=" + str(row*column)
5、数据都整理完成了,开始写入到单元格中,将对应的数据写入对应的单元格中。
cell.value = cell_value
6、IDLE中需要输入的全部代码(逐句输入)展示,需要注意缩进!!!
单元格的操作是在两层循环内的,这样才能保证单元格的一一对应的。
from openpyxl import Workbookwb = Workbook()ws = wb.activews.title = "我的乘法表"for row in range(1,10): for column in range(1,row+1):cell =ws.cell(row=row,column=column) cell_value = str(row) + "×" + str(column) + "=" + str(row*column) cell.value = cell_valuewb.save("我的乘法表.xlsx")print("恭喜你,表格创建成功了!!!")
7、Run一下看看效果,这样一个表格就创建好了。
给九九乘法表“填充背景色”
1、只有黑和白的表格看上去干巴巴的,一起来给它涂涂颜色。先给工作表涂上点颜色。
用代码来上色
ws.title="99乘法表"#接上#给工作表添加背景颜色ws.sheet_properties.tabColor = "f05654"
在ws.title = "99乘法表",后一行添加上增加背景色的代码。
2、设置表格中文字的样式。
需要注意的是在代码的头部导入Font库。
from openpyxl.styles import Font
然后进行字体样式的设置
cell.value = cell_value#接上#创建字体样式font_set = Font(name='Arial', size=14, italic=True, color="000000", bold=True)#将字体样式,设置到单元格上,.fontcell.font = font_set
接下来一起看看,每个参数的含义,如果不理解可以翻译一下。
Font
name:字体名称
size:字体大小
italic:斜体(True,False)
color:颜色
bold:加粗(True,False)
strike:为删除线(True,False)
underline:下划线
(singleAccounting,doubleAccounting,double,single)
vertAlign:对齐(subscript,superscript,baseline)
3、设置边框效果,给表格围上一圈边框。
首先需要导入Border和Side库。
from openpyxl.styles import Borderfrom openpyxl.styles import Side
然后设置上下左右边框样式。
border = Border(top=Side(border_style="thin", color="FF000000"),bottom=Side(border_style="thin", color="FF000000"),left=Side(border_style="thin", color="FF000000"),right=Side(border_style="thin", color="FF000000")) cell.border = border
top=设置上边框
bottom=设置下边框
left=设置左边框
right=设置右边框
border_style:边框样式
'mediumDashDot','mediumDashed','dotted','medium','thick','thin','double','dashed','slantDashDot','dashDot','dashDotDot', 'hair','mediumDashDotDot'
4、给单元格填充颜色。
在开始填充颜色之前,先创建一个列表存放9种颜色,为每一行填充一种颜色。这样每次取一种颜色,就可以将表格装饰的很漂亮了。
这个颜色列表写在循环外。
row_color = ["f05654","ff2121","dc3023","ff3300","cb3a56","a98175","b36d61","ef7a82","ff0097"]
填充前,先导入。
from openpyxl.styles import PatternFill
开始填充
fill = PatternFill("solid", fgColor=row_color[row-1])cell.fill = fill
5、Run运行一下,一个漂亮的九九乘法表就完成了。
6、全部代码(一定要注意缩进规范哟,要不然错误很多的 :( )。
from openpyxl import Workbookfrom openpyxl.styles import Fontfrom openpyxl.styles import Borderfrom openpyxl.styles import Sidefrom openpyxl.styles import PatternFillwb = Workbook()ws = wb.activews.title = "99乘法表"ws.sheet_properties.tabColor = "f05654"row_color = ["f05654","ff2121","dc3023","ff3300","cb3a56","a98175","b36d61","ef7a82","ff0097"]for row in range(1,10): for column in range(1,row+1): cell = ws.cell(row = row,column = column) cell_value = str(row)+ "×" + str(column)+ "=" + str(row*column) cell.value = cell_value font_set = Font(name='Arial',size=14, italic=True,color="000000",bold=True) cell.font = font_set border = Border(top=Side(border_style="thin",color="FF000000"), bottom=Side(border_style="thin",color="FF000000"), left=Side(border_style="thin",color="FF000000"), right=Side(border_style="thin",color="FF000000")) cell.border = border fill = PatternFill("solid",fgColor=row_color[row-1]) cell.fill = fill wb.save("我的九九乘法表.xlsx")print("恭喜你,乘法表表格创建成功了!")
备忘:运行中遇到下面的问题,一直报错:
解释器提示如:
SyntaxError: invalid character in identifier
有人说:
如果一直找不到问题点的话,请确保代码行内没有夹杂中文的空格,tab等,非文字字符。
还有人说:跟中文英文空格一点关系都没有!
原因一:冒号后面有制表符。原因二:或者某个第i行开头是制表符,不能识别制表符。
原因三:python的缩进是4个空格;要严格、规范缩进。
说实话,查错好烦,从别人网站拷贝的代码,想模仿一下,结果反而查错花了快一个小时,不如自己输入呢。
也算是教训吧!