Python讀寫Excel

svoid發表於2015-02-25

xlrd模組讀取excel

處理流程

1. 匯入模組
2. 開啟Excel檔案讀取資料
3. 獲取一個工作表
sheet = book.sheets()[0]          #通過索引順序獲取
sheet = book.sheet_by_index(0) #通過索引順序獲取
sheet = book.sheet_by_name(u'Sheet1')#通過名稱獲取

4.獲取整行和整列的值(陣列)
sheet.row_values(i)
sheet.col_values(i)

5.獲取行數和列數
nrows = sheet.nrows
ncols = sheet.ncols

6.迴圈行列表資料
for i in range(nrows ):
  print table.row_values(i)

7.獲取單元格
cell_A1 = table.cell(0,0).value 
cell_A1 = table.row(0)[0].value
cell_C4 = table.cell(2,3).value
cell_A2 = table.col(2)[3].value

8.簡單的寫入
row = 0 
col = 0 
# 型別 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
ctype = 1 
value = '單元格的值' 
xf = 0 # 擴充套件的格式化 
table.put_cell(row, col, ctype, value, xf) 
table.cell(0,0)       #單元格的值'
table.cell(0,0).value #單元格的值'

xlwt模組寫入excel

處理流程

1. 匯入xlwt模組
2. 新建一個excel檔案
file = xlwt.Workbook()
3. 新建一個sheet
table = file.add_sheet('sheet name')

4. 寫入資料table.write(行,列,value)
table.write(0,0,'test')
如果對一個單元格重複操作,會引發
returns error:
# Exception: Attempt to overwrite cell:
# sheetname=u'sheet 1' rowx=0 colx=0
所以在開啟時加cell_overwrite_ok=True解決
table = file.add_sheet('sheet name',cell_overwrite_ok=True)

5. 儲存檔案
file.save('demo.xls')

6.其它使用style
style = xlwt.XFStyle() #初始化樣式
font = xlwt.Font()     #為樣式建立字型
font.name = 'Times New Roman'
font.bold = True
style.font = font    #為樣式設定字型
table.write(0, 0, 'some bold Times text', style) # 使用樣式

xlwt 允許單元格或者整行地設定格式。還可以新增連結以及公式。可以閱讀原始碼,那裡有例子:
dates.py, 展示如何設定不同的資料格式
hyperlinks.py, 展示如何建立超連結 (hint: you need to use a formula)
merged.py, 展示如何合併格子
row_styles.py, 展示如何應用Style到整行格子中.

示例demo

# -*- coding:utf-8 -*-
#!/usr/bin/python
'''
Script Name     : parsexls.py
Author          : svoid
Created            : 2015-02-25
Last Modified    : 
Version            : 1.0
Modifications    : 
Description    : 處理讀寫Excel
'''

import xlrd     #讀取Excel
import xlwt     #寫入Excel
import codecs
import os

'''
Description        :讀取Excel內容並儲存到文字檔案中
@param textfilename:寫入文字檔案
@param xlsname     :讀取Excel檔案
@return 無
'''
def readxls(excelName,textfilename):
  #開啟Excel檔案讀取資料
  book = xlrd.open_workbook(excelName)
  for i in range(len(book.sheets())):
    sheet = book.sheets()[i]
    nrows = sheet.nrows     #讀取工作頁行數
    ncols = sheet.ncols     #讀取工作頁列數
    for i in range(nrows):
      info = ''
      for j in range(len(sheet.row_values(i))):
        if isinstance(sheet.row_values(i)[j],(int,float,complex)):
          info += str(int(sheet.row_values(i)[j]))+'\t'
        else:
          info += sheet.row_values(i)[j]+'\t'
      print(info)
      saveFile(textfilename,info)

'''
Description    : 將資料按行儲存到檔案中
@param savefilename:儲存檔案內容文字檔案
@param data :需要儲存的資料
@return 無
'''
def saveFile(savefilename,data):
  f=codecs.open(savefilename,"a","utf-8")
  f.writelines(data)
  f.writelines('\n')
  f.close()

'''
Description    : 文字轉換成Excel的函式
@param filename:輸入文字檔案
@param excelName :輸出Excel檔案
@return 無
'''
def txt2xls(filename,excelName):
  f = codecs.open(filename,'r','gbk')
  x = 0
  y = 0
  xls = xlwt.Workbook()
  sheet = xls.add_sheet('個人資訊',cell_overwrite_ok=True)
  while True:
    line = f.readline()    #讀取文字行內容
    print(line)
    if not line :
      break
    for i in line.split('\t'):
      item = i.strip()
      sheet.write(x,y,item)
      y += 1
    x += 1
    y = 0

  f.close()   #讀取完成之後關閉檔案
  xls.save(excelName)

if __name__ == '__main__':

  readxls("D:\\test.xlsx","D:\\test.txt")
  txt2xls("D:\\test1.txt","D:\\test1.xls")

整理自網路

svoid
2015-02-25

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29733787/viewspace-1441414/,如需轉載,請註明出處,否則將追究法律責任。

相關文章