《用Python处理Excel表格》下篇来啦! 身为工作党或学生党的你,平日里肯定少不了与Excel表格打交道的机会。当你用Excel处理较多数据时,还在使用最原始的人工操作吗?现在教你如何用Python处理Excel,从此处理表格再也不加班,时间缩短数十倍! 上篇我们进行了一些事前准备,目的是用Python提取Excel表中的数据。而这一篇便是在获取数据的基础上,对Excel表格的实操处理。操作 创建新的excel 第9行代码用来指定创建的excel的活动表的名字: 不写第9行,默认创建sheet 写了第9行,创建指定名字的sheet表importosimportopenpyxlpathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。Workbook()sheetworkbook。activesheet。title1号sheetworkbook。save(1。xlsx) 修改单元格、excel另存为 第9行代码,通过给单元格重新赋值,来修改单元格的值 第9行代码的另一种写法sheet〔B1〕。valueage 第10行代码,保存时如果使用原来的(第7行)名字,就直接保存;如果使用了别的名字,就会另存为一个新文件importosimportopenpyxlpathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(test。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表sheet〔A1〕nameworkbook。save(test。xlsx) 添加数据 插入有效数据 使用append()方法,在原来数据的后面,按行插入数据importosimportopenpyxlpathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(test。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表print(当前活动表是:str(sheet))data〔〔素子,23〕,〔巴特,24〕,〔塔奇克马,2〕〕forrowindata:sheet。append(row)使用append插入数据workbook。save(test。xlsx) 插入空行空列 insertrows(idx数字编号,amount要插入的行数),插入的行数是在idx行数的下方插入 insertcols(idx数字编号,amount要插入的列数),插入的位置是在idx列数的左侧插入importosimportopenpyxlpathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(test。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表print(当前活动表是:str(sheet))sheet。insertrows(idx3,amount2)sheet。insertcols(idx2,amount1)workbook。save(test。xlsx) 删除行、列 deleterows(idx数字编号,amount要删除的行数) deletecols(idx数字编号,amount要删除的列数)importosimportopenpyxlpathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(test。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表print(当前活动表是:str(sheet))sheet。deleterows(idx10)删除第10行sheet。deletecols(idx1,amount2)删除第1列,及往右共2列workbook。save(test。xlsx) 移动指定区间的单元格(moverange) moverange(数据区域,rows,cols):正整数为向下或向右、负整数为向左或向上importosimportopenpyxlpathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(test。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表print(当前活动表是:str(sheet))sheet。moverange(D11:F12,rows0,cols3)移动D11到F12构成的矩形格子workbook。save(test。xlsx) 字母列号与数字列号之间的转换 核心代码fromopenpyxl。utilsimportgetcolumnletter,columnindexfromstring根据列的数字返回字母print(getcolumnletter(2))B根据字母返回列的数字print(columnindexfromstring(D))4 举个例子:importosimportopenpyxlfromopenpyxl。utilsimportgetcolumnletter,columnindexfromstringpathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(2。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表print(当前活动表是:str(sheet))根据列的数字返回字母print(getcolumnletter(2))B根据字母返回列的数字print(columnindexfromstring(D))4 字体样式 查看字体样式importosimportopenpyxlimportopenpyxl。stylespathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(test。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表print(当前活动表是:str(sheet))cellsheet〔A1〕fontcell。fontprint(当前单元格的字体样式是)print(font。name,font。size,font。bold,font。italic,font。color)当前活动表是:Worksheet1号sheet当前单元格的字体样式是等线11。0FalseFalseopenpyxl。styles。colors。ColorobjectParameters:rgbNone,indexedNone,autoNone,theme1,tint0。0,typetheme修改字体样式 openpyxl。styles。Font(name字体名称,size字体大小,bold是否加粗,italic是否斜体,color字体颜色) 其中,字体颜色中的color是RGB的16进制表示importosimportopenpyxlimportopenpyxl。stylespathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(test。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表print(sheet)cellsheet〔A1〕cell。fontopenpyxl。styles。Font(name微软雅黑,size20,boldTrue,italicTrue,colorFF0000)workbook。save(test。xlsx) 再者,可以使用for循环,修改多行多列的数据,在这里介绍了获取的方法importosimportopenpyxlimportopenpyxl。stylespathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(test。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表print(sheet)cellsheet〔A〕foriincell:i。fontopenpyxl。styles。Font(name微软雅黑,size20,boldTrue,italicTrue,colorFF0000)workbook。save(test。xlsx) 设置对齐格式 Alignment(horizontal水平对齐模式,vertical垂直对齐模式,textrotation旋转角度,wraptext是否自动换行) 水平对齐:‘distributed’,‘justify’,‘center’,‘left’,‘centerContinuous’,right,‘general’ 垂直对齐:‘bottom’,‘distributed’,‘justify’,‘center’,‘top’importosimportopenpyxl。stylespathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(test。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表print(当前活动表是:str(sheet))cellsheet〔A1〕alignmentopenpyxl。styles。Alignment(horizontalcenter,verticalcenter,textrotation0,wraptextTrue)cell。alignmentalignmentworkbook。save(test。xlsx) 当然,你仍旧可以调用for循环来实现对多行多列的操作importosimportopenpyxl。stylespathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(test。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表print(当前活动表是:str(sheet))cellsheet〔A〕alignmentopenpyxl。styles。Alignment(horizontalcenter,verticalcenter,textrotation0,wraptextTrue)foriincell:i。alignmentalignmentworkbook。save(test。xlsx) 设置行高列宽 设置行列的宽高: rowdimensions〔行编号〕。height行高 columndimensions〔列编号〕。width列宽importosimportopenpyxlimportopenpyxl。stylespathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(test。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表print(当前活动表是:str(sheet))设置第1行的高度sheet。rowdimensions〔1〕。height50设置B列的卷度sheet。columndimensions〔B〕。width20workbook。save(test。xlsx) 设置所有单元格 (显示的结果是设置所有,有数据的单元格的)fromopenpyxlimportloadworkbookfromopenpyxl。utilsimportgetcolumnletterimportosos。chdir(rC:UsersasukaDesktop)workbookloadworkbook(1。xlsx)print(workbook。sheetnames)打印所有的sheet表wsworkbook〔workbook。sheetnames〔0〕〕选中最左侧的sheet表width2。0设置宽度heightwidth(2。28620。3612)设置高度print(row:,ws。maxrow,column:,ws。maxcolumn)打印行数,列数foriinrange(1,ws。maxrow1):ws。rowdimensions〔i〕。heightheightforiinrange(1,ws。maxcolumn1):ws。columndimensions〔getcolumnletter(i)〕。widthwidthworkbook。save(test。xlsx) 合并、拆分单元格 合并单元格有下面两种方法,需要注意的是,如果要合并的格子中有数据,即便python没有报错,Excel打开的时候也会报错。 mergecells(待合并的格子编号) mergecells(startrow起始行号,startcolumn起始列号,endrow结束行号,endcolumn结束列号)importosimportopenpyxlimportopenpyxl。stylespathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(test。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表print(当前活动表是:str(sheet))方法1:sheet。mergecells(A12:B13)方法2:sheet。mergecells(startrow12,startcolumn3,endrow13,endcolumn4)加一个居中对齐cellsheet〔A12〕alignmentopenpyxl。styles。Alignment(horizontalcenter,verticalcenter,textrotation0,wraptextTrue)cell。alignmentalignmentcellsheet〔C12〕alignmentopenpyxl。styles。Alignment(horizontalcenter,verticalcenter,textrotation0,wraptextTrue)cell。alignmentalignmentworkbook。save(test。xlsx) 拆分单元格的方法同上 unmergecells(待合并的格子编号) unmergecells(startrow起始行号,startcolumn起始列号,endrow结束行号,endcolumn结束列号) sheet表 创建新的sheet(createsheet) createsheet(新的sheet名):创建一个新的sheet表importosimportopenpyxlpathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(test。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表print(当前活动表是:str(sheet))workbook。createsheet(3号sheet)创建新的sheet表print(workbook。sheetnames)查看所有的sheet表workbook。save(test。xlsx)当前活动表是:WorksheetSheet1〔Sheet1,Sheet2,3号sheet〕 修改sheet名字(title) 第11行,使用title修改sheet表的名字importosimportopenpyxlpathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(test。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表print(当前活动表是:str(sheet))sheet。title1号sheet修改sheet表workbook。save(test。xlsx) 复制sheet表(copyworksheet) 在操作修改单元格、excel另存为中提到了另存为,其实复制sheet表就是一个另存为的过程,你要是在12行代码保存的时候使用第7行的文件名,那么复制的sheet表就保存到自己身上,内容跟copy。xlsx一样。importosimportopenpyxlpathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(test。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表print(当前活动表是:str(sheet))workbook。copyworksheet(sheet)复制sheet表workbook。save(copy。xlsx) 删除sheet表(remove) remove(sheet名):删除某个sheet表 要删除某sheet表,需要激活这个sheet表,即:将其作为活动表(关于活动表的定义请看前面文章开头写的有)下面811行代码展示了原始活动表与手动更换活动表,第13行代码删掉活动表importosimportopenpyxlpathrC:UsersasukaDesktopos。chdir(path)修改工作路径workbookopenpyxl。loadworkbook(test。xlsx)返回一个workbook数据类型的值sheetworkbook。active获取活动表print(当前活动表是:str(sheet))sheetworkbook〔3号sheet〕手动切换到要删除的sheet表,一旦切换,这张表就是活动表print(当前活动表是:str(sheet))workbook。remove(sheet)删除当前活动表print(workbook。sheetnames)workbook。save(test。xlsx)当前活动表是:WorksheetSheet1当前活动表是:Worksheet3号sheet〔Sheet1,Sheet2〕 操作多个Excel表 背景知识 numpy与pandas NumPy是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库;pandas是基于NumPy的一种工具,该工具是为解决数据分析任务而创建的,我们需要利用Pandas进行Excel的合并 1。下面的代码生成了一个5行3列的包含15个字符的嵌套列表 (注意,第4行代码:15是等于35的,如果是15对应43,或者16对应53都会报错) (注意,第5行代码,虽然5行3列是15个数据,但是可以指定数据从1开头,到16结束)importnumpyasnpimportpandasaspdxxnp。arange(15)。reshape(5,3)yynp。arange(1,16)。reshape(5,3)print(xx)print(yy)〔〔012〕〔345〕〔678〕〔91011〕〔121314〕〕〔〔123〕〔456〕〔789〕〔101112〕〔131415〕〕 2。添加表头 使用pandas库的DataFrame来添加表头。关于打印的结果,把最左侧的一列去掉之后会发现结果很和谐,这是因为最左侧的一列代表行号。此时xx变量的类型是importnumpyasnpimportpandasaspdxxnp。arange(15)。reshape(5,3)yynp。arange(1,16)。reshape(5,3)xxpd。DataFrame(xx,columns〔语文,数学,外语〕)yypd。DataFrame(yy,columns〔语文,数学,外语〕)print(xx)print(yy)结果:语文数学外语0012134526783910114121314语文数学外语01231456278931011124131415xlsxwriter xlsxwriter模块一般是和xlrd模块搭配使用的, xlsxwriter:负责写入数据, xlrd:负责读取数据。 1。创建一个工作簿importxlsxwriterimportospathrC:UsersasukaDesktopos。chdir(path)这一步相当于创建了一个新的工作簿;demo。xlsx文件不存在,表示新建工作簿;demo。xlsx文件存在,表示新建工作簿覆盖原有的工作簿;workbookxlsxwriter。Workbook(demo。xlsx)close是将工作簿保存关闭,这一步必须有,否则创建的文件无法显示出来。workbook。close() 2。创建sheet表importxlsxwriterimportospathrC:UsersasukaDesktopos。chdir(path)workbookxlsxwriter。Workbook(cc。xlsx)创建一个名为cc。xlsx的文件worksheetworkbook。addworksheet(2018年销售量)创建一个名为2018年销售量的sheet表workbook。close() 3。写入数据importxlsxwriterimportospathrC:UsersasukaDesktopos。chdir(path)创建一个名为【demo。xlsx】工作簿;workbookxlsxwriter。Workbook(demo。xlsx)创建一个名为【2018年销售量】工作表;worksheetworkbook。addworksheet(2018年销售量)使用writerow方法,为【2018年销售量】工作表,添加一个表头;headings〔产品,销量,单价〕worksheet。writerow(A1,headings)使用write方法,在【2018年销售量】工作表中插入一条数据;write语法格式:worksheet。write(行,列,数据)data〔苹果,500,8。9〕foriinrange(len(headings)):worksheet。write(1,i,data〔i〕)workbook。close()