Excel編輯模塊openpyxl的常用功能介紹

使用Excel電子表格

Excel是一款適用於Windows的流行和強大的電子表格應用程序。該openpyxl模塊允許您的Python程序讀取和修改Excel電子表格文件。例如,您可能會從一個電子表格中複製某些數據並將其粘貼到另一個電子表格中。或者,您可能需要經過數千行,並根據一些標準挑選出少數幾行進行小編輯。或者,您可能需要查看數百個部門預算電子表格,搜索任何處於紅色狀態的電子表格。這些都是Python可以爲你做的那種枯燥無味的電子表格任務。

安裝openpyxl模塊

Python不附帶OpenPyXL,因此您必須安裝它。

    pip install openpyxl

檢查是否安裝正確

    import openpyxl

OpenPyXL團隊定期發佈新版本,可能命令或者功能隨時會有變動。不過,不要擔心:新版本應該保持向後兼容本書中的說明相當長一段時間。如果你有一個更新的版本,並想知道你可以使用哪些附加功能,你可以在 http://openpyxl.redthedocs.org 查看OpenPyXL的完整文檔。

下面介紹一下本模塊的一些基本用法:

打開Excel文檔

Excel自動爲新工作簿提供的名爲Sheet1,Sheet2和Sheet3的三個默認工作表的選項卡。(創建的默認工作表數量可能因操作系統和電子表格程序而異。)

使用OpenPyXL打開Excel文檔:
一旦你導入了openpyxl模塊,你就可以使用該openpyxl.load_workbook()功能。在交互式shell中輸入以下內容:

    >>> import openpyxl 
    >>> wb = openpyxl.load_workbook('example.xlsx') 
    >>> type(wb) 
    <class'openpyxl.workbook.workbook.Workbook'>

該openpyxl.load_workbook()函數接受文件名並返回workbook數據類型的值。該Workbook對象表示Excel文件,有點像File對象表示打開的文本文件。
請記住,example.xlsx需要位於當前工作目錄中才能使用它。您可以通過導入os和使用來找出當前工作目錄是什麼os.getcwd(),並且可以使用更改當前工作目錄os.chdir()。

從工作簿獲取表格

您可以通過調用該get_sheet_names()方法來獲取工作簿中所有工作表名稱的列表。在交互式shell中輸入以下內容:

    >>> import openpyxl 
    >>> wb = openpyxl.load_workbook('example.xlsx') 
    >>> wb.sheetnames
    ['Sheet1','Sheet2','Sheet3']
    >>> sheet = wb[r'Sheet1'] 
    >>> sheet
    <工作表“Sheet3”>
    >>> type(sheet)
     <class'openpyxl.worksheet.worksheet.Worksheet'>
    >>> sheet.title
    “工作表Sheet 3”
    >>> anotherSheet = wb.active 
    >>> anotherSheet 
    <Worksheet“Sheet1”>

每個工作表由一個Worksheet對象表示,您可以通過將get_sheet_by_name()工作表名稱字符串傳遞給工作簿方法來獲取該對象。最後,您可以讀取對象的active成員變量Workbook以獲取工作簿的活動工作表。活動工作表是在Excel中打開工作簿時位於最上方的工作表。一旦你有了這個Worksheet對象,你可以從title屬性中獲得它的名字。

從表格中獲取單元格

一旦你有一個Worksheet對象,你可以Cell通過它的名字來訪問一個對象。在交互式shell中輸入以下內容:

    >>> import openpyxl 
    >>> wb = openpyxl.load_workbook('example.xlsx') 
    >>> sheet = wb['Sheet1']
    >>> sheet ['A1'] 
    <Cell Sheet1.A1> 
    >> > sheet ['A1'].value 
    datetime.datetime(2015,4,5,13,34,2)

OpenPyXL將自動解釋列A中的日期,並將它們作爲datetime值返回而不是字符串。

    >>> c = sheet ['B1'] 
    >>> c.value
    'Apples' 
    >>> 'Row '+ str(c.row)+',Column'+ c.column +'is'+ c.value'Row 
    1,Column B is Apples' 
    >>> 'Cell'+ c.coordinate +'is'+ c .value 
    'Cell B1 is Apples' 
    >>> 表['C1']。值 
    73

該Cell對象只是一個字符串,不會包含存儲在該單元格中的值。Cell對象也有row,column以及coordinate爲單元提供位置信息的屬性。
在這裏,訪問value我們Cell的單元格B1對象的屬性給了我們字符串'Apples'。該row屬性爲我們提供了整數1,該column屬性給我們'B',和coordinate屬性給我們'B1'。

通過字母指定一個列可能會非常棘手,尤其是因爲在列Z之後,列以兩個字母開頭:AA,AB,AC等等。作爲替代方案,您還可以使用工作表的cell()方法獲取單元格,併爲其參數row和column關鍵字參數傳遞整數。第一行或列的整數是1,而不是0。通過輸入以下內容繼續交互式shell示例:

    >>> sheet.cell(row = 1,column = 2) 
    <Cell Sheet1.B1> 
    >>> sheet.cell(row = 1,column = 2).value
    'Apples' 
    >>> for i in range(1,8,2):
    >>> print(i,sheet.cell(row = i,column = 2).value) 
    1蘋果
    3梨
    5蘋果
    7草莓

在列字母和數字之間轉換

要從字母轉換爲數字,請調用該openpyxl.utils.column_index_from_string()函數。要將數字轉換爲字母,請調用該openpyxl.utils.get_column_letter()函數。在交互式shell中輸入以下內容:

    >>> import openpyxl 
    >>> from openpyxl.utils import get_column_letter,column_index_from_string 
    >>> get_column_letter(1) 
    'A' 
    >>> get_column_letter(2)
    'B' 
    >>> get_column_letter(27) 
    'AA' 
    >>> get_column_letter (900) 
    'AHP' 
    >>> wb = openpyxl.load_workbook('example.xlsx') 
    >>> sheet = wb['Sheet1']
    >>> get_column_letter(sheet.max_column) 
    'C' 
    >>> column_index_from_string ('A') 
    1 
    >>> column_index_from_string('AA') 
    27

從openpyxl.utils模塊中導入這兩個函數後,您可以調用get_column_letter()並傳遞一個像27這樣的整數來確定第27列的字母名稱。該函數會column_index_string()做相反的事情:您將它傳遞給列的字母名稱,並告訴您該列的編號。您不需要加載工作簿即可使用這些功能。如果你願意,你可以加載一個工作簿,獲取一個Worksheet對象,並調用一個Worksheet對象方法max_column來獲得一個整數。然後,您可以將該整數傳遞給get_column_letter()。

要訪問特定行或列中單元格的值,還可以使用Worksheet對象rows和columns屬性。在交互式shell中輸入以下內容:

    >>> import openpyxl 
    >>> wb = openpyxl.load_workbook('example.xlsx') 
    >>> sheet = wb.active 
    >>> sheet.columns [1] 
    (<Cell Sheet1.B1>,<Cell Sheet1.B2 >,<Cell Sheet1.B3>,<Cell Sheet1.B4>,
    <Cell Sheet1.B5>,<Cell Sheet1.B6>,<Cell Sheet1.B7>)
    >>> for sheetObjects in column.columns [1]:
            print(cellObj.value)
    蘋果
    櫻桃
    梨
    橘子
    蘋果
    香蕉
    草莓

修改Excel文檔

將值寫入單元格很像將值寫入字典中的鍵。將其輸入到交互式shell中:

    >>> import openpyxl 
    >>> wb = openpyxl.Workbook() 
    >>> sheet = wb['Sheet'] 
    >>> sheet ['A1'] ='Hello world!' 
    >>> sheet ['A1'].value
    >>> 'Hello world!'

如果將單元格的座標作爲字符串,則可以像Worksheet對象上的字典鍵一樣使用它來指定要寫入的單元格。

保存Excel文檔

調用openpyxl.Workbook()函數來創建一個新的空白Workbook對象。在交互式shell中輸入以下內容:

    >>> import openpyxl 
    >>> wb = openpyxl.Workbook() 
    >>> wb.sheetnames
    ['Sheet'] 
    >>> sheet = wb.active 
    >>> sheet.title'Sheet 
    ' 
    >>> sheet.title ='Spam Bacon Eggs Sheet' 
    >>> wb.sheetnames 
    ['Spam Bacon Eggs Sheet']

該工作簿將以名爲Sheet的單張開始。您可以通過在其title屬性中存儲新字符串來更改工作表的名稱。

每次修改Workbook對象或其工作表和單元格時,在調用save()工作簿方法之前,電子表格文件都不會被保存。在交互式shell中輸入以下內容(在當前工作目錄中使用example.xlsx):

    >>> import openpyxl 
    >>> wb['example.xlsx'] 
    >>> sheet = wb.active 
    >>> sheet.title ='垃圾郵件' 
    >>> wb.save('example_copy.xlsx“)

在這裏,我們更改了我們的工作表的名稱。爲了保存我們的更改,我們將一個文件名作爲字符串傳遞給save()方法。傳遞與原始文件不同的文件名,例如'example_copy.xlsx',將更改保存到電子表格副本中。當然,保存的時候文件名可以和原本的文件名相同,那樣就相當於修改原來的文檔,我們這樣做只是爲了安全,防止程序出錯導致原本的文檔出現問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章