1. 程式人生 > >python 操作Excel文件

python 操作Excel文件

文件的 workbook ray 方法 方式 sta xlwt ase for

1 安裝xlrd、xlwt、xlutils

cmd下輸入:
pip install xlrd        #讀取excel
pip install xlwt        #寫入excel
pip install xlutils      #操作 Excel 文件的實用工具,如復制、分割、篩選等

2 模塊的基本用法:

xlrd模塊用於讀取excel文件內容,xlwt用於寫入數據,xlutils復制

2.1 打開excel文件

myworkbook = xlrd.open_workbook()  #新建一個excel文件並打開
myworkbook = xlrd.open_workbook(‘文件路徑‘, formatting_info = True)# 打開一個已存在的excel文件
   在默認情況中,合並單元格只在最左上角的子單元格可以讀取到值,其他都是空的,加上參數後formatting_info = True (這個只支持excel97-03的xls文件),sheet.merged_cells會返回當前表中所有合並單元格的信息,格式是像[(7,8,2,5),(1,3,4,5)...]這樣的一個列表。其中每一項都是一個單元格,比如(7,8,2,5)的意思是這個sheet中的第七行的第2-4列合並,和序列的分片操作一樣,是算頭不算尾,所以7,8是指合並的僅第七行(這個7不是index而是index+1),2,5則表示第二列到第四列,不包括第五列。這個“不算尾”的做法是區別於xlwt模塊中的合並單元格處理的。

2.2 復制一個excel對象

from xlutils.copy import copy
import xlrd
import xlwt
from xlutils.copy import copy
oldWb = xlrd.open_workbook("test.xlsx");#先打開已存在的表
newWb = copy(oldWb)#復制
newWs = newWb.get_sheet(2);#取sheet表
newWs.write(2, 4, "pass");#寫入 2行4列寫入pass
newWb.save(“bbb.xls"); #保存為bbb.xls

2.3 添加excel工作表

mySheet = myworkbook.add_sheet(“sheet”)

2.4 獲取excel工作表sheet

sheet_list = workbook.sheet_names()    #返回所有sheet的列表
mysheet = sheet_list[0]               #獲取sheet 列表後,通過索引獲取sheet
mysheet  = workbook.sheet_by_index(0)    #通過index來獲得一個sheet對象,index從0開始算起
mysheet  = workbook.sheet_by_name(“sheet1”)    #根據sheet名獲得相應的那個sheet對象

2.5 獲取表名,行數和列數

mysheetname = sheet.name 
nrows = mysheet.nrows
ncols = mysheet.ncols

2.6 獲取一行和一列

rowvalue = mySheet.row_values(i)        # i是行數,從0開始計數,返回list對象。
colvalues = mySheet.col_values(i)       # i是列數,從0開始計數,返回list對象。
sheet.get_rows()    # 返回一個叠代器,遍歷所有行,給出每個行的值列表
sheet.row(index)   # 返回一個row對象,可以通過row[index]來獲取這行裏的單元格cell對象
sheet.col_values(index)  # 返回某一列的值列表

2.7 獲取單元格數據

mycell = mySheet.cell(i, j) # 獲取單元格,i是行數,j是列數,行數和列數都是從0開始計數。
mycell_value = mycell.value      #通過單元格獲取單元格數據。
mycell_value = mysheet.cell(i, j)   #直接獲取單元格數據,i是行數,j是列數,行數和列數都是從0開始計數。
sheet.cell_value(x,y)  #直接獲取單元格數據,i是行數,j是列數,行數和列數都是從0開始計數。
sheet.row(x)[y].value #直接獲取單元格數據,i是行數,j是列數,行數和列數都是從0開始計數。

2.8 獲取單元格屬性

cell(i, j).ctype   # 返回該單元格數據類型的代碼(0表示空,1表示string,2表示number,3表示date,4表示boolean,5表示error)。
當ctype == 3 時,雖是日期,但那時python是按照float來處理的,需要用xldate_as_tuple方法來將其轉化為日期格式,
這個方法的用法就是xlrd.xldate_as_tuple(xldate,datemode), xldate表示一個ctype是3的一個值,datemode是屬於workbook的一個屬性。

2.9 寫入數據

     mysheet.write(2, 0, 1)   #寫入A3,數值等於1
     mysheet.write(2, 1, 1)   #寫入B3,數值等於1
      mysheet.write(2, 2, xlwt.Formula("A3+B3"))  #寫入C3,數值等於2(A3+B3)
     mystyle = xlwt.easyxf(‘font: name Times New Roman, color-index red, bold on‘, num_format_str=‘#,##0.00‘)   #單元格樣式
     mysheet.write(2,1,”aaaaa”, mystyle) #寫入B3,值等於“aaaaa”,並且單元格樣式為mystyle樣式

2.10 單元格樣式設置

myStyle = xlwt.easyxf(‘font: name Times New Roman, color-index red, bold on‘, num_format_str=‘#,##0.00‘) 
樣式用的模塊:
style = xlwt.XFStyle() # 樣式的base,通過style.屬性  來設置單元格屬性:
style.font  # 設置字體
style.alignment  # 設置對齊方式
style. pattern  #設置背景色
style. border #設置邊框

import xlwt


def def_style():

    style = xlwt.XFStyle()
    # 這部分設置字體
    font = xlwt.Font()
    # 字體
    font.name = Times New Roman
    # 設為粗體
    font.bold = True 
    # 字體高度
    font.height = 100
    # 字號
    font.size = 5
    # 字體顏色
    font.colour_index = 0x40
    style.font = font

    # 這部分設置居中格式
    alignment = xlwt.Alignment()
    # 水平居中
    alignment.horz = xlwt.Alignment.HORZ_CENTER
    # 垂直居中
    alignment.vert = xlwt.Alignment.VERT_CENTER
    style.alignment = alignment

    # 設置背景顏色
    ptn = xlwt.Pattern()
    # 設置背景色
    ptn.pattern = xlwt.Pattern.SOLID_PATTERN
    ptn.pattern_fore_colour = 0x40
    style.pattern = ptn

    # 設置邊框
    borders = xlwt.Borders()
    borders.left = 1
    borders.right = 1
    borders.top = 1
    borders.bottom = 1
    style.borders = borders
    return style

xlwt.Styles的color_map的部分參考值:

aqua 0x31

black 0x08

blue 0x0C

blue_gray 0x36

bright_green 0x0B

brown 0x3C

coral 0x1D

cyan_ega 0x0F

dark_blue 0x12

dark_blue_ega 0x12

dark_green 0x3A

dark_green_ega 0x11

dark_purple 0x1C

dark_red 0x10

dark_red_ega 0x10

dark_teal 0x38

dark_yellow 0x13

gold 0x33

gray_ega 0x17

gray25 0x16

gray40 0x37

gray50 0x17

gray80 0x3F

green 0x11

ice_blue 0x1F

indigo 0x3E

ivory 0x1A

lavender 0x2E

light_blue 0x30

light_green 0x2A

light_orange 0x34

light_turquoise 0x29

light_yellow 0x2B

lime 0x32

magenta_ega 0x0E

ocean_blue 0x1E

olive_ega 0x13

olive_green 0x3B

orange 0x35

pale_blue 0x2C

periwinkle 0x18

pink 0x0E

plum 0x3D

purple_ega 0x14

red 0x0A

rose 0x2D

sea_green 0x39

silver_ega 0x16

sky_blue 0x28

tan 0x2F

teal 0x15

teal_ega 0x15

turquoise 0x0F

violet 0x14

white 0x09

yellow 0x0D

 
 

python 操作Excel文件