网站首页 文章专栏 python操作xlsx文件(openpyxl)
在处理一些作业时,经常会碰到统计未交人数、分数等需求,虽然我们在数据库中有了对应的数据,
但是数据库只是面向开发者的,仍然需要将其转换为专业的可阅读格式-excel表格。
目前常用的操作xlsx表格的是openpyxl, 官网地址
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
## 在内存中创建一个workbook对象,而且会至少创建一个 worksheet
wb = Workbook()
#获取当前活跃的worksheet,默认就是第一个worksheet
ws = wb.active
#设置单元格的值,A1等于6(测试可知openpyxl的行和列编号从1开始计算),B1等于7
ws.cell(row=1, column=1).value = 6
ws.cell("B1").value = 7
#从第2行开始,写入9行10列数据,值为对应的列序号A、B、C、D...
for row in range(2,11):
for col in range (1,11):
ws.cell(row=row, column=col).value = get_column_letter(col)
#可以使用append插入一行数据
ws.append(["我","你","她"])
#保存
wb.save(filename="/Users/budong/Desktop/a.xlsx")
from openpyxl import load_workbook
#打开一个workbook
wb = load_workbook(filename="/Users/budong/Desktop/a.xlsx")
#获取当前活跃的worksheet,默认就是第一个worksheet
#ws = wb.active
#当然也可以使用下面的方法
#获取所有表格(worksheet)的名字
sheets = wb.get_sheet_names()
#第一个表格的名称
sheet_first = sheets[0]
#获取特定的worksheet
ws = wb.get_sheet_by_name(sheet_first)
#获取表格所有行和列,两者都是可迭代的
rows = ws.rows
columns = ws.columns
#迭代所有的行
for row in rows:
line = [col.value for col in row]
print(line)
#通过坐标读取值
print(ws.cell('A1').value) ## A表示列,1表示行
print(ws.cell(row=1, column=1).value)
在该例子中,xlsx表格中只有两列,第一列是学生学号,第二列是学生姓名,
使用get_stu
可以获取xlsx文件中的学号与姓名供使用,使用write_xlsx
可以向xlsx文件中写入数据,其中data为二维列表。
from openpyxl import Workbook, load_workbook
src_name = 'students.xlsx'
def get_stu(file_name, type='code'):
wb = load_workbook(file_name)
ws = wb.active
stu_code = []
rows = ws.rows
for row in rows:
if type=='code':
## stu code
col = row[1]
elif type=='name':
col = row[2]
else:
col = row[1]
stu_code.append(str(col.value))
return stu_code
def write_xlsx(file_name, data):
wb = Workbook()
ws = wb.active
for row in range(1,len(data) + 1):
for column in range(1, len(data[row-1]) + 1):
ws.cell(row=row, column=column).value = data[row-1][column-1]
wb.save(filename=file_name)
参考:
1. 脚本之家