1. 程式人生 > >python中使用xlrd和xlwt進行excel的讀寫和格式設定

python中使用xlrd和xlwt進行excel的讀寫和格式設定

在用python處理excel表的時候出現了一些問題,記錄下最後的實現方式和問題解決方法。

腳本里先註明# -*- coding:utf-8 -*-   

1.  確認源excel存在並用xlrd讀取第一個表單中每行的第一列的數值。

import xlrd, xlwt
import os

assert os.path.isfile('source_excel.xls'),"There is no timesheet exist. Exit..."

book = xlrd.open_workbook('source_excel.xls')
sheet=book.sheet_by_index(0)

for rows in range(sheet.nrows):
    value = sheet.cell(rows,0).value

2. 用xlwt準備將從源表中讀出的資料寫入新表,並設定行寬和表格的格式。合併單元格2行8列後寫入標題,並設定格式為之前定義的tittle_style。使用的是write_merge。

wbk = xlwt.Workbook(encoding='utf-8')
sheet_w = wbk.add_sheet('write_after', cell_overwrite_ok=True)
sheet_w.col(3).width = 5000
tittle_style = xlwt.easyxf('font: height 300, name SimSun, colour_index red, bold on; align: wrap on, vert centre, horiz center;')
sheet_w.write_merge(0,2,0,8,u'這是標題',tittle_style)

3. 當函式中要用到全域性變數時,注意加global。否則會出現UnboundLocalError:local variable'xxx' referenced before assignment.

check_num = 0

def check_data(sheet):
    global check_num
    check_num=check_num+1

4. 寫入日期和帶格式的數值。原來從sheet中讀取的日期格式為2014/4/10,處理後只保留日期並做成陣列用逗號分隔後寫入新的excel。

date_arr = []
date=sheet.cell(row,2).value.rsplit('/')[-1]
if date not in date_arr:
     date_arr.append(date)
sheet_w.write_merge(row2,row2,6,6,date_num, normal_style)
sheet_w.write_merge(row2,row2,7,7,','.join(date_arr), normal_style)

5. 當從excel中讀取的日期格式為xldate時,就需要使用xlrd的xldate_as_tuple來處理為date格式。先判斷表格的ctype確實是xldate才能開始操作,否則會報錯。之後date格式可以使用strftime來轉化為string。如:date.strftime("%Y-%m-%d-%H")

from datetime import date,datetime
from xlrd import xldate_as_tuple

if (sheet.cell(rows,3).ctype == 3):
        num=num+1
        date_value = xldate_as_tuple(sheet.cell_value(rows,3),book.datemode)
        date_tmp = date(*date_value[:3]).strftime("%d")

6. 最後儲存新寫的表

wbk.save('new_excel.xls')