1、安裝模塊;
pip install xlrd # xlrd模塊既可以處理2003版本之前的excel表格 xls,也可以處理新版本表格 xlsx; 但是 只能讀取數;
pip install openpyxl # openpyxl可以讀,可以寫,但是不支持老版本的excel文檔;
2、表單處理 --- 讀數據 (xlrd模塊);
前置條件:
import xlrd
book = xlrd.open_workbook("income.xlsx")
sheet = book.sheet_by_index(0)
操作文件截圖:
文檔操作:
獲取所有sheet名稱: book.sheet_names()
獲取所有sheet數量: book.nsheets ,如: print(book.nsheets)
通過sheet索引獲取表單 : sheet = book.sheet_by_index(0) # 獲取到需要的 表單對象;
通過sheet名稱獲取表單 : sheet = book.sheet_by_name("2018") # 獲取到需要的 表單對象;
表格操作:
3.1、獲取表單名稱:print(sheet.name)
3.2、獲取表單索引:print(sheet.number)
3.3、獲取表單行數:print(sheet.nrows)
3.4、獲取表單列數:print(sheet.ncols)
3.5、獲取A1表格數據:print(sheet.cell_value(rowx=0,colx=0)) # 默認是浮點數; 可以加 "int" 得到整數:int(sheet.cell_value(rowx=0,colx=0))
3.6、獲取一整行數據: print(sheet.row_values(rowx=0))
3.7、獲取第一行的第二列及以后的數據:print(sheet.row_values(rowx=0,start_colx=1,end_colx=None)) ; # None參數可以省略,變成:sheet.row_values(rowx=0,start_colx=1)
3.8、獲取一張列數據: print(sheet.col_values(colx=1))
3.9、獲取第2列的第2行到第11行數據:print(sheet.col_values(colx=1,start_rowx=1,end_rowx=10))
3.10、計算表格“2017”中數字的和:
sheet = book.sheet_by_name("2017")
incomes = sheet.col_values(colx=1,start_rowx=1)
print("2017年收入為:{}".format(int(sum(incomes))))
3、表單處理 --- 寫數據(openpyxl);
前置條件:
import openpyxl
# 創建一個 excelworkbook對象;
book = book = openpyxl.Workbook()
# 創建時,會自動產生一個sheet,通過actcive獲取到這個 表單(sheet);
sheet = book.active
# 修改當前 sheet 標題為 省份;
sheet.title = "省份"
# 保存文檔;--每次操作完成后一定要保存;
book.save("中國.xlsx")
# 增加一個名為 “四川省” 的sheet,放在最后;
sheet1 = book.create_sheet("四川省--最后")
# 增加一個名為 “北京市” 的sheet,放在最前面;
sheet2 = book.create_sheet("北京市--最前",0)
# 增加一個名為 “廣東省” 的sheet,放在第二個位置;
sheet3 = book.create_sheet("廣東省",1)
根據以上操作得到結果如下:
# 根據 表單名稱 獲取某個 sheet 對象;
sheet = book["省份"]
# 給第一個單元格寫入數據;
sheet["A1"] = "黑龍江省"
# 獲取第一個單元格的內容;
print(sheet["A1"].value)
# 給任意一個單元格賦值;
sheet.cell(2,2,value = "山東省") , 等價后面這個寫法:sheet.cell(3,3).value = "山東省2"
命令中表示單元格的數字參數是從 1 開始計數(xlrd是從 0 開始計數);
4、表單處理 --- 數據修改(openpyxl);
import openpyxl
4.1、修改目標單元格數據;
# 加載 excel文件;
book = openpyxl.load_workbook("中國.xlsx")
# 獲取 表對象;
sheet = book["省份"]
# 修改目標單元格的數據;
sheet["A1"] = "修改省份"
# 保存修改后的數據;
book.save("中國-1.xlsx") ,可以和原來名稱相同,覆蓋原文件,也可以另存為一個新文件;
得到結果如下:
4.2、插入、刪除行列;
# 在第2行的位置插入、刪除1行;
sheet.insert_rows(2) ; 等價於(插入一行時第二個參數可以省略) : sheet.insert_rows(2,1)
sheet.delete_rows(2) ; 等價於(刪除一行時第二個參數可以省略) : sheet.delete_rows(2,1)
# 在第3行的位置插入、刪除5行;
sheet.insert_rows(3,5);
sheet.delete_rows(3,5);
# 在第2列的位置插入、刪除1列;
sheet.insert_cols(2) ; 等價於(插入一列是第二個參數可以省略) : sheet.insert_cols(2,1)
sheet.delete_cols(2) ; 等價於(插入一列是第二個參數可以省略) : sheet.delete_cols(2,1)
# 在第2列的位置插入、刪除5列;
sheet.insert_cols(3,5);
sheet.delete_cols(3,5)
4.3、文字顏色、字體、大小;
import openpyxl
# 導入 Font對象 和 colors 顏色常量;
from openpyxl.styles import Font,colors
# 加載 excel文件;
book = openpyxl.load_workbook("中國.xlsx")
sheet = book["省份"]
# 設置單元格字體;
sheet["A1"].font = Font(color = colors.RED, # 設置字體為紅色;
size = 15, # 設置字體大小;
bold = True, # 設置字體為粗體;
italic = True, # 設置字體為斜體;
)
# 也可以使用RGB數字表示字體顏色;
sheet["A1"].font = Font(color = "981818")
# 設置整行 字體風格, 指定第5行;
font == Font(color = "981818")
for x in range(1,10): # 設置第 1 到 10 列;
sheet.cell(row=5,column=x).font = font
# 設置整列 字體風格, 指定第5列;
font = Font(bold = True)
for x in range(1,10): # 設置第 1 到 10 行;
sheet.cell(row=x, column = 5).font = font
# 保存設置;
book.save("中國-1.xlsx") ,可以和原來名稱相同,覆蓋原文件,也可以另存為一個新文件;
4.4、單元格背景色;
import openpyxl
# 導入 Font對象 和 colors 顏色常量;
from openpyxl.styles import patternfill
# 加載 excel文件;
book = openpyxl.load_workbook("中國.xlsx")
sheet = book["省份"]
# 設置某個單元格背景色;
sheet["A1"].fill = Patternfill("solid","E39191")
# 設置整行背景色, 指定第6行;
fill = PatternFill("solid","E39191")
for x in range(1,10): #設置第 1 到 10列;
sheet.cell(row=6,column=x).fill = fill
# 保存設置;
book.save("中國-1.xlsx") ,可以和原來名稱相同,覆蓋原文件,也可以另存為一個新文件;
4.5、插入圖片;
import openpyxl
# 導入 Font對象 和 colors 顏色常量;
from openpyxl.drawing import Image
# 加載 excel文件;
book = openpyxl.load_workbook("中國.xlsx")
sheet = book["省份"]
# 在第2行,第3列 的位置插入圖片;
sheet.add_image(Image("pic.png"),"C2")
# 保存設置;
book.save("中國-1.xlsx") ,可以和原來名稱相同,覆蓋原文件,也可以另存為一個新文件;