ly803744

微信公众号:数据运营人
本系列为博主的读书学习笔记,如需转载请注明出处。

当提起数据处理,一般情况下我们都可以用python中的pandas完成,但是当我们发现一些不规则的excel数据,所谓不规则如单元格存在合并等情况,像公司的财务报表数据等,我们可以利用python中的xlrd和xlwt模块对该类数据进行处理。即xlrd是读excel,而xlwt是写excel。

xlrd打开文件获取sheet根据sheet索引或者名称获取sheet内容获取sheet名称、行数、列数获取指定单元格的内容获取特定单元格的数据内容xlwt

xlrd

打开文件
workbook = xlrd.open_workbook(r\'C:/Users/Admin/Desktop/students.xlsx\')
获取sheet
print(workbook.sheet_names())
print(workbook.nsheets)

[\'Sheet1\', \'Sheet2\', \'Sheet3\']
3

根据sheet索引或者名称获取sheet内容
sheet2 = workbook.sheet_by_index(0)
sheet3 = workbook.sheet_by_name(\'Sheet1\')


获取sheet名称、行数、列数
print(sheet2.name)
print(sheet2.nrows)
print(sheet2.ncols)
print(sheet3.name)
print(sheet3.nrows)
print(sheet3.ncols)

Sheet1
28
22
Sheet1
28
22

获取指定单元格的内容
print(sheet3.row_values(0)) # 获取第一行
print(sheet3.col_values(0)) # 获取第一列
print(sheet3.cell(21).value)
print(sheet3.cell_value(11))
print(sheet3.row(1)[0].value)

[\'竞赛学生及指导教师奖励明细\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\']
[\'竞赛学生及指导教师奖励明细\', \'序号\', \'\', 0.0, \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'注:在校未毕业学生请提供一卡通账号,离校学生提供建设银行卡号及开户行\n在职教师请提供工号,兼职教师若有工号请提供工号及银行卡号和开户行;离职教师请提供银行卡号及开户行\', \'\', \'\']
分院
序号

获取特定单元格的数据内容
print(sheet3.cell(20).ctype)
print(sheet3.cell(11).ctype)
# 说明 ctype:0 empty, 1 string, 2 number, 3 date, 4 boolean, 5 error

0
1

xlwt

实现该格式excel的数据的设计

def set_style(name, height, bold=False):
style = xlwt.XFStyle() # 初始化样式
font = xlwt.Font() # 为样式创建字体
font.name = name # \'Times New Roman\'
font.bold = bold
font.color_index = 4
font.height = height
style.font = font
return style

# 写excel
def write_excel():
f = xlwt.Workbook() # 创建工作簿
\'\'\'
创建第一个sheet:
sheet1
\'\'\'

sheet1 = f.add_sheet(u\'sheet1\', cell_overwrite_ok=True# 创建sheet
row0 = [u\'业务\'u\'状态\'u\'北京\'u\'上海\'u\'广州\'u\'深圳\'u\'状态小计\'u\'合计\']
column0 = [u\'机票\'u\'船票\'u\'火车票\'u\'汽车票\'u\'其它\']
status = [u\'预订\'u\'出票\'u\'退票\'u\'业务小计\']
# 生成第一行
for i in range(0, len(row0)):
sheet1.write(0, i, row0[i], set_style(\'Times New Roman\'220True))

# 生成第一列和最后一列(合并4行)
i, j = 10
while i < 4 * len(column0) and j < len(column0):
sheet1.write_merge(i, i + 300, column0[j], set_style(\'Arial\'220True)) # 第一列
sheet1.write_merge(i, i + 377# 最后一列"合计"
i += 4
j += 1

sheet1.write_merge(212101u\'合计\', set_style(\'Times New Roman\'220True))
# 生成第二列
i = 0
while i < 4 * len(column0):
for j in range(0, len(status)):
sheet1.write(j + i + 11, status[j])
i += 4

f.save(r\'C:/Users/Admin/Desktop/demo1.csv\'# 保存文件

if __name__ == \'__main__\':
write_excel()

分类:

技术点:

相关文章: