首頁 > 軟體

Python自動化操作Excel方法詳解(xlrd,xlwt)

2022-06-07 14:07:12

一、Python操作Excel 7大庫對比

Excel是Windows環境下流行的、強大的電子試算表應用。無論是在工作中還是學習中我們都幾乎在不間斷的使用Excel來 記錄或者處理一些資料。 例如,可能有-個無聊的任務,需要從一個電子試算表拷貝一些資料,貼上到另一個電子試算表中。或者可能需要從幾千行中挑選幾行,根據某種條件稍作修改。或者需要檢視幾百份部門預算電子試算表,尋找其中的 指定內容。正是這種無聊無腦的電子試算表任務,如果讓人工來手動完成,則無論是時間升本還是精力成本都不是一件好事情,但是可以通過Python來完成。

7大庫功能對比圖如下(本文主要介紹:xlrd和xlwt):

二、xlrd 讀取excel操作

xlrd模組用於讀取Excel的資料,速度非常快。支援.xls.xlsx兩種檔案格式的讀取

1. cmd控制檯安裝模組

pip install xlrd

2. 匯入模組

import xlrd

測試表如下:

1. 開啟檔案

xlrd.open_workbook(path)

wb = xlrd.open_workbook("./a.xls")
print(wb)

執行結果:

<xlrd.book.Book object at 0x000001F905A33DC0>

2. 獲取所有表名

wb.sheet_names()

sheet_names_list = wb.sheet_names()
print(sheet_names_list)

執行結果:

['Sheet1', 'Sheet2', 'Sheet3']

3. 指定sheet表

wb.sheet_by_index(索引) or wb.sheet_by_name("sheet表名")

# 方式1:索引順序獲取
sheet_1 = wb.sheet_by_index(0)

# 方式2:名稱獲取
sheet_2 = wb.sheet_by_name("Sheet1")

4. 對sheet表的行操作

1. 獲取sheet表總函數:sheet.nrows

2. 返回由該行中所有的單元格物件組成的列表,列表內是鍵值對:sheet.row(1),如:[列名1:'值',列名2:'值', ...]或者sheet.row_slice(1)

3. 返回指定行的所有單元格數值組成的列表:sheet.row_values(rowx, start_colx=0, end_colx=None) ,如:['值1','值2',...]

4. 返回指定行的有效長度:sheet.row_len(rowx)

# 1.獲取sheet表總函數:sheet.nrows
print("總行數為:", sheet_1.nrows)
# 2.返回由該行中所有的單元格物件組成的列表,列表內是鍵值對: sheet.row(1)
print(sheet_1.row(1))
# 或者sheet.row_slice(1)
print(sheet_1.row_slice(1))
# 3.返回指定行的所有單元格數值組成的列表: sheet.row_values(rowx, start_colx=0, end_colx=None)
print(sheet_1.row_values(1))
# 4.返回指定行的有效長度:sheet.row_len(rowx)
print("返回指定行的有效長度:", sheet_1.row_len(1))

print('-' * 20)
# 5. 讀取整個表
for i in range(sheet_1.nrows):
    print(sheet_1.row_values(i))

執行結果:

總行數為: 4
[text:'物品1', empty:'', number:100.0, text:'EUR 0.1', text:'EUR 0.1']
[text:'物品1', empty:'', number:100.0, text:'EUR 0.1', text:'EUR 0.1']
['物品1', '', 100.0, 'EUR 0.1', 'EUR 0.1']
返回指定行的有效長度: 5
--------------------
['item', 'b', 'PCS', 'UNIT', 'TOTAL']
['物品1', '', 100.0, 'EUR 0.1', 'EUR 0.1']
['物品2', '', 100.0, 'EUR 0.1', 'EUR 0.1']
['物品3', '', 200.0, 'EUR 0.2', 'EUR 0.2']

5. 對sheet表的列操作

1. 返回指定sheet表的有效列數:sheet.ncols

2. 返回由該列中所有的單元格物件組成的列表,列表內是鍵值對:sheet.col(1),如:[列名1:'值',列名2:'值', ...]或者sheet.col_slice(1)

3. 返回指定列的所有單元格數值組成的列表:sheet.col_values(colx, start_colx=0, end_colx=None),如:['列名','值1','值2',...]

# 1. 返回指定sheet表的有效列數:sheet.ncols
print("總列數為:", sheet_1.ncols)
# 2. 返回由該列中所有的單元格物件組成的列表,列表內是鍵值對:sheet.col(1)
print(sheet_1.col(1))
# 或者sheet.col_slice(1)
print(sheet_1.col_slice(1))
# 3. 返回指定列的所有單元格數值組成的列表:sheet.col_values(colx, start_colx=0, end_colx=None)
print(sheet_1.col_values(0))  # 帶列名
print(sheet_1.col_values(0, 1))  # 不帶列名
print('-' * 20)

# 4. 讀取全部表
for i in range(sheet_1.ncols):
    print(sheet_1.col_values(i))

執行結果:

總列數為: 5
[text:'b', empty:'', empty:'', empty:'']
[text:'b', empty:'', empty:'', empty:'']
['item', '物品1', '物品2', '物品3']
['物品1', '物品2', '物品3']
--------------------
['item', '物品1', '物品2', '物品3']
['b', '', '', '']
['PCS', 100.0, 100.0, 200.0]
['UNIT', 'EUR 0.1', 'EUR 0.1', 'EUR 0.2']
['TOTAL', 'EUR 0.1', 'EUR 0.1', 'EUR 0.2']

三、xlwt 寫入Excel表操作

xlwt 模組可以將資料寫入到 Excel 工作簿中。目前已支援寫入.xls.xlsx兩種檔案格式

1. cmd控制檯安裝模組

pip install xlwt

2. 匯入模組

import xlwt

1. 寫入單個資料

1. 建立Excel表物件:xlwt.Workbook(encoding='utf8')

2. 新建sheet表:worksheet = workbook.add_sheet('Sheet1')

3. 寫入資料到指定單元格:worksheet.write(0, 0, "python")。第一個引數是第 i 行,第二個是第 j 列,第三個是要寫的引數(字串或數位)

4. 儲存檔案:workbook.save('test.xlsx')。目前已支援寫入.xls.xlsx兩種檔案格式

測試程式碼:

import xlwt

# 1. 建立Excel表物件
workbook = xlwt.Workbook(encoding='utf8')
# 2. 新建sheet表
worksheet = workbook.add_sheet('Sheet1')
# 3. 寫入資料到指定單元格
worksheet.write(0, 0, "python")
# 4. 儲存檔案分兩種格式
workbook.save('test.xls')
workbook.save('test.xlsx')

執行結果如下:生成兩個新檔案

2. 寫入多個資料

測試程式碼:

import xlwt

data_list = [('小白', '20', '男'), ('小黑', '21', '男'), ('小紅', '20', '女')]
# 1. 建立Excel表物件
workbook = xlwt.Workbook(encoding='utf8')
# 2. 新建sheet表
worksheet = workbook.add_sheet('Sheet1')
# 3. 自定義列名
col1 = ('姓名', '年齡', '性別')
# 4. 將列屬性元組col寫進sheet表單中第一行
for i in range(0, len(col1)):
    worksheet.write(0, i, col1[i])
# 5. 將資料寫進sheet表單中
for i in range(0, len(data_list)):
    data = data_list[i]
    for j in range(0, len(col1)):
        worksheet.write(i + 1, j, data[j])
# 6. 儲存檔案分兩種格式
workbook.save('test.xls')

執行結果:

3. 設定列寬

cols_num是列的數目,可以通過修改12這個值,修改列的寬度

for c in range(len(col1)):
    worksheet.col(c).width = 256 * 24

執行結果:

4. 設定行高

設定行高,修改1600為別的值,可以修改行的高度

測試程式碼:

# 5. 將資料寫進sheet表單中
for i in range(0, len(data_list)):
    data = data_list[i]
    for j in range(0, len(col1)):
        worksheet.write(i + 1, j, data[j])
        # 6. 設定行高
        worksheet.row(i + 1).height_mismatch = True
        worksheet.row(i + 1).height = 1600  # 設定行高

執行結果:

5. 設定單元格風格

常用設定單元格的屬性:

樣式說明
xlwt.Font()字型設定
xlwt.Pattern()背景設定
xlwt.Borders()邊框設定
xlwt.Alignment()對準設定

測試程式碼:

def body_style():
    # 一、建立一個樣式物件,初始化樣式 style
    style = xlwt.XFStyle()  # Create Style物件

    # 二、字型風格設定
    font = xlwt.Font()  # Create Font物件
    font.name = "SimSun"  # 設定字型型別,宋體
    font.colour_index = 4  # 設定字型顏色
    font.height = 20 * 12  # 字型大小,12為字號,20為衡量單位
    font.bont = True  # 設定字型加粗
    font.underline = True  # 下劃線
    font.italic = True  # 斜體字

    # 二、背景設定
    pattern = xlwt.Pattern()
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN  # May be: NO_PATTERN, SOLID_PATTERN, or 0x00 through 0x12
    pattern.pattern_fore_colour = 4  # 給背景顏色賦值

    # 三、邊框設定
    borders = xlwt.Borders()  # 建立邊框物件,    # .DASHED:虛線;.NO_LINE:沒有
    # 上下左右都新增邊框
    borders.left = 1
    borders.right = 1
    borders.top = 1
    borders.bottom = 1
    # 設定邊框顏色
    borders.left_colour = 2
    borders.right_colour = 2
    borders.top_colour = 2
    borders.bottom_colour = 2

    # 四、位置設定
    alignment = xlwt.Alignment()
    alignment.horz = 1  # 設定水平位置,0是左對齊,1是居中,2是右對齊
    alignment.wrap = 1  # 設定自動換行

    # 五、設定好之後,全部都加到style上
    style.alignment = alignment
    style.font = font
    style.borders = borders
    return style

應用樣式:

sheet.write(row, column, i)  # 不帶格式
sheet.write(row, column, i, style)  # 有格式

執行結果:

到此這篇關於Python自動化操作Excel方法詳解(xlrd,xlwt)的文章就介紹到這了,更多相關Python自動化操作Excel內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com