首先,简单介绍一下EXECL中工作簿和工作表的区别:
工作簿的英文是BOOK(WORKBOOK),工作表的英文是SHEET(WORKSHEET)。
- 一个工作簿就是一个独立的文件
- 一个工作簿里面可以有1个或者多个工作表
- 工作簿是工作表的集合
1:使用python实现对Excel文件的读写,首先需要安装专用的模块(可以自己编写)xlrd,xlwt模块
2:读取excel数据(注意事项:sheet编号,行号,列号都是从索引0开始)
1 import xlrd 2 3 # 设置路径 4 path = 'E:/input.xlsx' 5 # 打开execl 6 workbook = xlrd.open_workbook(path) 7 8 # 输出Excel文件中所有sheet的名字 9 print(workbook.sheet_names())10 11 # 根据sheet索引或者名称获取sheet内容12 Data_sheet = workbook.sheets()[0] # 通过索引获取13 # Data_sheet = workbook.sheet_by_index(0) # 通过索引获取14 # Data_sheet = workbook.sheet_by_name(u'名称') # 通过名称获取15 16 17 print(Data_sheet.name) # 获取sheet名称18 rowNum = Data_sheet.nrows # sheet行数19 colNum = Data_sheet.ncols # sheet列数20 21 # 获取所有单元格的内容22 list = []23 for i in range(rowNum):24 rowlist = []25 for j in range(colNum):26 rowlist.append(Data_sheet.cell_value(i, j))27 list.append(rowlist)28 # 输出所有单元格的内容29 for i in range(rowNum):30 for j in range(colNum):31 print(list[i][j], '\t\t', end="")32 print()33 34 # 获取整行和整列的值(列表)35 rows = Data_sheet.row_values(0) # 获取第一行内容36 cols = Data_sheet.col_values(1) # 获取第二列内容37 # print (rows)38 # print (cols)39 40 # 获取单元格内容41 cell_A1 = Data_sheet.cell(0, 0).value42 cell_B1 = Data_sheet.row(0)[1].value # 使用行索引43 cell_C1 = Data_sheet.cell(0, 2).value44 cell_D2 = Data_sheet.col(3)[1].value # 使用列索引45 print(cell_A1, cell_B1, cell_C1, cell_D2)46 47 # 获取单元格内容的数据类型48 # ctype:0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error49 print('cell(0,0)数据类型:', Data_sheet.cell(0, 0).ctype)50 print('cell(1,0)数据类型:', Data_sheet.cell(1, 0).ctype)51 print('cell(1,1)数据类型:', Data_sheet.cell(1, 1).ctype)52 print('cell(1,2)数据类型:', Data_sheet.cell(1, 2).ctype)53 54 # 获取单元格内容为日期的数据55 date_value = xlrd.xldate_as_tuple(Data_sheet.cell_value(1,0),workbook.datemode)56 print(type(date_value), date_value)57 print('%d:%d:%d' % (date_value[0:3]))
3:创建excel并写入数据
import xlwtdef set_style(name, height, bold=False): style = xlwt.XFStyle() # 初始化样式 font = xlwt.Font() # 为样式创建字体 font.name = name font.bold = bold font.color_index = 4 font.height = height style.font = font return styledef write_excel(path): # 创建工作簿 workbook = xlwt.Workbook(encoding='utf-8') # 创建sheet data_sheet = workbook.add_sheet('demo') row0 = [u'字段名称', u'大致时段', 'CRNTI', 'CELL-ID'] row1 = [u'测试', '15:50:33-15:52:14', 22706, 4190202] # 生成第一行和第二行 for i in range(len(row0)): data_sheet.write(0, i, row0[i], set_style('Times New Roman', 220, True)) data_sheet.write(1, i, row1[i], set_style('Times New Roman', 220, True)) # 保存文件 # workbook.save('demo.xls') workbook.save(path)if __name__ == '__main__': # 设置路径 path = 'E:/demo.xls' write_excel(path) print(u'创建demo.xls文件成功')
再看一个例子:
转载:
基本的write函数接口很简单:
- 新建一个excel文件: file = xlwt.Workbook() (注意这里的Workbook首字母是大写)
- 新建一个sheet: table = file.add_sheet('sheet_name')
- 写入数据table.write(行,列,value): table.write(0,0,'test')
- 如果是写入中文,则要用u'汉字'的形式。比如: table.write(0,0, u'汉字')
- 合并单元格: table.write_merge(x, x + m, y, y + n, string, style)
- x表示行,y表示列,m表示跨行个数,n表示跨列个数,string表示要写入的单元格内容,style表示单元格样式
1 """ 2 设置单元格样式 3 """ 4 import xlwt 5 6 7 def set_style(font_name, font_height, bold=False): 8 style = xlwt.XFStyle() # 初始化样式 9 10 font = xlwt.Font() # 为样式创建字体11 font.name = font_name # 'Times New Roman'12 font.bold = bold13 font.color_index = 414 font.height = font_height15 16 borders = xlwt.Borders()17 borders.left = 618 borders.right = 619 borders.top = 620 borders.bottom = 621 22 style.font = font23 style.borders = borders24 25 return style26 27 28 # 写excel29 def write_excel(output_path):30 f = xlwt.Workbook() # 创建工作簿31 '''32 创建第一个sheet:33 sheet134 '''35 sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) # 创建sheet36 row0 = [u'业务',u'状态',u'北京',u'上海',u'广州',u'深圳',u'状态小计',u'合计']37 column0 = [u'机票',u'船票',u'火车票',u'汽车票',u'其它']38 status = [u'预订',u'出票',u'退票',u'业务小计']39 # 生成第一行40 for i in range(0, len(row0)):41 sheet1.write(0, i, row0[i], set_style('Times New Roman', 220, True))42 43 # 生成第一列和最后一列(合并4行)44 i, j = 1, 045 while i < 4*len(column0) and j < len(column0):46 sheet1.write_merge(i, i+3, 0, 0, column0[j], set_style('Arial', 220, True)) # 第一列47 sheet1.write_merge(i, i+3, 7, 7) # 最后一列"合计"48 i += 449 j += 150 51 sheet1.write_merge(21,21,0,1,u'合计',set_style('Times New Roman',220,True))52 53 # 生成第二列54 i = 055 while i < 4*len(column0):56 for j in range(0,len(status)):57 sheet1.write(j+i+1, 1, status[j])58 i += 459 60 f.save(output_path)61 62 63 if __name__ == '__main__':64 write_excel('E:/demo.xls') # 保存文件.这里如果是.xlsx的话会打不开。
注意:如果对一个单元格重复操作,会引发error。所以在打开时加cell_overwrite_ok=True解决
table = file.add_sheet('sheet name',cell_overwrite_ok=True)
生成的demo.xls效果如下: