使用 Python 处理 Excel
上周五晚,看时间已经快十点了,我打算整理整理回寝室。突然有个学姐来5401,问这里几点关门。我一边整理书包一边和她说,你可以等天亮回去,反正没人管。她突然说,马上就要毕业了,还有和数学系一起的开放实验没有结题,能不能陪她通宵,顺便教她用一下 Excel,她需要清洗一下数据。作为一个死宅,说实话,学姐这种邀请很难接受。我和她说,你先把文件给我吧,我明天想想办法。第二天她把临海劳动节那几天的共享单车的数据发给了我,然后我们就再也没有联系了,现在回想起来,啊,那真是令人愉快的时光。全剧终。
简单读取
对于 Excel 文件的读取,主要依靠的是 xlrd 这个库。代码示例:
import xlrd
xlsx = xlrd.open_workbook('5.1.xlsx')
table = xlsx.sheet_by_index(0)
time = xlrd.xldate_as_tuple(table.row(1)[2].value, 1)
print(time)
简单写入
对于 Excel 文件的写入,主要依靠的是 xlwt 这个库。Xlwt 模块有一个bug:所用样式过多的话,之后的数据将使用不了样式。因此除非必要,更推荐使用xlsxwriter。代码示例:
import xlwt
new_workbook = xlwt.Workbook()
worksheet = new_workbook.add_sheet('Sheet1')
worksheet.write(0, 0, 'header!')
new_workbook.save('test.xls')
实战:将表A的内容写入表B
这里主要使用的是一种循环读取写入的方法,这种方法可以用来过滤数据,比较实用。代码示例:
import xlrd,xlsxwriter
xlsx = xlrd.open_workbook('5.1.xlsx')
new_workbook = xlsxwriter.Workbook('output.xlsx')
worksheet = new_workbook.add_worksheet()
table = xlsx.sheet_by_index(0)
for i in range(0,table.nrows):
for j in range(0,table.ncols):
print(table.cell_value(i, j))
worksheet.write(i, j, table.cell_value(i, j))
new_workbook.close()
为表格添加样式
为表格添加样式主要使用的是 Xlutils 这个库,具体操作可以查看官方文档,这里举一个最简单的范例。
from xlutils.copy import copy
import xlrd
import xlwt
tem_excel = xlrd.open_workbook('D:/source.xls', formatting_info=True)
tem_sheet = tem_excel.sheet_by_index(0)
new_excel = copy(tem_excel)
new_sheet = new_excel.get_sheet(0)
style = xlwt.XFStyle()
font = xlwt.Font()
font.name = '微软雅黑'
font.bold = True
font.height = 360
style.font = font
borders = xlwt.Borders()
borders.top = xlwt.Borders.THIN
borders.bottom = xlwt.Borders.THIN
borders.left = xlwt.Borders.THIN
borders.right = xlwt.Borders.THIN
style.borders = borders
alignment = xlwt.Alignment()
alignment.horz = xlwt.Alignment.HORZ_CENTER
alignment.vert = xlwt.Alignment.VERT_CENTER
style.alignment = alignment
new_sheet.write(2, 1, 12, style)
new_sheet.write(3, 1, 18, style)
new_sheet.write(4, 1, 19, style)
new_sheet.write(5, 1, 15, style)
new_excel.save('D:/source.xls')
评论
发表评论