1. 程式人生 > >python3操作Excel openpyxl模塊的使用

python3操作Excel openpyxl模塊的使用

自定義 value light ber 風格 workbook rect 保存 under

python 與excel

安裝模塊

本例子中使用的模塊為:

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:\maxingpython\example.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

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

這樣便創建了一個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文件中就會報錯,不知什麽原因。

python3操作Excel openpyxl模塊的使用