1. 程式人生 > >python 操作excel 讀寫同一個檔案

python 操作excel 讀寫同一個檔案

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2016-08-21 12:54:12
# @Author  : Your Name ([email protected])
# @Link    : http://example.org
# @Version : $Id$

import os
import xlwt
import xlrd
from xlutils.copy import copy
from datetime import date 
import time


def getMonAndDay():
	today = date.today()
	return str(today.month) + 'm' + str(today.day)+'d'

class excelutil(object):
	"""docstring for excelutil"""
	def __init__(self, fileName):
		super(excelutil, self).__init__()
		self.fileName = fileName
		self.readExcel(fileName)
	
	def readExcel(self,fileName):
		if not os.path.exists(fileName):
			fileExcel = xlwt.Workbook()
			fileExcel.add_sheet(getMonAndDay())
			fileExcel.save(self.fileName) 

		self.rbdata = xlrd.open_workbook(self.fileName)
		self.wbdata = copy(self.rbdata)
		self.setCurrentTableByIndex(0)
	
	def setCurrentTableByIndex(self,index):
		self.rbtable = self.rbdata.sheet_by_index(index)
		self.wbtable = self.wbdata.get_sheet(index)

	def setCurrentTableByName(self,sheetName):
		sheetNames = self.rbdata.sheet_names()
		tmpIndex = 0
		for x in xrange(0,len(sheetNames)):
			if sheetNames[x] == sheetName:
				tmpIndex =x
		self.wbtable = self.wbdata.get_sheet(tmpIndex)
		self.rbtable = self.rbdata.sheet_by_name(sheetName)

	def getValues(self,col,row):
		if self.rbtable  == None:
			return 'current rbtable is null'
		# 這個值是rbtable 可能和wbtable值不一樣(setValues 沒有儲存值就不一樣) saveExcel()儲存一下就會更新
		return self.rbtable.cell(row,col).value

	def setValues(self,col,row,value):
		self.wbtable.write(row,col,value)

	def addSheet(self,sheetName,new=False):  #new = true 有重名的加一個時間字尾 強制建立新的
		isexist = False
		for name in self.rbdata.sheet_names():
			if name == sheetName :
				if new :
					sheetName = sheetName+ str(time.time())
				isexist = True
		if new or not isexist:
			self.wbdata.add_sheet(sheetName)
		self.saveExcel()
		self.setCurrentTableByName(sheetName)
		# self.setCurrentTableByName(0)


	def saveExcel(self):  
		self.wbdata.save(self.fileName)
		self.readExcel(self.fileName)
if __name__ == '__main__':

	excel = excelutil('demo.xls')
	excel.addSheet('sheet2')
	# # print excel.getValues(2,0)
	excel.setValues(3,50,'dddd')
	
	excel.saveExcel()
	print excel.getValues(3,50)