python作為一種解釋性語言,簡單高效的模式逐漸火爆。同時存在多種擴展性。
永不加班系列 python正確操作excel
實驗環境:
系統:win10
語言:python3.8
承載軟件:pycharm2021.1.2 (Professional Edition)
第三方類庫:openpyxl、xlrd
一、第三方類庫介紹
xlrd庫是一個很常用的讀取excel文件的庫,其對excel文件的讀取可以實現比較精細的控制。
openpyxl是實現excel的寫入操作的第三方類庫
一、安轉第三方類庫
pip install xlrd==1.2.0 #此處一定要安轉這個版本的xlrd,新版的xlrd可能會出現不兼容xlsx后綴文件的情況
pip install openpyxl
二、引用xlrd讀取excel數據
首先我先來選取一個測試的數據,因為在之前寫過Numpy和pandas的操作我們可以直接生成一個名為“test.xlsx”的文件。點擊此處獲取知識鏈接
因為工作中大部分人的excel並不像此處如此完美所以不可以直擊使用pandas庫進行操作,結合工作中的實際情況自行斟酌使用
import numpy as np import pandas as pd df = pd.DataFrame(data=np.random.randint(1,90,size=[10,3]),columns=['日用戶','日銷售額','日成本']) df.to_excel('test.xlsx')
導入xlrd包並讀取數據
import xlrd #選中要讀取的excel文件 test1 = xlrd.open_workbook('test.xlsx') # 根據sheet索引獲取sheet頁 0表示1 1表示2 以此類推 sheet = test1.sheet_by_index(0) # 根據sheet名稱獲取sheet頁 0表示1 1表示2 以此類推 sheet1 = test1.sheet_by_name('Sheet1') # 打印工作表的名稱、行數和列數 print("打印工作表的名稱、行數和列數:") print('名稱:',sheet.name, '行數:',sheet.nrows,'列數:', sheet.ncols) # 選中列 col = sheet.col_values(2) print('col',col) # 選中行 row = sheet.row_values(2) print('row',row) # 根據行索引選定列 注意row()中以1開始 []中以0開始 print(sheet.row(1)[2].value)
三、引入openpyxl寫入數據
import openpyxl # 選中寫入的excel文件 workbook=openpyxl.load_workbook('test.xlsx') # 選中將要寫入的sheet頁 sheets = workbook["Sheet1"] # 給第一個單元格寫入數據; sheets["A1"] = "黑龍江省" # 設置字體為紅色;字體大小;字體為粗體;字體為斜體 from openpyxl.styles import Font,colors sheets["A1"].font = Font(color='981818',size = 15,bold = True,italic = True,) # 獲取第一個單元格的內容; print(sheets["A1"].value) # 給任意一個單元格賦值 sheets.cell(2,1,value = "江蘇省")
# 保存數據,如若名稱存在就覆蓋 否則新建文件 workbook.save('更改后輸出.xlsx')
效果如圖
此處知識異常簡單需要基本的語句操作練習即可可游刃有余。
下面推薦一個今天遇到的問題胡亂寫了個demo
import openpyxl import xlrd # op選中文件 workbook1=openpyxl.load_workbook('test1.xlsx') sheets=workbook1['Sheet1'] # xlrd選中文件 book = xlrd.open_workbook("test1.xlsx") # 選中sheet1 sheet = book.sheet_by_index(0) # 單位列 dw = sheet.col_values(2) # 數量列 nb = sheet.col_values(1) print(dw) # 若單位為0則乘以10000否則不變 for i in range(len(dw)): if dw[i]==0: data = sheets.cell(i+1, 2).value=nb[i]*10000 else: data = sheets.cell(i+1, 2).value = nb[i] print(data) # 刪除單位(第三)列 sheets.delete_cols(3) # 覆蓋保存原數據 workbook1.save('test1.xlsx')
操作前
操作后
Auto Copied