|
目錄 1. 前言本文是通過Python的第三方庫 作為網(wǎng)絡(luò)攻城獅的我們,使用python對excel的基本操作技能就可以了,當(dāng)然能夠精通更好了。 那我們使用 來來來,先看下如下圖所示,這是存放一張所有網(wǎng)絡(luò)設(shè)備的管理地址表,通過python的
2. 實驗環(huán)境
說明:各位實驗環(huán)境請隨意組合,python版本是3.x以上。 3. 基本操作接下來就開始一步一步教大家如何操作... 3.1 安裝openpyxl第三方庫首先,我們得先安裝一下第三方庫`openpyxl`,使用如下命令安裝即可。 C:\>pip install openpyxl 3.2 新建工作簿3.2.1 新創(chuàng)建工作簿from openpyxl import Workbook
# 類實例化
wb = Workbook()
# 保存并生成文件
wb.save('simple_excel.xlsx')說明:運行該代碼后,會生成一份excel文件: 3.2.2 缺省工作表from openpyxl import Workbook
# 類實例化
wb = Workbook()
# 激活并缺省創(chuàng)建第一個工作表:sheet
ws1 = wb.active
# 第一個工作表命名:1_sheet
ws1.title = '1_sheet'
# 保存并生成文件
wb.save('simple_excel.xlsx')效果如下所示:
3.2.3 創(chuàng)建工作表from openpyxl import Workbook
# 類實例化
wb = Workbook()
# 激活并缺省創(chuàng)建第一個工作表
ws1 = wb.active
# 第一個工作表命名
ws1.title = '1_sheet'
# 創(chuàng)建工作表3
ws3 = wb.create_sheet(title='3_sheet', index=2)
# 創(chuàng)建工作表2
ws2 = wb.create_sheet('2_sheet', 1)
# 創(chuàng)建工作表4
ws4 = wb.copy_worksheet(ws3)
# 保存并生成文件
wb.save('simple_excel.xlsx')參數(shù)說明:
3.2.4 刪除工作表from openpyxl import Workbook
# 類實例化
wb = Workbook()
# 激活并缺省創(chuàng)建第一個工作表
# ...省略中間代碼...
ws4 = wb.copy_worksheet(ws3)
# 刪除工作表
wb.remove(ws4)
# 保存并生成文件
wb.save('simple_excel.xlsx')說明:此步驟我就不運行了。 顏色">3.2.5 設(shè)置工作表顏色from openpyxl import Workbook
# 類實例化
wb = Workbook()
# ...省略中間代碼...
# 設(shè)置工作表背景色
ws1.sheet_properties.tabColor = '90EE90'
ws2.sheet_properties.tabColor = '1E90FF'
ws3.sheet_properties.tabColor = '90EE90'
ws4.sheet_properties.tabColor = '1E90FF'
# 保存并生成文件
wb.save('simple_excel.xlsx')參數(shù)說明:
效果如下:
3.2.6 單元格寫入數(shù)據(jù)#### 寫入單個數(shù)據(jù) from openpyxl import Workbook
# 類實例化
wb = Workbook()
# ...省略中間代碼...
# 單元格寫入數(shù)據(jù)
# 方法1:
ws1['A1'] = '示例:'
# 方法2:
ws1.cell(row=1, column=1, value='示例:')
# 保存并生成文件
wb.save('simple_excel.xlsx')批量寫入數(shù)據(jù)from openpyxl import Workbook
# 類實例化
wb = Workbook()
# ...省略中間代碼...
# 單元格寫入數(shù)據(jù)
data = [
["device_name", "device_ip", "vendor", "model", "sn", "os", "version", "update_time"],
['switch-01', "192.168.1.1", "cisco", 'WS-C3560G-24TS', "FOC00000000", "cisco_ios", "12.2(50)SE5", "1 weeks, 1 minutes" ],
['switch-02', "192.168.1.2", "cisco", 'WS-C3560G-24TS', "FOC00000000", "cisco_ios", "12.2(50)SE5", "1 weeks, 1 minutes" ],
['switch-03', "192.168.1.3", "cisco", 'WS-C3560G-24TS', "FOC00000000", "cisco_ios", "12.2(50)SE5", "1 weeks, 1 minutes" ],
]
for row in data:
ws1.append(row)
# 保存并生成文件
wb.save('simple_excel.xlsx')參數(shù)說明:
效果如下:
3.2.7 設(shè)置單元格背景色from openpyxl import Workbook from openpyxl.styles import PatternFill, Border, Side, Font, colors # 類實例化 wb = Workbook() # ...省略中間代碼... # 單元格填充背景色 background_color = PatternFill(start_color='00BFFF', fill_type='solid') # 設(shè)置邊框 border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin')) font_type = Font(color=colors.WHITE, size=12, b=True, bold=True) # 設(shè)置字體居中 Align = Alignment(horizontal='center', vertical='center') # 循環(huán)迭代cell并設(shè)置樣式 for row in ws1.iter_rows(min_row=2,max_row=2): for cell in row: cell.fill, cell.font, cell.alignment = background_color, font_type, Align 參數(shù)說明:
效果如下:
3.2.8 合并單元格# ...省略代碼...
# 合并單元格
ws1.merge_cells('A1:H1')
ws1.unmerge_cells('A1:H1')
# ...省略代碼...參數(shù)說明:
效果如下: 3.2.9 自動調(diào)整列單元格寬度from openpyxl import Workbook
from openpyxl.styles import PatternFill, Border, Side, Font, colors,Alignment
from openpyxl.utils import get_column_letter
# 類實例化
wb = Workbook()
# ...省略中間代碼...
# 自動調(diào)整單元格寬度
# 篩選出每一列中cell的最大長度,并作為調(diào)整列寬度的值。
all_ws = wb.sheetnames
for ws in all_ws:
dims = {}
ws = wb[ws]
for row in ws.rows:
for cell in row:
if cell.value:
dims[cell.column] = max(dims.get(cell.column, 0), len(str(cell.value)))
for col, value in dims.items():
ws.column_dimensions[get_column_letter(col)].width = value + 3
dims.clear()思路解讀:
效果如下: 3.2.10 圖表from openpyxl.chart import BarChart3D, Reference # ...省略中間代碼... # 單元格先寫入數(shù)據(jù) data = [ ["Fruit", "2017", "2018", "2019", "2020"], ['Apples', 10000, 5000, 8000, 6000], ['Pears', 2000, 3000, 4000, 5000], ['Bananas', 6000, 6000, 6500, 6000], ['Oranges', 500, 300, 200, 700], ] for row in data: ws2.append(row) # 開始繪3D柱狀圖 chart = BarChart3D() chart.type = 'col' chart.style = 10 chart.title = '銷量柱狀圖' chart.x_axis.title = '水果' chart.y_axis.title = '銷量' # set_categories() X軸設(shè)置數(shù)據(jù), add_data() y軸設(shè)置數(shù)據(jù) data = Reference(ws2, min_col=2, min_row=1, max_col=5, max_row=5) series = Reference(ws2, min_col=1, min_row=2, max_row=5) chart.add_data(data=data, titles_from_data=True) chart.set_categories(series) ws2.add_chart(chart, 'A7') 參數(shù)說明:
效果如下:
3.3 加載工作簿通過
3.3.1 獲取工作表from openpyxl import load_workbook as open
# 類示例化
wb = open('simple_excel.xlsx', read_only=True)
# 獲取所有工作表
print('所有工作表: ', wb.sheetnames)
# 關(guān)閉工作簿
wb.close()
# 回顯結(jié)果如下:
所有工作表: ['1_sheet', '2_sheet', '3_sheet', '3_sheet Copy']參數(shù)說明:
from openpyxl import load_workbook as open
# 類示例化
wb = open('simple_excel.xlsx', read_only=True)
# 獲取單個工作表
print('第1個工作表:', wb.sheetnames[0])
print('第2個工作表:', wb.sheetnames[1])
print('第3個工作表:', wb.sheetnames[2])
print('第4個工作表:', wb.sheetnames[3])
# 循環(huán)遍歷工作表
for ws in wb.sheetnames:
print(ws)
# 關(guān)閉工作簿
wb.close()
# 回顯結(jié)果如下:
第1個工作表: 1_sheet
第2個工作表: 2_sheet
第3個工作表: 3_sheet
第4個工作表: 3_sheet Copy
1_sheet
2_sheet
3_sheet
3_sheet Copy3.3.3 獲取單元格數(shù)據(jù)from openpyxl import load_workbook as open
# 類示例化
wb = open('simple_excel.xlsx', read_only=True)
# 第一個工作表對象
ws1 = wb[wb.sheetnames[0]]
# 或者
# ws1 = wb['1_sheet']
# 獲取某個單元格
print(f"獲取單元格數(shù)據(jù): {ws1['A3'].value}")
# 選取范圍獲取單元格數(shù)據(jù)
for row in ws1['A3:H3']:
for cell in row:
print(f"按范圍獲取單元格數(shù)據(jù): {cell.value}")
# 關(guān)閉工作簿
wb.close()
# 回顯結(jié)果如下:
獲取單元格數(shù)據(jù): switch-01
按范圍獲取單元格數(shù)據(jù): switch-01
按范圍獲取單元格數(shù)據(jù): 192.168.1.1
按范圍獲取單元格數(shù)據(jù): cisco
按范圍獲取單元格數(shù)據(jù): WS-C3560G-24TS
按范圍獲取單元格數(shù)據(jù): FOC00000000
按范圍獲取單元格數(shù)據(jù): cisco_ios
按范圍獲取單元格數(shù)據(jù): 12.2(50)SE5
按范圍獲取單元格數(shù)據(jù): 1 weeks, 1 minutes3.3.4 遍歷行指定行from openpyxl import load_workbook as open
# 類示例化
wb = open('simple_excel.xlsx', read_only=True)
# 第一個工作表對象
ws1 = wb[wb.sheetnames[0]]
# 指定第二行
for cell in ws1['2']:
print(cell.value)
# 關(guān)閉工作簿
wb.close()
# 回顯結(jié)果如下:
device_name
device_ip
vendor
model
sn
os
version
update_time指定行范圍# ... 省略代碼... # 指定行范圍 for row in ws1['2:3']: for cell in row: print(cell.value) # ... 省略代碼... # 回顯結(jié)果如下: device_name device_ip vendor model sn os version update_time switch-01 192.168.1.1 cisco WS-C3560G-24TS FOC00000000 cisco_ios 12.2(50)SE5 1 weeks, 1 minutes 方法iter_rows,遍歷行from openpyxl import load_workbook as open
# 類示例化
wb = open('simple_excel.xlsx', read_only=True)
# 第一個工作表對象
ws1 = wb[wb.sheetnames[0]]
# 循環(huán)遍歷行
for row in ws1.iter_rows(min_row=2, max_row=2, min_col=1, max_col=8):
for cell in row:
print(f"單元格數(shù)據(jù):{cell.value}")
# 關(guān)閉工作簿
wb.close()
# 回顯結(jié)果如下:
單元格數(shù)據(jù):device_name
單元格數(shù)據(jù):device_ip
單元格數(shù)據(jù):vendor
單元格數(shù)據(jù):model
單元格數(shù)據(jù):sn
單元格數(shù)據(jù):os
單元格數(shù)據(jù):version
單元格數(shù)據(jù):update_time參數(shù)說明:
3.3.5 遍歷列指定列from openpyxl import load_workbook as open
# 類示例化
wb = open('simple_excel.xlsx', read_only=True)
# 第一個工作表對象
ws1 = wb[wb.sheetnames[0]]
# 指定第一列
for cell in ws1['A']:
print(cell.value)
# 關(guān)閉工作簿
wb.close()
# 回顯結(jié)果如下:
示例:
device_name
switch-01
switch-02
switch-03指定列范圍# ... 省略代碼... # 指定列范圍 for col in ws1['A:B']: for cell in col: print(cell.value) # ... 省略代碼... # 回顯結(jié)果如下: 示例: device_name switch-01 switch-02 switch-03 None device_ip 192.168.1.1 192.168.1.2 192.168.1.3 方法iter_cols,遍歷列from openpyxl import load_workbook as open
# 類示例化
wb = open('simple_excel.xlsx')
# 第一個工作表對象
ws1 = wb[wb.sheetnames[0]]
# 循環(huán)遍歷列
for col in ws1.iter_cols(min_row=3, max_row=5, min_col=1, max_col=1):
for cell in col:
print(f"單元格數(shù)據(jù):{cell.value}")
# 關(guān)閉工作簿
wb.close()
# 回顯結(jié)果如下:
單元格數(shù)據(jù):switch-01
單元格數(shù)據(jù):switch-02
單元格數(shù)據(jù):switch-03參數(shù)說明:
附錄 |
|
|