首页 文章资讯内容详情

用python读写excel(xlrd、xlwt)

2026-06-01 4 花语

本文内容纲要:

最近需要从多个excel表里面用各种方式整理一些数据,虽然说原来用过java做这类事情,但是由于最近在学python,所以当然就决定用python尝试一下了。发现python果然简洁很多。这里简单记录一下。(由于是用到什么学什么,所以不算太深入,高手勿喷,欢迎指导)

一、读excel表

读excel要用到xlrd模块,官网安装(http://pypi.python.org/pypi/xlrd)。然后就可以跟着里面的例子稍微试一下就知道怎么用了。大概的流程是这样的:

1、导入模块

importxlrd

2、打开Excel文件读取数据

data=xlrd.open_workbook(excel.xls)

3、获取一个工作表

1table=data.sheets()[0]#通过索引顺序获取 2table=data.sheet_by_index(0)#通过索引顺序获取 3table=data.sheet_by_name(uSheet1)#通过名称获取

4、获取整行和整列的值(返回数组)

table.row_values(i)

table.col_values(i)

5、获取行数和列数

table.nrows

table.ncols

6、获取单元格

table.cell(0,0).value

table.cell(2,3).value

就我自己使用的时候觉得还是获取cell最有用,这就相当于是给了你一个二维数组,余下你就可以想怎么干就怎么干了。得益于这个十分好用的库代码很是简洁。但是还是有若干坑的存在导致话了一定时间探索。现在列出来供后人参考吧:

1、首先就是我的统计是根据姓名统计各个表中的信息的,但是调试发现不同的表中各个名字貌似不能够匹配,开始怀疑过编码问题,不过后来发现是因为空格。因为在excel中输入的时候很可能会顺手在一些名字后面加上几个空格或是tab键,这样看起来没什么差别,但是程序处理的时候这就是两个完全不同的串了。我的解决方法是给每个获取的字符串都加上strip()处理一下。效果良好

2、还是字符串的匹配,在判断某个单元格中的字符串(中文)是否等于我所给出的的时候发现无法匹配,并且各种unicode也不太奏效,百度过一些解决方案,但是都比较复杂或是没用。最后我采用了一个比较变通的方式:直接从excel中获取我想要的值再进行比较,效果是不错就是通用行不太好,个呢不能问题还没解决。

二、写excel表

写excel表要用到xlwt模块,官网下载(http://pypi.python.org/pypi/xlwt)。大致使用流程如下:

1、导入模块

importxlwt

2、创建workbook(其实就是excel,后来保存一下就行)

workbook=xlwt.Workbook(encoding=ascii)

3、创建表worksheet=workbook.add_sheet(MyWorksheet)

4、往单元格内写入内容

worksheet.write(0,0,label=Row0,Column0Value)

5、保存

workbook.save(Excel_Workbook.xls)

由于我的需求比较简单,所以这上面没遇到什么问题,唯一的就是建议还是用ascii编码,不然可能会有一些诡异的现象。

当然xlwt功能远远不止这些,他甚至可以设置各种样式之类的。附上一点例子

1ExamplesGeneratingExcelDocumentsUsingPython’sxlwt 2 3HerearesomesimpleexamplesusingPython’sxlwtlibrarytodynamicallygenerateExceldocuments. 4 5Pleasenoteausefulalternativemaybeezodf,whichallowsyoutogenerateODS(OpenDocumentSpreadsheet)filesforLibreOffice/OpenOffice.Youcancheckthemoutat:http://packages.python.org/ezodf/index.html 6 7TheSimplestExample 8importxlwt 9workbook=xlwt.Workbook(encoding=ascii) 10worksheet=workbook.add_sheet(MyWorksheet) 11worksheet.write(0,0,label=Row0,Column0Value) 12workbook.save(Excel_Workbook.xls) 13 14FormattingtheContentsofaCell 15importxlwt 16workbook=xlwt.Workbook(encoding=ascii) 17worksheet=workbook.add_sheet(MyWorksheet) 18font=xlwt.Font()#CreatetheFont 19font.name=TimesNewRoman 20font.bold=True 21font.underline=True 22font.italic=True 23style=xlwt.XFStyle()#CreatetheStyle 24style.font=font#ApplytheFonttotheStyle 25worksheet.write(0,0,label=Unformattedvalue) 26worksheet.write(1,0,label=Formattedvalue,style)#ApplytheStyletotheCell 27workbook.save(Excel_Workbook.xls) 28 29AttributesoftheFontObject 30font.bold=True#Maybe:True,False 31font.italic=True#Maybe:True,False 32font.struck_out=True#Maybe:True,False 33font.underline=xlwt.Font.UNDERLINE_SINGLE#Maybe:UNDERLINE_NONE,UNDERLINE_SINGLE,UNDERLINE_SINGLE_ACC,UNDERLINE_DOUBLE,UNDERLINE_DOUBLE_ACC 34font.escapement=xlwt.Font.ESCAPEMENT_SUPERSCRIPT#Maybe:ESCAPEMENT_NONE,ESCAPEMENT_SUPERSCRIPT,ESCAPEMENT_SUBSCRIPT 35font.family=xlwt.Font.FAMILY_ROMAN#Maybe:FAMILY_NONE,FAMILY_ROMAN,FAMILY_SWISS,FAMILY_MODERN,FAMILY_SCRIPT,FAMILY_DECORATIVE 36font.charset=xlwt.Font.CHARSET_ANSI_LATIN#Maybe:CHARSET_ANSI_LATIN,CHARSET_SYS_DEFAULT,CHARSET_SYMBOL,CHARSET_APPLE_ROMAN,CHARSET_ANSI_JAP_SHIFT_JIS,CHARSET_ANSI_KOR_HANGUL,CHARSET_ANSI_KOR_JOHAB,CHARSET_ANSI_CHINESE_GBK,CHARSET_ANSI_CHINESE_BIG5,CHARSET_ANSI_GREEK,CHARSET_ANSI_TURKISH,CHARSET_ANSI_VIETNAMESE,CHARSET_ANSI_HEBREW,CHARSET_ANSI_ARABIC,CHARSET_ANSI_BALTIC,CHARSET_ANSI_CYRILLIC,CHARSET_ANSI_THAI,CHARSET_ANSI_LATIN_II,CHARSET_OEM_LATIN_I 37font.colour_index=? 38font.get_biff_record=? 39font.height=0x00C8#C8inHex(indecimal)=10pointsinheight. 40font.name=? 41font.outline=? 42font.shadow=? 43 44SettingtheWidthofaCell 45importxltw 46workbook=xlwt.Workbook() 47worksheet=workbook.add_sheet(MySheet) 48worksheet.write(0,0,MyCellContents) 49worksheet.col(0).width=3333#3333=1"(oneinch). 50workbook.save(Excel_Workbook.xls) 51 52EnteringaDateintoaCell 53importxlwt 54importdatetime 55workbook=xlwt.Workbook() 56worksheet=workbook.add_sheet(MySheet) 57style=xlwt.XFStyle() 58style.num_format_str=M/D/YY#Otheroptions:D-MMM-YY,D-MMM,MMM-YY,h:mm,h:mm:ss,h:mm,h:mm:ss,M/D/YYh:mm,mm:ss,[h]:mm:ss,mm:ss.0 59worksheet.write(0,0,datetime.datetime.now(),style) 60workbook.save(Excel_Workbook.xls) 61 62AddingaFormulatoaCell 63importxlwt 64workbook=xlwt.Workbook() 65worksheet=workbook.add_sheet(MySheet) 66worksheet.write(0,0,5)#Outputs5 67worksheet.write(0,1,2)#Outputs2 68worksheet.write(1,0,xlwt.Formula(A1*B1))#Shouldoutput"10"(A1[5]*A2[2]) 69worksheet.write(1,1,xlwt.Formula(SUM(A1,B1)))#Shouldoutput"7"(A1[5]+A2[2]) 70workbook.save(Excel_Workbook.xls) 71 72AddingaHyperlinktoaCell 73importxlwt 74workbook=xlwt.Workbook() 75worksheet=workbook.add_sheet(MySheet) 76worksheet.write(0,0,xlwt.Formula(HYPERLINK("http://www.google.com";"Google")))#Outputsthetext"Google"linkingtohttp://www.google.com 77workbook.save(Excel_Workbook.xls) 78 79MergingColumnsandRows 80importxlwt 81workbook=xlwt.Workbook() 82worksheet=workbook.add_sheet(MySheet) 83worksheet.write_merge(0,0,0,3,FirstMerge)#Mergesrow0scolumns0through3. 84font=xlwt.Font()#CreateFont 85font.bold=True#SetfonttoBold 86style=xlwt.XFStyle()#CreateStyle 87style.font=font#AddBoldFonttoStyle 88worksheet.write_merge(1,2,0,3,SecondMerge,style)#Mergesrow1through2scolumns0through3. 89workbook.save(Excel_Workbook.xls) 90 91SettingtheAlignmentfortheContentsofaCell 92importxlwt 93workbook=xlwt.Workbook() 94worksheet=workbook.add_sheet(MySheet) 95alignment=xlwt.Alignment()#CreateAlignment 96alignment.horz=xlwt.Alignment.HORZ_CENTER#Maybe:HORZ_GENERAL,HORZ_LEFT,HORZ_CENTER,HORZ_RIGHT,HORZ_FILLED,HORZ_JUSTIFIED,HORZ_CENTER_ACROSS_SEL,HORZ_DISTRIBUTED 97alignment.vert=xlwt.Alignment.VERT_CENTER#Maybe:VERT_TOP,VERT_CENTER,VERT_BOTTOM,VERT_JUSTIFIED,VERT_DISTRIBUTED 98style=xlwt.XFStyle()#CreateStyle 99style.alignment=alignment#AddAlignmenttoStyle 100worksheet.write(0,0,CellContents,style) 101workbook.save(Excel_Workbook.xls) 102 103AddingBorderstoaCell 104#Pleasenote:WhileIwasabletofindtheseconstantswithinthesourcecode,onmysystem(usingLibreOffice,)Iwasonlypresentedwithasolidline,varyingfromthintothick;nodottedordashedlines. 105importxlwt 106workbook=xlwt.Workbook() 107worksheet=workbook.add_sheet(MySheet) 108borders=xlwt.Borders()#CreateBorders 109borders.left=xlwt.Borders.DASHED#Maybe:NO_LINE,THIN,MEDIUM,DASHED,DOTTED,THICK,DOUBLE,HAIR,MEDIUM_DASHED,THIN_DASH_DOTTED,MEDIUM_DASH_DOTTED,THIN_DASH_DOT_DOTTED,MEDIUM_DASH_DOT_DOTTED,SLANTED_MEDIUM_DASH_DOTTED,or0x00through0x0D. 110borders.right=xlwt.Borders.DASHED 111borders.top=xlwt.Borders.DASHED 112borders.bottom=xlwt.Borders.DASHED 113borders.left_colour=0x40 114borders.right_colour=0x40 115borders.top_colour=0x40 116borders.bottom_colour=0x40 117style=xlwt.XFStyle()#CreateStyle 118style.borders=borders#AddBorderstoStyle 119worksheet.write(0,0,CellContents,style) 120workbook.save(Excel_Workbook.xls) 121 122SettingtheBackgroundColorofaCell 123importxlwt 124workbook=xlwt.Workbook() 125worksheet=workbook.add_sheet(MySheet) 126pattern=xlwt.Pattern()#CreatethePattern 127pattern.pattern=xlwt.Pattern.SOLID_PATTERN#Maybe:NO_PATTERN,SOLID_PATTERN,or0x00through0x12 128pattern.pattern_fore_colour=5#Maybe:8through63.0=Black,1=White,2=Red,3=Green,4=Blue,5=Yellow,6=Magenta,7=Cyan,16=Maroon,17=DarkGreen,18=DarkBlue,19=DarkYellow,almostbrown),20=DarkMagenta,21=Teal,22=LightGray,23=DarkGray,thelistgoeson... 129style=xlwt.XFStyle()#CreatethePattern 130style.pattern=pattern#AddPatterntoStyle 131worksheet.write(0,0,CellContents,style) 132workbook.save(Excel_Workbook.xls) 133 134TODO:ThingsLefttoDocument 135-Panes--separateviewswhicharealwaysinview 136-BorderColors(documentedabove,butnottakingeffectasitshould) 137-BorderWidths(documentabove,butnotworkingasexpected) 138-Protection 139-RowStyles 140-Zoom/Manification 141-WSProps? 142SourceCodeforreferenceavailableat:https://secure.simplistix.co.uk/svn/xlwt/trunk/xlwt/

本文内容总结:

原文链接:https://www.cnblogs.com/MrLJC/p/3715783.html