之前,今天给大家分享一篇使用python导出大量数据到Excel的文章,可以让Python和Excel的数据互操作!有很好的参考价值,希望对大家有所帮助(建议电脑端阅读,有很多代码案例)。一起来看看吧!问题描述为了更好的展示数据,Excel格式的数据文件往往比文本文件更有优势,但是在python中,如何将数据导出到Excel中呢?如果需要导出大量数据怎么办?具体步骤步骤1使用pipinstallopenpyxl安装openpyxl,但是windows下安装的是2.2.6版本,centos下自动安装4.1版本,写的代码在windows下运行正常,但是在centos上报错,说ew=ExcelWriter(workbook=wb)少了一个参数,果断在237服务器上装了2.2.6版本,问题解决。pipinstallopenpyxl==2.2.6Step2直接上传代码(ps:代码中包含xlwt和openpyxl两个实现版本)#coding:utf-8'''#希望对大家有所帮助,更多问题请教createbyyaoyzdate:2017/01/24'''importxlrdimportxlwt#workbook相关fromopenpyxl.workbookimportWorkbook#ExcelWriter,里面封装了一个非常强大的excel写函数fromopenpyxl.writer.excelimportExcelWriter#蛋疼号转列字母的方法fromopenpyxl.utilsimportget_column_letterfromopenpyxl.reader.excelimportandload_workbook(ExcelH:'''Excel相关操作类'''def__init__(self):self.head_row_labels=[u'学号',u'学号',u'联系方式',u'知识点ID',u'知识点名称']"""功能:读取txt文件中的每条记录,保存到列表中Param:filename:要读取的文件名返回:res_list:返回的记录列表"""defread_from_file(self,文件名):res_list=[]file_obj=open(文件名,"r")forlineinfile_obj.readlines():res_list.append(line)file_obj.close()returnres_list"""功能:读取*.xlsx中的每条记录,保存到data_dic中返回参数:excel_name:文件名被读取返回:data_dic:返回记录的dict"""defread_excel_with_openpyxl(self,excel_name="testexcel2007.xlsx"):#读取excel2007文件wb=load_workbook(filename=excel_name)#显示多少张print"Worksheetrange(s):",wb.get_named_ranges()print"Worksheetname(s):",wb.get_sheet_names()#取第一个sheetsheetnames=wb.get_sheet_names()ws=wb.get_sheet_by_name(sheetnames[0])#显示表名、表行号、表列号print"WorkSheetTitile:",ws.titleprint"WorkSheetRows:",ws.get_highest_row()print"WorkSheetCols:",ws.get_highest_column()#获取读入的excel表有多少行多少列row_num=ws.get_highest_row()col_num=ws.get_highest_column()print"row_num:",row_num,"col_num:",col_num#创建一个字典用于存储数据data_dic={}sign=1#将数据保存在字典中forrowinws.rows:temp_list=[]#print"row",rowforcellinrow:printcell.value,temp_list.append(cell.value)print""data_dic[sign]=temp_listsign+=1printdata_dicreturndata_dic"""功能:读取*.xlsx中的每条记录,保存到data_dic中返回参数:records:待保存的列表,包含g每条记录save_excel_name:文件名另存为head_row_stu_arrive_star:Return:data_dic:返回记录的字典"""defwrite_to_excel_with_openpyxl(self,records,head_row,save_excel_name="save.xlsx"):#新建工作簿wb=Workbook()#新建excelWriterew=ExcelWriter(workbook=wb)#设置文件输出路径和名称dest_filename=save_excel_name.decode('utf-8')#第一个sheet是wsws=wb.worksheets[0]#设置ws的名字ws.title="rangenames"#写第一行,标题行为h_xinrange(1,len(head_row)+1):h_col=get_column_letter(h_x)#printh_colws.cell('%s%s'%(h_col,1)).value='%s'%(head_row[h_x-1])#write第二行和下面几行i=2forrecordinrecords:record_list=str(record).strip().split("\t")forxinrange(1,len(record_list)+1):col=get_column_letter(x)ws.cell('%s%s'%(col,i)).value='%s'%(record_list[x-1].decode('utf-8'))i+=1#writefileew.save(filename=dest_filename)"""功能:测试输出Excel内容并读出Excel文件Param:excel_name:要读出的Excel文件名Return:None"""defread_excel(self,excel_name):workbook=xlrd.open_workbook(excel_name)printworkbook.sheet_names()#获取所有sheetprintworkbook.sheet_names()#[u'sheet1',u'sheet2']sheet2_name=workbook.sheet_names()[1]#根据sheet索引或名称获取sheet内容sheet2=workbook.sheet_by_index(1)#sheet索引从0开始sheet2=workbook.sheet_by_name('Sheet1')#sheet名称,行数,columnsNumberprintsheet2.name,sheet2.nrows,sheet2.ncols#获取整行整列(数组)的值rows=sheet2.row_values(3)#获取第四行的内容cols=sheet2.col_values(2)#获取第三列内容printrowsprintcols#获取单元格内容printsheet2.cell(1,0).valueprintsheet2.cell_value(1,0)printsheet2.row(1)[0].value#获取单元格内容的数据类型printsheet2.cell(1,0).ctype#getreturnworkbook.sheet_by_name(u'Sheet1')"""功能:设置单元格样式Param:name:字体名称height:字体高度bold:是否大写return:style:返回设置格式对象"""defset_style(self,name,height,bold=False):style=xlwt.XFStyle()#Initializestylefont=xlwt.Font()#Createfontforstylefont.name=name#'TimesNewRoman'font.bold=boldfont.color_index=4font.height=heightborders=xlwt.Borders()borders.left=6borders.right=6borders.top=6borders.bottom=6style.font=fontstyle.borders=bordersreturnstyle"""功能:根据设置的单元格样式从txt转换计算结果以Excel存储Param:dataset:要保存的结果数据,列表存储返回:将结果保存为excel对象"""defwrite_to_excel(self,dataset,save_excel_name,head_row):f=xlwt.Workbook()#createworkbook#createthefirstsheet:#sheet1count=1sheet1=f.add_sheet(u'sheet1',cell_overwrite_ok=True)#Createsheet#Firstrowtitle:forpinrange(len(head_row)):sheet1.write(0,p,head_row[p],self.set_style('TimesNewRoman',250,True))default=self.set_style('TimesNewRoman',200,False)#definestyleouttheloopwillworkforlineindataset:row_list=str(line).strip("\n").split("\t")forppinrange(len(str(line).strip("\n").split("\t"))):sheet1.write(count,pp,row_list[pp].decode('utf-8'),default)count+=1f.save(save_excel_name)#保存文件defrun_main_save_to_excel_with_openpyxl(self):print"测试读写2007及以后版本的excel文件xlsx,方便在文件中写入更多数据"print"1.将txt文件读入内存,存为list对象"dataset_list=self.read_from_file("test_excel.txt")'''testuseopenpyxltohandleEXCEL2007'''打印"2.将文件写入Excel表格"head_row_label=self.head_row_labelssave_name="test_openpyxl.xlsx"self.write_to_excel_with_openpyxl(dataset_list,head_row_label,save_name)print"3.执行后,将txt格式文件保存成Excel文件的任务"defrun_main_save_to_excel_with_xlwt(self):print"4.将txt文件读入内存,存储在列表对象中"dataset_list=self.read_from_file("test_excel.txt")'''testusexlwttohandleEXCEL97-2003'''print"5.将文件写入Excel表格"head_row_label=self.head_row_labelssave_name="test_xlwt.xls"self.write_to_excel_with_openpyxl(dataset_list,head_row_label,save_name)print"6.执行后从txt格式文件保存Excel文件的任务"if__name__=='__main__':print"createhandleExcelObject"obj_handle_excel=HandleExcel()#分别使用openpyxl和xlwt将数据写入文件obj_handle_excel.run_main_save_to_excel_with_openpyxl()obj_handle_excel.run_main_save_to_excel_with_xlwt()'''测试读取文件,注意openpyxl不能读取xls文件,xlrd不能读取xlsx格式文件'''#obj_handle_excel.read_open_expyxl(with"testexcel2003.xls")#错误的写法#obj_handle_excel.read_excel_with_openpyxl("testexcel2003.xls")#错误写法obj_handle_excel.read_excel("testexcel2003.xls")obj_handle_excel.read_excel_with_openpyxl("testexcel2007.xlsx")延伸阅读查阅资料后发现网上说法不一。综上,pythonExcel相关操作的模块库有两组。分组有xlrd、xlwt、xlutils,另一组是openpyxl,但是前一组(xlrd、xlwt)比较老,只能处理Excel97-2003或Excel97之前的版本生成的xls格式的excel文件,并且xlwt甚至在07版本之后都不支持excel了。一般来说,这种格式的excel文件只能支持最大256列或65536行的excel文件。因此,当你需要导出大量数据到excel时,你会有以下三种选择:改变一种存储格式,比如用openpyxl保存为CSV文件—,因为它支持Excel2007+xlsx/xlsm的处理formatwin32COM(Windowsonly)当然,我们也不得不面对困难,为了更好的向产品和用户展示数据,我们还是选择了第二种方案。一番查找后,找到了openpyxl的网址,放在下面。它支持Excel07+。有人一直在维护它。该文档清晰易读。参考Tutorial和API文档可以很快上手。如果需要,可以自己拿。openpyxl网址:https://openpyxl.readthedocs.io/en/stable/
