openpyxl淺歸納

垃圾桶隨意收發表於2020-11-15


1、安裝openpyxl

pip install openpyxl

2、開啟已有工作簿

fbook = openpyxl.load_workbook('test.xlsx')

3、新建工作簿

fbook = Workbook(write_only=True)	# 新建檔案時不會自動建立一個sheet
fbook = Workbook()	# 新建檔案時會自動建立一個sheet
fbook.save('test.xlsx')

4、工作簿相關命令

1.建立sheet

fbook.create_sheet(title=,index=)		# 新建sheet不會主動定位至該sheet,如果要對新建sheet進行操作還是要使用active命令
fbook.create_chartsheet(title=,index=)	# 新建圖表

2.移動sheet

# move_sheet(self, sheet, offset=0) sheet為sheet物件或sheetname,offset為偏移,正數表示向右移動,負數表示向左移動
fbook.move_sheet('Sheet',1)	

3.刪除sheet

#remove(self, worksheet)
fbook.remove(fbook['移動'])

4.獲取sheet資訊

fbook.sheetnames	# 以列表的形式輸出所有sheet名稱,不區分worksheet、chartsheet
fbook.worksheets	# 以列表形式輸出全部worksheet物件,[<Worksheet "Sheet">, <Worksheet "test2">]
fbook.chartsheets	# 以列表形式輸出全部chartsheet物件,[<Chartsheet "test">]

5.指定sheet

若要在指定sheet內運算元據,可通過:指定表名獲取sheet物件、active切換啟用獲取sheet物件。

fsheet = fbook[sheetname]	# 獲取指定表名的表物件,即worksheet物件
fbook.active = fb[sheet_name]	# 設定active工作表,通過worksheet物件設定
fbook.active = 2	# 設定active工作表,通過sheet索引值設定
fsheet = fbook.active	# 獲取當前active工作表,返回worksheet物件

5.遍歷所有sheet

for fsheet in fbook.worksheets:
    print(fsheet)
for sheet in fbook.sheetnames:
    fsheet = fbook[sheet]
for i in range(len(fbook.worksheets)+1):
    fbook.active = i
    fsheet = fbook.active

6.獲取指定sheet索引

fbook.index(fsheet )	# 獲取指定sheet的索引值,需傳入一個worksheet物件

7.複製sheet

fbook.copy_worksheet(fsheet)

4、工作表相關命令

1.獲取有效單元格區域

fsheet.calculate_dimension()	# 獲取含有內容的單元格的最小矩形區域。返回如:A1:C4

2.獲取列數行數

fsheet.max_column	#獲取最大列值(int)
fsheet.min_column	# 獲取最小列值(int)
fsheet.max_row	#獲取最大行值(int)
fsheet.max_row	#獲取最小行值(int)

3.遍歷行/列

fsheet.iter_rows() # 按行進行遍歷返回單元格物件,返回一個生成器,需用for迴圈讀取。
fsheet.rows		# 同iter_rows()一樣
fsheet.iter_cols()	# 按列進行遍歷返回單元格物件,返回一個生成器,需用for迴圈讀取。
fsheet.columns

4.獲取工作表內所有單元格資料

fsheet.values	# 獲取最小矩形區域內所有的單元格的資料,返回一個生成器,需用for迴圈讀取,每一次迴圈獲取一行單元格的資料,以tuple形式返回
for i in fsheet.values:
    print(i)
#輸出
'''
('1', '1', '1')
('1', '1', '1')
('1', '1', '1')
('1', '1', '1')
'''

5.獲取指定單元格資料

fsheet.cell(1,2).value		# cell()指定單元格,value取值
fsheet['A2'].value

6.按行遍歷獲取單元格資料

for row in fsheet.iter_rows():
    for cell in row:
        print(cell.value)

7.按列遍歷獲取單元格資料

for clo in fsheet.iter_cols():
    for cell in clo:
        print(cell.value)

8.寫入單元格資料

# cell(self, row, column, value=None)
fsheet.cell(1,2,4)
fsheet['C5'] = 7
cell.value = 1	# cell需為cell物件

9.按行遍歷寫入單元格資料

 for row in fs.iter_rows():
        for cell in row:
            cell.value = 1

10.按列遍歷寫入單元格資料

for clo in fsheet.iter_cols():
    for cell in clo:
        cell.value = 1

11.以行寫入資料序列

從空白行開始寫入資料,序列中每個值寫入每列

fsheet.append([1,2,3])
fsheet.append({'A': 111,'B':2222,'C':3333})		# A、B對應列值
fsheet.append({1 : 'This is A1', 3 : 'This is C1'})		# 1、3對應列值

12.合併單元格

# merge_cells(self, range_string=None, start_row=None, start_column=None, end_row=None, end_column=None)
fsheet.merge_cells(start_row=1, start_column=1, end_row=2, end_column=2)
sheet.merge_cells('B1:G1')

13.獲取合併單元格物件

fsheet.merged_cell_ranges	# 以列表形式返回當前sheet內的合併單元格區域,返回一個列表,如:[<MergedCellRange A1:B2>]

14.取消合併單元格

fsheet.unmerge_cells(start_row=1, start_column=1, end_row=2, end_column=2)

15.插入行

# insert_rows(self, idx, amount=1)	idx即行索引,amount即要插入的行數
fsheet.insert_rows(2, 2)

16.插入列

# insert_cols(self, idx, amount=1)	idx即列索引,amount即要插入的列數
fsheet.insert_cols(2, 2)

17.刪除行

# delete_rows(self, idx, amount=1)
fsheet.delete_rows(1,2)

18.刪除列

# delete_cols(self, idx, amount=1)
fsheet.delete_cols(2,3)

19.移動單元格

# move_range(self, cell_range, rows=0, cols=0, translate=False)	 cell_range表示單元格,rows和clos要移動的行列數,如果原單元格有值會被覆蓋掉
fsheet.move_range('C5',2,2)

5、單元格相關命令

1.獲取單元格處於第幾列

cell.col_idx	# 單元格處於第幾列,比如A1則返回1

2.獲取單元格的具體行列數值

cell.coordinate	# 單元格在第幾列第幾個單元格,返回形式為‘A1’,‘B2’

3.獲取單元格的列值

cell.column_letter	# 單元格的具體列值,返回形式為‘A’,‘B’

4.獲取單元格資料

cell.value	# 獲取單元格的具體資料

5.寫入單元格資料

cell.value = [value]	# 設定單元格的值

6.獲取指定單元格偏移的單元格物件

cell.offset(row=,column=)	# 返回相對於此單元格的單元格位置,返回的是一個單元格物件

6、合併單元格相關命令

1.獲取合併單元格物件

merge = fsheet.merged_cell_ranges	# 獲取當前工作表中所有的合併單元格物件列表,返回如:[<MergedCellRange A1:A4>, <MergedCellRange D1:D4>]
fm = merge[0]

2.獲取合併單元格大小

fm.size	# 獲取合併單元格大小,即佔幾行幾列,返回形式如:{'columns': 1, 'rows': 4}

3.獲取合併單元格最大行數

fm.max_row	# 合併單元格最大行數

4.獲取合併單元格最小行數

fm.min_row	# 合併單元格最小行數

5.獲取合併單元格最大列數

fm.max_col

6.獲取合併單元格最小列數

fm.min_col

7.按行獲取合併單元格位置資訊

fm.rows	# 按行遍歷合併單元格物件,返回一個生成器,for迴圈獲取,每次讀取一行,以列表形式返回當前行的合併單元格位置
for i in fm.rows:
    print(i)
'''
[(1, 1), (1, 2)]
[(2, 1), (2, 2)]
'''

8.按列獲取合併單元格位置資訊

fm.cols	#按列遍歷合併單元格物件,返回一個生成器,for迴圈獲取,每次讀取一列,以列表形式返回當前列的合併單元格位置

for i in fm.cols:
    print(i)
'''
[(1, 1), (2, 1)]
[(1, 2), (2, 2)]
'''

9.按列獲取合併單元格位置資訊

fm.cells	# 按單元格遍歷合併單元格物件,返回一個生成器,for迴圈獲取,以tuple形式返回當前單元格位置
for i in fm.cells:
    print(i)
'''
(1, 1)
(1, 2)
(2, 1)
(2, 2)
'''

10.獲取合併單元格的區域

fm.bounds	# 以tuple形式返回合併單元格的區域,如(1, 1, 2, 2),分別對應self.min_col, self.min_row, self.max_col, self.max_row
fm.coord	# 返回形式為A1:B2

7、單元格屬性相關命令

1.字型

from openpyxl.styles import Font, colors
# 字號24,字型為藍色,字型加粗,字型為等線
fsheet['A1'].font = Font(name='等線', size=24, italic=True, color=colors.BLUE, bold=True)

2.對齊方式

from openpyxl.styles import Alignment
# 設定C1水平和垂直居中,右對齊和左對齊可取right、left
fsheet['C1'].alignment = Alignment(horizontal='center', vertical='center')

3.行高列寬

# 設定第2行行高
fsheet.row_dimensions[2].height = 40
# 設定C列列寬
fsheet.column_dimensions['C'].width = 30

8、輔助命令

1.列字母表示與數字表示的轉換

from openpyxl.utils import get_column_letter, column_index_from_string
get_column_letter(4)	# 數字表示轉換為字母
column_index_from_string('F')	# 字母表示轉換為數字

相關文章