文檔摘要:
本文檔主要介紹如何通過python對office excel進行讀寫操作,使用了xlrd、xlwt和xlutils模塊。另外還演示了如何通過Tcl tcom包對excel操作。
關鍵字:
Python、Excel、xlrd、xlwt、xlutils、TCl、tcom
1
Python語法入門
在Python簡介中提到Python是一種直譯式電腦編程語言,體現在語法中,如要將變量a賦值為1,Tcl使用命令%set a 1(本文中為了區分Tcl和Python的命令,Tcl命令前會加上“%”,否則默認為Python命令),在python中命令為a = 1,輸出a的值可以直接輸入a,也可以通過print語句輸出a的值,命令為print a(在python 3.0以后版本中,print不再是一個語句,而是一個函數,所以如果想要輸出a,用法為print(a))。在Tcl中求1和10的和或者變量之間的加減乘除運算需要使用expr命令,在python則直接寫表達式就可以了。
Python很多功能都是靠模塊實現的,比如ftplib模塊負責ftp功能的實現,math模塊囊括了基本數學公式,如果我們想要引用這些模塊,需要使用命令import 模塊名稱,如import ftplib和import math。如果想使用math模塊中的函數floor,可以使用命令math.floor(28.5),語法為“模塊.函數”,如果想要直接使用floor函數,必須提前引用,命令為from math import floor,那樣就可以直接使用命令floor(28.5)了。如果覺得floor這個函數名稱太長了或者不好記憶,可以通過變量引用函數,如f = math.floor,這樣變量f就充當了math.floor的功能了。上面提到的模塊ftplib和math都是在python安裝的時候已經安裝了,而接下來重點介紹的xlrd、xlwt、xlutils模塊都不是隨python安裝的。需要手動下載安裝,第5節會詳細介紹模塊的安裝。
當成功導入了某個模塊后,可以通過函數dir (模塊名)查看這個模塊包含哪些函數,如果對某個函數的作用不了解,可以通過help函數查看,如help(math.pow)
本文只是帶領大家入門,python的其他語法可以參考其它資料學習。
2
Tcl對Excel操作
在使用python對excel操作之前搜索過如何通過Tcl對excel操作,Tcl本身沒有提供對excel操作的命令,可以通過tcom外部包來調用excel的接口實現,但是個人感覺實現起來比較麻煩,msdn網站上雖然提供了excel的接口,但示例都是針對VB腳本語言寫的,Tcl如果想要調用的話還需要轉換,如下是一段簡單的Tcl代碼展示如何通過tcom對excel進行操作,但也花了本人不少時間琢磨。
- # 加載tcom包
- package require tcom
- set filename "F:/1.xls"
- # 創建com實例,打開工作表,下面四句都是套路
- set excel [::tcom::ref createobject "Excel.Application"]
- set workbooks [$excel Workbooks]
- set workbook [$workbooks Open $filename]
- set worksheets [$workbook Worksheets]
- # "sheet1"為sheet的名稱
- set worksheet [$worksheets Item "sheet1"]
- # 創建單元格對象
- set cells [$worksheet Cells]
- # 給單元格B2賦值為“hsdf”
- $cells Item 2 B "hsdf"
- # 獲取sheet的個數並賦值給sheetCount
- set sheetCount [$worksheets Count]
- # 獲取A1至A15單元的范圍對象
- set range [$worksheet Range A1 A15]
- # 給A1至A15單元賦值
- $range Value2 "abcdefg"
- # 獲取A1至A15的值,並賦值給A,A是一個列表list
- set A [$range Value2]
- # 設置單元的背景色
- set interior [$range Interior]
- $interior Color [expr 0x00FFE0]
- # 設置單元的前景色和字體大小、加粗、斜體、字體
- set font [$range Font]
- $font Color [expr 0xFF0000]
- $font Bold 1
- $font Size 10
- $font Italic 0
- $font Name "華文行楷"
- # 設置單元格的寬度為自動調整
- set entire [$range EntireColumn]
- $entire AutoFit
- # 保存文檔
- $workbook Save
- # 顯示Excel
- $excel Visible 1
3
xlwt和xlrd模塊的安裝
Python也是通過導入外部模塊來實現對excel的操作,xlrd負責對excel的讀取,xlwt負責對excel的寫入,xlutils依賴於xlrd和xlwt,可以復制excel文件。這三個包都可以在網站
http://www.python-excel.org/下載。本文使用的xlrd版本為0.8.0,xlwt版本為0.7.5。從網上下載好xlrd和xlwt后,解壓縮到C:\Python2.7.5\Lib下,此時在命令行下輸入import xlrd或者import xlwt,會出現提示ImportError: No module named xlwt,這表明還沒有安裝xlwt模塊。
python 導入一個模塊的過程要求有一個叫做“路徑搜索”的操作過程,即是在文件系統“預先設定的區域”查找模塊文件以加載模塊的過程。這個預先設定的區域其實是python搜索路徑的一組目錄。這個目錄保存在sys.path中,如果你想知道python導入模塊時會在哪些路徑搜索模塊,你可以執行以下命令查看搜索路徑目錄:
>>> import sys
>>> sys.path
['D:\\python\\shell\\2.7.5','C:\\Python2.7.5\\Lib\\idlelib','C:\\Python2.7.5\\lib\\site-packages\\setuptools-1.3-py2.7.egg','C:\\Python2.7.5\\lib\\site-packages\\xlutils-1.7.0-py2.7.egg','C:\\Windows\\system32\\python27.zip','C:\\Python2.7.5\\DLLs','C:\\Python2.7.5\\lib','C:\\Python2.7.5\\lib\\plat-win', 'C:\\Python2.7.5\\lib\\lib-tk','C:\\Python2.7.5','C:\\Python2.7.5\\lib\\site-packages','C:\\Python2.7.5\\lib\\site-packages\\win32','C:\\Python2.7.5\\lib\\site-packages\\win32\\lib','C:\\Python2.7.5\\lib\\site-packages\\Pythonwin']
在sys.path中找到一個路徑為'C:\\Python2.7.5\\lib',所以我們把模塊解壓縮到這個目錄下。命令>>>sys.path.append('C:\\Python2.7.5\\lib')在最后添加一個目錄,sys.path.insert(0,' C:\\Python2.7.5\\lib ')在第一位插入一個目錄。
解壓縮完成並放在正確目錄后,在cmd下進入package當前目錄,然后輸入命令“C:\Python2.7.5\Lib\xlrd-0.8.0>python setup.py install”,安裝完成后可以輸入import xlrd,dir(xlrd)來確認是否已經安裝正確。
4
xlrd簡單使用方法
- >>>import xlrd
- >>>excel = xlrd.open_workbook("C:\Users\HuZhangdong\Desktop\ASB測試床環境信息圖.xls") #打開文件並將對象存儲到excel中
- >>>sheet = excel.sheet_by_index(0) #通過索引讀取sheet對象,第一個sheet的索引為"0"
- >>>row_3 = sheet.row_values(2) #讀取第3行的所有數據,並以列表的形式存儲到row_3中
- >>>col_3 = sheet.col_values(2) #讀取第3列的所有數據,並以列表list的形式存儲到col_3中
- >>>cell_12_7 = sheet.cell_value(11,6) #讀取第12行第7列的數據,並存儲到cell_12_7中
- >>>cell_11_11 = sheet.cell(10,10).value #讀取第11行第11列的數據,並存儲到cell_11_11中
- >>>cell_7_8 = sheet.row(6)[7].value #讀取第7行第8列的數據
- >>>cell_7_8 = sheet.cel(7)[6].value #讀取第8列第7行的數據
- >>>num_rows = sheet.nrows #讀取sheet的總行數
- >>>num_cols = sheet.ncols #讀取sheet的總列數
基本上面的命令已經可以滿足目前對excel讀取的操作了,接下給大家講解xlwt的用法。
5
xlwt簡單使用方法
- #-*- coding: UTF-8 -*- #設置編碼格式為 utf-8
- import os,xlwt,datetime #導入模塊
- data =xlwt.Workbook() #新建一個Workbook
- sheet = data.add_sheet(u"sheet") #新建一個sheet,名稱為'sheet'
- style1 = xlwt.XFStyle() #創建格式style1
- style2 = xlwt.XFStyle()
- style3 = xlwt.XFStyle()
- #設置字體格式
- font1 = xlwt.Font() #創建font1
- font1.name = 'Times New Roman' #字體為'Times New Roman'
- font1.bold = True #加粗
- font1.colour_index = 2 #字體顏色為紅色,0 = Black, 1 = White, 2 = Red, 3 = Green, 4 = Blue, 5 = Yellow, 6 = Magenta, 7 = Cyan
- font1.underline = xlwt.Font.UNDERLINE_DOUBLE #下划線類型,UNDERLINE_DOUBLE 代表雙下划線,另外還有 UNDERLINE_NONE, UNDERLINE_SINGLE, UNDERLINE_SINGLE_ACC, UNDERLINE_DOUBLE, UNDERLINE_DOUBLE_ACC
- font1.escapement = xlwt.Font.ESCAPEMENT_SUPERSCRIPT #設置上標
- font1.family = xlwt.Font.FAMILY_ROMAN
- font1.height = 0x190 #0x190是16進制,換成10進制為400,然后除以20,就得到字體的大小為20
- style1.font = font1 #將創建的font1字體格式應用到style1上
- font2 = xlwt.Font() #創建font2
- font2.name = "Algerian" #字體為'Algerian'
- font2.colour_index = 3 #字體顏色為綠色
- font2.italic = True #斜體
- font2.struck_out = True #刪除線
- font2.height = 0x258 #字體大小為30
- style2.font = font2 #將創建的font2字體格式應用到style2上
- #設置列寬
- sheet.col(0).width = 6000
- sheet.col(1).width = 12000
- sheet.set_col_default_width(2)
- #設置單元格對齊方式
- alignment = xlwt.Alignment() #創建alignment
- alignment.horz = xlwt.Alignment.HORZ_CENTER #設置水平對齊為居中,May be: HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED
- alignment.vert = xlwt.Alignment.VERT_CENTER #設置垂直對齊為居中,May be: VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED
- style3.alignment = alignment #應用alignment到style3上
- #插入時間
- style3.num_format_str = 'YYYY-MM-DD HH:MM:SS' #設置時間格式
- sheet.write(1,1,datetime.datetime.now(),style3) #在第2行第2列插入當前時間,格式為style3
- #設置單元格背景顏色
- pattern_yellow = xlwt.Pattern() #創建pattern_yellow
- pattern_yellow.pattern = xlwt.Pattern.SOLID_PATTERN #設置填充模式為全部填充
- pattern_yellow.pattern_fore_colour = 5 #設置填充顏色為yellow黃色
- style1.pattern = pattern_yellow #把設置的pattern應用到style3上
- pattern_red = xlwt.Pattern() #創建pattern_red
- pattern_red.pattern = xlwt.Pattern.SOLID_PATTERN #設置填充模式為全部填充
- pattern_red.pattern_fore_colour = 2 #設置填充顏色為red紅色
- style2.pattern = pattern_red #把設置的pattern應用到style4上
- #設置單元格邊框
- borders = xlwt.Borders() #創建borders
- borders.left = xlwt.Borders.DASHED #設置左邊框的類型為虛線 May be: NO_LINE, THIN, MEDIUM, DASHED, DOTTED, THICK, DOUBLE, HAIR, MEDIUM_DASHED, THIN_DASH_DOTTED, MEDIUM_DASH_DOTTED, THIN_DASH_DOT_DOTTED, MEDIUM_DASH_DOT_DOTTED, SLANTED_MEDIUM_DASH_DOTTED, or 0x00 through 0x0D.
- borders.right = xlwt.Borders.THIN #設置右邊框的類型為細線
- borders.top = xlwt.Borders.DOTTED #設置上邊框的類型為打點的
- borders.bottom = xlwt.Borders.THICK #設置底部邊框類型為粗線
- borders.left_colour = 0x10 #設置左邊框線條顏色
- borders.right_colour = 0x20
- borders.top_colour = 0x30
- borders.bottom_colour = 0x40
- style1.borders = borders #將borders應用到style1上
- style2.borders = borders #將borders應用到style2上
- sheet.write(3, 0, 'HuZhangdong', style1) #在第4行第1列寫入'HuZhangdong',格式引用style1
- sheet.write(4, 0, 'YinMengran' , style2) #在第5行第1列寫入'YinMengran',格式引用style2
- data.save(u'e:\\3.xls') #保存到 e:\\3.xls
函數xlwt.Workbook()只能新建一個excel文檔,不能打開一個已經存在的文檔,下一章會講解如何通過xlutils修改一個已經存在的excel文檔。
6
xlutils簡單使用方法
本章將講解如何使用xlutils編輯一個已經存在的文檔,需要導入xlutils模塊,下載地址是
http://www.python-excel.org/,模塊成功安裝后就開始編寫腳本吧。
- #-*- coding:utf-8 -*- #設置當前編碼格式為utf-8
- import xlwt #導入xlwt模塊
- import xlrd #導入xlrd模塊
- from xlutils.copy import copy #導入import模塊的copy函數,接下來就可以直接使用函數copy了。
- fileName = "E:\\4.xls"
- sheetName = "sheet1"
- styleBoldRed = xlwt.easyxf('font: color-index red, bold on') #設置字體,顏色為紅色,加粗
- oldWb = xlrd.open_workbook(fileName, formatting_info=True) #使用xlrd.open_workbook函數打開文件,formatting_info=True表示保留該文件的格式
- newWb = copy(oldWb) #通過copy函數把oldWb copy到newWb,然后通過編輯newWb來實現編輯已經存在的文件。
- newWs = newWb.get_sheet(0) #讀取第一個sheet
- newWs.write(4, 0, "value1",styleBoldRed) #第5行第1列寫入值“value1”,格式采用styleBoldRed。
- newWs.write(4, 1, "value2",styleBoldRed) #第5行第2列寫入值“value2”
- newWs.write(4, 2, "value3",styleBoldRed) #第5行第3列寫入值“value3”
- newWb.save(fileName) #文件保存為"E:\\4.xls"