友情提示:380元/半年,儿童学编程,就上码丁实验室。
安装模块
本例子中使用的模块为:
openpyxl
版本为2.4.8
安装方法请参看以前发表的文章(Python 的pip模块安装方法)
Python处理Excel表格
使用模块:openpyxl(2.4.8)
基本使用方法
1.首先导入模块:import openpyxl
2.打开一个已经存在的excel文件:
wb=openpyxl.load_workbook(‘example.xlsx’)
(文件和脚本放在同一个目录下,如果不是的话需要加上路径
wb=wpenpyxl.load_workbook(r’c:maxingpythonexample.xlsx’))
此时wb是一个workbook对象,表示的是整个Excel文件,类似于file对象表示一个文本文件。
3.获取Excel文件中具体的表:
-
sheet=wb.get_sheet_name(‘Sheet1′)#根据表名获取
-
sheet=wb[‘Sheet1’]#更简洁的方法
-
sheet=wb.get_active_sheet()#获取当前激活的表(即打开Excel默认打开的表)
-
sheet=wb.active#通过属性获取当前激活的表
Sheet.title可以得到表的名字。
4.获取表中的行与列
-
sheet.rows
-
sheet.columns
注意这里获取的行与列是一个生成器对象:
>>> sheet.rows
<generator object Worksheet._cells_by_row at 0x000001F3D0132468>
5.获取表的总行数与总列数
-
总行数:len(list(sheet.rows)) 总列数:len(list(sheet.columns))
-
直接调用属性:sheet.max_row;sheet.max_column
6.获取单元格对象
cell=sheet[‘A1’]#获取了一个单元格对象
cell.value#获取该单元格的值
这种方法是使用Excel种默认的行(数字)与列(字母)的形式来获取对应的单元格。
另外一种方式是直接指定命名参数:
-
cell=sheet.cell(row=2,column=2)
-
cell.value#获取单元格的值
-
cell.row#获取相应的行
-
cell.column#获取相应的列
-
cell.cordinate#获取相应的坐标
例子
>>> cell=sheet.cell(row=2,column=2)
>>> cell.value
‘苹果’
>>> cell.row
2
>>> cell.column
‘B’
>>> cell.coordinate
‘B2′
这种方法都是用数字来表示行与列(第一行为1不是0)
这两种工具互转化:
>>> openpyxl.utils.cell.column_index_from_string(‘A’)
1
>>> openpyxl.utils.cell.column_index_from_string(‘AC’)
29
>>> openpyxl.utils.cell.get_column_letter(1)
‘A’
>>> openpyxl.utils.cell.get_column_letter(29)
‘AC’
>>>
7.获取某一个区域的数据
>>> sheet['A1:C3']
((<Cell ‘Sheet1′.A1>, <Cell ‘Sheet1′.B1>, <Cell ‘Sheet1′.C1>), (<Cell ‘Sheet1′.A2>, <Cell ‘Sheet1′.B2>, <Cell ‘Sheet1′.C2>), (<Cell ‘Sheet1′.A3>, <Cell ‘Sheet1′.B3>, <Cell ‘Sheet1′.C3>))
>>> type(sheet['A1:C3'])
<class ‘tuple’>
>>> import pprint#上面打印太乱,导入漂亮打印模块
>>> pprint.pprint(sheet['A1:C3'])
((<Cell ‘Sheet1′.A1>, <Cell ‘Sheet1′.B1>, <Cell ‘Sheet1′.C1>),
(<Cell ‘Sheet1′.A2>, <Cell ‘Sheet1′.B2>, <Cell ‘Sheet1′.C2>),
(<Cell ‘Sheet1′.A3>, <Cell ‘Sheet1′.B3>, <Cell ‘Sheet1′.C3>))
注意到sheet['A1:C3']获取到的是一个元组组成的元组。
8.获取所有的表名
>>> wb.get_sheet_names()
['my first sheet']
返回的是一个列表。
向表格中写入数据
1.新建一个Excel文件
>>> from openpyxl import Workbook
>>> wb=Workbook()
>>> wb
<openpyxl.workbook.workbook.Workbook object at 0x0000029E77422668>
这样便创建了一个Workbook对象,实际上还没有生成Excel文件,要实际生成该Excel文件需要调用save函数之后。
默认Workbook对象将创建一张表“sheet”
>>> wb.active
<Worksheet “Sheet”>
>>> sheet=wb.active
>>> sheet.title=’my first sheet’
>>> sheet.title
‘my first sheet’
通过sheet.title属性可以修改表名。
2.保存
>>> wb.save(‘test.xlsx’)
此时在工作目录下才会生成test.xlsx文件。
3.增加及删除表
>>> wb.create_sheet()
<Worksheet “Sheet1″>
>>> wb.get_sheet_names()
['Sheet', 'Sheet1']
>>> wb.create_sheet(‘names’)
<Worksheet “names”>
>>> wb.get_sheet_names()
['Sheet', 'Sheet1', 'names']
>>> wb.create_sheet(index=0,title=’first tab’)
<Worksheet “first tab”>
>>> wb.get_sheet_names()
['first tab', 'Sheet', 'Sheet1', 'names']
>>> wb.create_sheet(index=len(wb.get_sheet_names()),title=’last tab’)
<Worksheet “last tab”>
>>> wb.get_sheet_names()
['first tab', 'Sheet', 'Sheet1', 'names', 'last tab']
>>> wb.remove_sheet(wb['first tab'])
>>> wb.get_sheet_names()
['Sheet', 'Sheet1', 'names', 'last tab']
4.向单元格中写入信息
>>> sheet['A1']=’Hello world!’
>>> sheet.cell(row=2,column=2).value=’张三’
>>> sheet['B2'].value
‘张三’
5.单元格字体风格
首先要导入相应的函数:
from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font
默认设置如下:
>>> font=Font(name=‘Calibri’,
… size=11,
… bold=False,
… italic=False,
… vertAlign=None,
… underline=‘none’,
… strike=False,
… color=‘FF000000′)
>>> fill=PatternFill(fill_type=None,
… start_color=‘FFFFFFFF’,
… end_color=‘FF000000′)
>>> border=Border(left=Side(border_style=None,
… color=‘FF000000′),
… right=Side(border_style=None,
… color=‘FF000000′),
… top=Side(border_style=None,
… color=‘FF000000′),
… bottom=Side(border_style=None,
… color=‘FF000000′),
… diagonal=Side(border_style=None,
… color=‘FF000000′),
… diagonal_direction=0,
… outline=Side(border_style=None,
… color=‘FF000000′),
… vertical=Side(border_style=None,
… color=‘FF000000′),
… horizontal=Side(border_style=None,
… color=‘FF000000′)
… )
>>> alignment=Alignment(horizontal=‘general’,
… vertical=‘bottom’,
… text_rotation=0,
… wrap_text=False,
… shrink_to_fit=False,
… indent=0)
>>> number_format=‘General’
>>> protection=Protection(locked=True,
… hidden=False)
>>>
例子:为单元格设置样式
>>> cell1=sheet['A1']
>>> cell2=sheet['A2']
>>> ft1=Font(color=colors.RED)
>>> ft2=Font(color=’00FF00′,size=30)
>>> cell1.font=ft1
>>> cell2.font=ft2
复制样式:
>>> fromopenpyxl.stylesimportFont
>>> fromcopyimportcopy
>>>
>>> ft1=Font(name=‘Arial’, size=14)
>>> ft2=copy(ft1)
>>> ft2.name=“Tahoma”
>>> ft1.name’Arial’
>>> ft2.name’Tahoma’
>>> ft2.size# copied from the14.0
自定义样式:
>>> from openpyxl.styles import NamedStyle, Font, Border, Side
>>> highlight = NamedStyle(name=”highlight”)
>>> highlight.font = Font(bold=True, size=20)
>>> bd = Side(style=’thick’, color=”000000″)
>>> highlight.border = Border(left=bd, top=bd, right=bd, bottom=bd)
创建好后便可以应用到workbook了
>>> wb.add_named_style(highlight)#第一步
>>> ws['A1'].style = highlight#第二步
Once registered assign the style using just the name:
>>> ws['D5'].style = ‘highlight’#以后就可以直接调用字符串形式了
7.合并与拆分单元格
import openpyxl
wb=openpyxl.load_workbook(‘two.xlsx’)
sheet=wb.active
sheet.merge_cells(‘A1:A2′)
wb.save(‘three.xlsx’)
同理拆开单元格便是sheet.unmerge_cells(‘A1:A2′),但是在交互式环境中可以,写在py文件中就会报错,不知什么原因。
更多该模块的信息,请参看:https://openpyxl.readthedocs.io/en/default/
喜欢文章,欢迎大家转发!!!