學會python永不加班系列之操作excel

佟大帥發表於2021-11-01

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

相關文章