python实现——处理Excel表格(超详细)

  一个Excel电子表格文档称为一个工作簿一个工作簿保存在一个扩展名为.xlsx的文件中一个工作簿可以包含多个表用户当前查看的表(或关闭Excel前最后查看的表)称为活动表在特定行和列的方格称为单元格、格子

  处理Excel表格需要用到openpyxl模块,该模块需要手动安装

  xls和xlsx

  简单来说:xls是excel2003及以前版本所生成的文件格式xlsx是excel2007及以后版本所生成的文件格式(excel 2007之后版本可以打开上述两种格式,但是excel2013只能打开xls格式)

  基本操作

  用到的test.xlsx表格

  在这里插入图片描述

  1:用openpyxl模块打开Excel文档,查看所有sheet表

  openpyxl.load_workbook()函数接受文件名,返回一个workbook数据类型的值。这个workbook对象代表这个Excel文件,这个有点类似File对象代表一个打开的文本文件。

  2.1:通过sheet名称获取表格

  在第10行,使用获取指定sheet表

  2.2:获取活动表

  使用获取活动表

  3.1:获取表格的尺寸

  这里所说的尺寸大小,指的是excel表格中的数据有几行几列,针对的是不同的sheet而言使用获取表格的尺寸下面打印的A1:B7是什么意思呢?

  4.1:获取单元格中的数据

  方法1:指定坐标的方式sheet[“A1”]

  方法2: 指定行列的方式

  sheet.cell(row=, column=)方式

  4.2:获取单元格的行、列、坐标

  获取某个格子的行数; 获取某个格子的列数; 获取某个格子的坐标;

  5:获取区间内的数据

  获取单行单列数据的时候,使用一层for循环;获取多行多列、指定区间的数据时,使用两层for循环

  获取指定区间的数据

  使用拿到指定区间使用两个for循环拿到数据

  获取指定行列的数据

  sheet[“A”] — 获取A列的数据sheet[“A:C”] — 获取A,B,C三列的数据sheet[5] — 只获取第5行的数据

  下面的代码,获取一列数据的时候,使用一层for循环

  下面代码,获取两列数据的时候,使用两层for循环。注意到,两列的结果打印到一起了,可读性较差

  按行、列获取值

  :按行读取:按列读取

  

  获取活动表的行列数

  方法1:使用sheet.max_row 获取行数sheet.max_column 获取列数

  方法2:自己写一个for循环

  操作

  创建新的excel

  第9行代码用来指定创建的excel的活动表的名字:不写第9行,默认创建sheet写了第9行,创建指定名字的sheet表

  修改单元格、excel另存为

  第9行代码,通过给单元格重新赋值,来修改单元格的值第9行代码的另一种写法第10行代码,保存时如果使用原来的(第7行)名字,就直接保存;如果使用了别的名字,就会另存为一个新文件

  

  添加数据

  插入有效数据

  使用方法,在原来数据的后面,按行插入数据

  

  插入空行空列

  insert_rows(idx=数字编号, amount=要插入的行数),插入的行数是在idx行数的下方插入insert_cols(idx=数字编号, amount=要插入的列数),插入的位置是在idx列数的左侧插入

  

  删除行、列

  delete_rows(idx=数字编号, amount=要删除的行数)delete_cols(idx=数字编号, amount=要删除的列数)

  

  移动指定区间的单元格(move_range)

  move_range(“数据区域”,rows=,cols=):正整数为向下或向右、负整数为向左或向上

  

  字母列号与数字列号之间的转换

  核心代码

  举个例子:

  字体样式

  查看字体样式

  修改字体样式

  openpyxl.styles.Font(name=字体名称,size=字体大小,bold=是否加粗,italic=是否斜体,color=字体颜色)其中,字体颜色中的color是RGB的16进制表示

  

  再者,可以使用for循环,修改多行多列的数据,在这里介绍了获取的方法

  

  设置对齐格式

  Alignment(horizontal=水平对齐模式,vertical=垂直对齐模式,text_rotation=旋转角度,wrap_text=是否自动换行)

  水平对齐:‘distributed’,‘justify’,‘center’,‘left’,‘centerContinuous’,'right,‘general’

  垂直对齐:‘bottom’,‘distributed’,‘justify’,‘center’,‘top’

  

  当然,你仍旧可以调用for循环来实现对多行多列的操作

  

  设置行高列宽

  设置行列的宽高:row_dimensions[行编号].height = 行高column_dimensions[列编号].width = 列宽

  

  设置所有单元格

  (显示的结果是设置所有,有数据的单元格的)

  

  合并、拆分单元格

  合并单元格有下面两种方法,需要注意的是,如果要合并的格子中有数据,即便python没有报错,Excel打开的时候也会报错。

  merge_cells(待合并的格子编号)

  merge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号)

  

  拆分单元格的方法同上

  unmerge_cells(待合并的格子编号)

  unmerge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号)

  sheet表

  创建新的sheet(create_sheet)

  create_sheet(“新的sheet名”):创建一个新的sheet表

  

  修改sheet名字(title)

  第11行,使用修改sheet表的名字

  

  复制sheet表(copy_worksheet)

  在“操作”>“修改单元格、excel另存为”中提到了另存为,其实复制sheet表就是一个另存为的过程,你要是在12行代码保存的时候使用第7行的文件名,那么复制的sheet表就保存到自己身上,内容跟copy.xlsx一样。

  

  删除sheet表(remove)

  remove(“sheet名”):删除某个sheet表要删除某sheet表,需要激活这个sheet表,即:将其作为活动表(关于活动表的定义请看前面文章开头写的有)下面8~11行代码展示了原始活动表与手动更换活动表,第13行代码删掉活动表

  

  操作多个Excel表

  其实想用openpyxl玩这个,但是网上用的是别的库,就有点无语,以后熟练的话在自己写一个函数实现吧

  背景知识

  numpy与pandas

  NumPy是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库;pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的,我们需要利用Pandas进行Excel的合并

  1、下面的代码生成了一个5行3列的包含15个字符的嵌套列表

  (注意,第4行代码:15是等于35的,如果是15对应43,或者16对应5*3都会报错)

  (注意,第5行代码,虽然5行3列是15个数据,但是可以指定数据从1开头,到16结束)

  2、添加表头

  使用pandas库的DataFrame来添加表头。关于打印的结果,把最左侧的一列去掉之后会发现结果很和谐,这是因为最左侧的一列代表行号。此时xx变量的类型是<class ‘pandas.core.frame.DataFrame’>

  3、合并两个矩阵

  pd.concat(list)括号中传入的是一个列表;

  ignore_list=True表示忽略原有索引,重新生成一组新的索引;

  或者直接可以写成z = pd.concat([xx,yy],ignore_list=True);

  不知道为什么失败,暂时搁浅

  xlsxwriter

  xlsxwriter模块一般是和xlrd模块搭配使用的,

  xlsxwriter:负责写入数据,

  xlrd:负责读取数据。

  创建一个工作簿

  创建sheet表

  写入数据