openpyxl


openpyxl

  xlrd/xlwt操作03版本之前的Excel文件,openpyxl操作03版本之后的Excel文件。

安裝

方式一

  在pycharm下面的命令行中輸入如下代碼:

pip install openpyxl

方式二

  在Pycharm的File→Settings...→Project:xxoo→Project Interperter中的

中右上角的+或者雙擊列表框中的任何一個庫名都可以,彈出如下框:

選中openpyxl,然后點擊左下角的Install Package按鈕即可安裝。

注意

  如果excel里面有圖片(jpeg,png,bmp。。。),需要安裝圖片處理模塊pillow模塊。

pip install pillow

使用

  在使用之前需要先導入模塊openpyxl

from openpyxl import Workbook

  在寫之前需要先初始化,也就是先實例化一個對象。

wb = Workbook()

創建一個新的工作簿

ws1 = wb.create_sheet('Mysheet1')  # 默認是最后一個
ws2 = wb.create_sheet('Mysheet2', 0)  # 第一個

  創建完成以后,還需要保存下文件。

wb.save('write.xlsx')  # write.xlsx為文件名加文件后綴名

獲取單元格數據

  在進行工作簿數據讀取之前,先進行模塊導入

from openpyxl import load_workbook

  然后進行實例化,插入需要讀取的表格文件的文件名。打開的文件,默認的是read_only=False,即可讀可寫,若有需要,可以指定read_only為True,即只讀模式。

wb = load_workbook(filename='write.xlsx')  # write.xlsx是Excel文件名。

  最后選中目標工作簿,進行取值。其中,new_name為工作簿的名字。

sheet = wb['new_name']
print(sheet['B1'].value)

  當目標單元格內填充的為公式時,需要指定data_only=True,這樣返回的就是數字,如果不加這個參數,則讀取到的是公式本身。

獲取工作簿名稱

獲取所有工作簿名稱
wb.sheetnames
獲取單個工作簿名稱
for i in sheet in wb:
    print(sheet)

獲取工作簿

  直接獲取名稱為new_name的工作簿。

wb['new_name']

獲取行

獲取最大行數
sheet.max_row
獲取每一行的值

sheet.rows為生成器,里面是每一行的數據,每一行又由一個tuple包裹。

for row in sheet.rows:
    for cell in row:
        print(cell.value)

  因為是按行,所以返回值的順序為A1、B1、C1。

獲取列

獲取最大列數
sheet.max_column
獲取每一列的值

  與sheet.rows類似,不過這里的每一個元組是每一列的單元格的值。

for column in sheet.columns:
    for cell in column:
        print(cell.value)

  因為按列,所以輸出結果的順序為A1、A2、A3。

獲取任意單元格的值

使用索引獲取單個單元格的值

  上面的代碼是獲取所有的單元格的數據,如果要獲得某行的數據,給其一個索引就行了,因為sheet.rows與sheet.columns是生成器類型的,不能使用索引,轉換成list之后在使用索引,list(sheet.rows)[2]這樣就可以獲取到第三行或者列的tuple對象。

for cell in list(sheet.rows)[2]:
    print(cell.value)
獲取任意區間的單元格

  可以使用range函數,上面的寫法,獲得了以A1為左上角,B3為右下角矩形區域的所有的單元格、需要注意的是,range從1開始的,因為在openpyxl中為了和Excel中的表達方式一致,並不和編程語言的習慣以0表示第一個值。

for i in range(1, 4):
    for j in range(1, 3):
        print(sheet.cell(row=i, column=j).value)

  還可以使用切片的方式。sheet['A1', 'B2']返回一個元組,該元組內部還是元組,由每一行的單元格構成一個元組。

for row_cell in sheet['A1': 'B3']:
    for cell in row_cell:
        print(cell)

修改工作簿的名字

ws1 = wb.create_sheet('Mysheet1') 
ws1.title = 'new_name'
print(wb.sheetnames)  # 打印所有的工作簿的名字,以列表的形式展現
wb.save('write.xlsx')

修改或設置指定單元格的內容

方式一

  設置A4出的單元格的內容,如果需要修改的單元格不存在,則創建該單元格,然后將值寫入。

ws1['A4'] = 4 
wb.save('write.xlsx')
方式二

  通過cell來進行寫入,通過行數和列數找到單元格,通過value進行賦值。

ws1.cell(row=4, column=2, value=10)
wb.save('write.xlsx')

append函數

  可以一次添加多行數據,從第一行空白行開始(下面所有的都是空白行)寫入。

  將row中的值分別寫入到第一行的單元格中。其中row的值的類型必須是列表、元組、一個范圍(range)、生成器。

row = [1, 2, 3, 4, 5]
ws1.append(row)
wb.save('write.xlsx')

設置單元格風格

   在設置之前需要先導入模塊

from openpyxl.styles import Font, colors, Alignment  # 字體、顏色、對齊方式

設置字體樣式

bold_italic_24_font = Font(name='等線', size=24, italic=True, color=colors.RED, bold=True)
sheet['A1'].font = bold_italic_24_font

 設置對其方式

居中方式

  直接使用屬性aligment,這里指定垂直居中和左右居中。除了center,還可以使用right、left等等參數。

sheet['B1'].aligment = Alignment(horizontal='center', vertical='center')
行高
sheet.row_dimensions[2].height = 40  # 第二行行高
列寬
sheet.column_dimensions['C'].width = 30  # C列列寬

 合並和拆分單元格

合並單元格

   以合並區域的右上角的那個單元格為基准,覆蓋其他單元格,稱之為一個大單元格。

  合並單元格,往左上角單元格寫入數據。如果這些單元格都有數據,則只保存左上角的單元格的數據。

合並一行中的單元格
sheet.merge_cells('B1:G1')  # 合並一行中的單元格
合並矩形區域的單元格
sheet.merge_cells('A1:C3')

拆分單元格

  將一個大單元格拆分為幾個小單元格。拆分完成后,大單元格中的值回到A1的位置。

sheet.unmerge_cells('A1:C3')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM