Python自動化操作Excel方法詳解(xlrd,xlwt)
一、Python操作Excel 7大庫對比
Excel是Windows環(huán)境下流行的、強大的電子表格應用。無論是在工作中還是學習中我們都幾乎在不間斷的使用Excel來 記錄或者處理一些數(shù)據(jù)。 例如,可能有-個無聊的任務,需要從一個電子表格拷貝一些數(shù)據(jù),粘貼到另一個電子表格中。或者可能需要從幾千行中挑選幾行,根據(jù)某種條件稍作修改?;蛘咝枰榭磶装俜莶块T預算電子表格,尋找其中的 指定內(nèi)容。正是這種無聊無腦的電子表格任務,如果讓人工來手動完成,則無論是時間升本還是精力成本都不是一件好事情,但是可以通過Python來完成。
7大庫功能對比圖如下(本文主要介紹:xlrd和xlwt):

二、xlrd 讀取excel操作
xlrd模塊用于讀取Excel的數(shù)據(jù),速度非??臁VС?code>.xls 和 .xlsx兩種文件格式的讀取
1. cmd控制臺安裝模塊:
pip install xlrd
2. 導入模塊:
import xlrd
測試表如下:

1. 打開文件
xlrd.open_workbook(path)
wb = xlrd.open_workbook("./a.xls")
print(wb)
運行結(jié)果:
<xlrd.book.Book object at 0x000001F905A33DC0>
2. 獲取所有表名
wb.sheet_names()
sheet_names_list = wb.sheet_names() print(sheet_names_list)
運行結(jié)果:
['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表總函數(shù):sheet.nrows
2. 返回由該行中所有的單元格對象組成的列表,列表內(nèi)是鍵值對:sheet.row(1),如:[列名1:'值',列名2:'值', ...]或者sheet.row_slice(1)
3. 返回指定行的所有單元格數(shù)值組成的列表:sheet.row_values(rowx, start_colx=0, end_colx=None) ,如:['值1','值2',...]
4. 返回指定行的有效長度:sheet.row_len(rowx)
# 1.獲取sheet表總函數(shù):sheet.nrows
print("總行數(shù)為:", sheet_1.nrows)
# 2.返回由該行中所有的單元格對象組成的列表,列表內(nèi)是鍵值對: sheet.row(1)
print(sheet_1.row(1))
# 或者sheet.row_slice(1)
print(sheet_1.row_slice(1))
# 3.返回指定行的所有單元格數(shù)值組成的列表: 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))
運行結(jié)果:
總行數(shù)為: 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表的有效列數(shù):sheet.ncols
2. 返回由該列中所有的單元格對象組成的列表,列表內(nèi)是鍵值對:sheet.col(1),如:[列名1:'值',列名2:'值', ...]或者sheet.col_slice(1)
3. 返回指定列的所有單元格數(shù)值組成的列表:sheet.col_values(colx, start_colx=0, end_colx=None),如:['列名','值1','值2',...]
# 1. 返回指定sheet表的有效列數(shù):sheet.ncols
print("總列數(shù)為:", sheet_1.ncols)
# 2. 返回由該列中所有的單元格對象組成的列表,列表內(nèi)是鍵值對:sheet.col(1)
print(sheet_1.col(1))
# 或者sheet.col_slice(1)
print(sheet_1.col_slice(1))
# 3. 返回指定列的所有單元格數(shù)值組成的列表: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))
運行結(jié)果:
總列數(shù)為: 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 模塊可以將數(shù)據(jù)寫入到 Excel 工作簿中。目前已支持寫入.xls 和 .xlsx兩種文件格式
1. cmd控制臺安裝模塊:
pip install xlwt
2. 導入模塊:
import xlwt
1. 寫入單個數(shù)據(jù)
1. 創(chuàng)建Excel表對象:xlwt.Workbook(encoding='utf8')
2. 新建sheet表:worksheet = workbook.add_sheet('Sheet1')
3. 寫入數(shù)據(jù)到指定單元格:worksheet.write(0, 0, "python")。第一個參數(shù)是第 i 行,第二個是第 j 列,第三個是要寫的參數(shù)(字符串或數(shù)字)
4. 保存文件:workbook.save('test.xlsx')。目前已支持寫入.xls和.xlsx兩種文件格式
測試代碼:
import xlwt
# 1. 創(chuàng)建Excel表對象
workbook = xlwt.Workbook(encoding='utf8')
# 2. 新建sheet表
worksheet = workbook.add_sheet('Sheet1')
# 3. 寫入數(shù)據(jù)到指定單元格
worksheet.write(0, 0, "python")
# 4. 保存文件分兩種格式
workbook.save('test.xls')
workbook.save('test.xlsx')
運行結(jié)果如下:生成兩個新文件

2. 寫入多個數(shù)據(jù)
測試代碼:
import xlwt
data_list = [('小白', '20', '男'), ('小黑', '21', '男'), ('小紅', '20', '女')]
# 1. 創(chuàng)建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. 將數(shù)據(jù)寫進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')
運行結(jié)果:

3. 設置列寬
cols_num是列的數(shù)目,可以通過修改12這個值,修改列的寬度
for c in range(len(col1)):
worksheet.col(c).width = 256 * 24
運行結(jié)果:

4. 設置行高
設置行高,修改1600為別的值,可以修改行的高度
測試代碼:
# 5. 將數(shù)據(jù)寫進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 # 設置行高
運行結(jié)果:

5. 設置單元格風格
常用設置單元格的屬性:
| 樣式 | 說明 |
|---|---|
| xlwt.Font() | 字體設置 |
| xlwt.Pattern() | 背景設置 |
| xlwt.Borders() | 邊框設置 |
| xlwt.Alignment() | 對準設置 |
測試代碼:
def body_style():
# 一、創(chuàng)建一個樣式對象,初始化樣式 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() # 創(chuàng)建邊框?qū)ο螅? # .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) # 有格式
運行結(jié)果:

到此這篇關于Python自動化操作Excel方法詳解(xlrd,xlwt)的文章就介紹到這了,更多相關Python自動化操作Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解Python中的數(shù)據(jù)清洗工具flashtext
FlashText是GitHub上的一個開源Python庫,正如之前所提到的,它在提取關鍵字和替換關鍵字任務上有著極高的性能。本文將詳解一下flashtext的使用,需要的可以參考一下2022-06-06
Python中TypeError: int object is not 
在Python中,當你嘗試對一個非迭代對象(如整數(shù)、浮點數(shù)等)使用迭代操作(如for循環(huán)、列表推導式中的迭代等)時,會觸發(fā)TypeError: 'int' object is not iterable錯誤,所以本文給大家介紹了Python中TypeError: int object is not iterable錯誤分析及解決辦法2024-08-08

