Python——读取和写入excel表格数据的一种方法
一、配置读取和写入环境二、读取excel表格三、写入excel表格四、一个完整工程的代码参考文章一、配置读取和写入环境
说明:读取和写入我们采用的是xlrd库
xlrd2.0.1及以上版本的库只支持.xls文件格式xlrd1.2.0版本的库支持.xls和.xlsx文件格式
所以,我们最好将我们的xlrd版本改成1.2.0版本
打开终端,输入以下命令即可查看当前设备上 xlrd 版本:
pip show xlrd
如果发现xlrd非1.2.0版本,则可以采取下面命令进入xlrd版本更换:
pip uninstall xlrdpip install xlrd==1.2.0 #下载1.2.0版本
二、读取excel表格
import xlrd # 导入库data = xlrd.open_workbook('F:\\BaiduNetdiskWorkspace\\Code\\Python_Vscode\\1214\\sample(1).xlsx') # 读取文件table =data.sheets()[0] # 将第一个sheet赋给tablenrows = table.nrows # 总行数ncols = table.ncols # 总列数table.row_values(i)[j] # 获取excel表格中(第i+1行,第j+1列)格子里的内容
三、写入excel表格
# 导入库import xlwt# 将数据写入excel表格workbook = xlwt.Workbook() sheet = workbook.add_sheet("Sheet") al = xlwt.Alignment()al.horz = 0x02 # 设置水平居中# 创建样式对象1,初始化样式style_1 = xlwt.XFStyle() style_1.num_format_str = 'M/D/YY' # 设置日期格式style_1.alignment = al # 设置水平居中# 创建样式对象2,初始化样式style_2 = xlwt.XFStyle() style_2.alignment = al # 设置水平居中# 写入第一、第二列for i in range(len(target_data)): for j in range(0,2): sheet.write(i, j, target_data[i][j],style_1)# 写入其余列for i in range(len(target_data)): for j in range(2,len(target_data[i])): sheet.write(i, j, target_data[i][j],style_2)# 设置每列宽度sheet.col(0).width=256*15 # 第1列sheet.col(1).width=256*15 # 第2列sheet.col(2).width=256*12 # 第3列sheet.col(3).width=256*20 # 第4列sheet.col(4).width=256*15 # 第5列sheet.col(5).width=256*15 # 第6列sheet.col(6).width=256*15 # 第7列workbook.save("target_data.xls") # 保存到target_data.xls
四、一个完整工程的代码
# 日期:/12/14 # 姓名:csj# 如存在代码问题或有更好的建议,请联系我,邮箱:2946321668@# 导入库import xlrdimport xlwtdata = xlrd.open_workbook('F:\\BaiduNetdiskWorkspace\\Code\\Python_Vscode\\1214\\sample(1).xlsx') # 读取文件table =data.sheets()[0] # 将第一个sheet赋给tablenrows = table.nrows # 总行数ncols = table.ncols # 总列数print("all_nrows:" + str(table.nrows)) # 总行数print("all_cols:" + str(table.ncols)) # 总列数target_data = [] # 定义目标数据空列表target_data.append(["DateAnnounced","DateTerminated","DealNumber","NumberofParticipants","Compang-Pair-1","Compang-Pair-2","Group Number"]) # 写目标数据列标题i = 1 # 第二行有值元素的位置:下标为1,第二列while i < nrows:j = 4 # part1的位置:下标4,第5列while j < ncols:# 提取某行part中的有值数据个数new_row_data = [] for m in range(4,20):if table.row_values(i)[m] != '':new_row_data.append(table.row_values(i)[m])new_row_data_len = len(new_row_data)# print(new_row_data) # 测试new_row_data是否正常# 利用数据结构基本算法,使符合要求的数据按顺序俩俩组合new_cell = []start = 0for num1 in range(start,new_row_data_len):for num2 in range(num1 + 1,new_row_data_len):new_cell.append([new_row_data[num1],new_row_data[num2]]) # 以二维列表存入j += 1# print(new_cell) # 测试new_cell是否正常# 在target_data最后写入符合要求的行数据for k in range(0,len(new_cell)):target_data.append([table.row_values(i)[0],table.row_values(i)[1],table.row_values(i)[2],table.row_values(i)[3],new_cell[k][0],new_cell[k][1],table.row_values(i)[2]])i += 1# 将数据写入excel表格workbook = xlwt.Workbook() sheet = workbook.add_sheet("Sheet") al = xlwt.Alignment()al.horz = 0x02 # 设置水平居中# 创建样式对象1,初始化样式style_1 = xlwt.XFStyle() style_1.num_format_str = 'M/D/YY' # 设置日期格式style_1.alignment = al # 设置水平居中# 创建样式对象2,初始化样式style_2 = xlwt.XFStyle() style_2.alignment = al # 设置水平居中# 写入第一、第二列for i in range(len(target_data)): for j in range(0,2): sheet.write(i, j, target_data[i][j],style_1)# 写入其余列for i in range(len(target_data)): for j in range(2,len(target_data[i])): sheet.write(i, j, target_data[i][j],style_2)# 设置每列宽度sheet.col(0).width=256*15 # 第1列sheet.col(1).width=256*15 # 第2列sheet.col(2).width=256*12 # 第3列sheet.col(3).width=256*20 # 第4列sheet.col(4).width=256*15 # 第5列sheet.col(5).width=256*15 # 第6列sheet.col(6).width=256*15 # 第7列workbook.save("target_data.xls") # 保存到target_data.xls# 输出目标数据列表print(target_data)print("perfect!")