Commit 464bee06 by zhangchunyao

Delete Excel.py

parent d2f0c59c
import os,xlrd
from xlutils.copy import copy
class Reader:
'''
by LiangChao
at 2019/7/11
用来读取Excel文件内容
'''
def __init__(self):
#整个excel工作簿缓存
self.workbook=None
#当前工作簿sheet
self.sheet=None
#当前sheet的行数
self.rows=0
#当前读取到的行数
self.cols = 0
self.r=0
self.key_num = []
#打开Excel
def open_excle(self,srcfile):
#如果打开的文件不存在,就报错
if not os.path.isfile(srcfile):
print("error:%s not exist!" % (srcfile))
return
#设置读取exel使用utf8编码
xlrd.Book.encoding="utf8"
#读取EXCEL内容到缓存wordbook
self.workbook=xlrd.open_workbook(filename=srcfile)
#选取第一个sheet页面
self.sheet=self.workbook.sheet_by_index(0)
#设置rows为当前sheet行数
self.rows=self.sheet.nrows
self.cols = self.sheet.ncols
#设置默认读取为第一行
self.r=0
return self.workbook
#获取sheet页面
def get_sheets(self):
#通过sheet名字,切换sheet页面
sheets=self.workbook.sheet_names()
return sheets
#切换sheet页面
def set_sheet(self,name):
#通过sheet名字,切换sheet页面
self.sheet=self.workbook.sheet_by_name(name)
self.rows=self.sheet.nrows
self.r=0
return
#逐行读取
def readline(self):
row1=None
#如果当前还没到最后一行,则往下读取一行
if self.r<self.rows:
#读取第r行的内容
row=self.sheet.row_values(self.r)
#设置下一次读取r的下一行
self.r=self.r+1
#辅助遍历行里面的列
i=0
row1=row
#把读取的数据都变成字符串
for strs in row:
row1[i]=str(strs)
i=i+1
return row1
def dict_data(self):
if self.rows <= 1:
print("总行数小于1")
else:
r = []
for i in list(range(self.rows - 1)):
# 从第二行取对应values值
value = self.sheet.row_values(i+1)
values = value[2:4]
if values[0] !='' :
values.append(i+1)
#self.key_num.append(i+2)
r.append(values)
return r
def sheet_cont(self,):
cont = self.sheet.nrows
r = []
for i in range(1,cont):
r.append(i)
return r
def readline_new(self,num):
# num = self.key_num
row1 = None
# 如果当前还没到最后一行,则往下读取一行
if num < self.rows:
# 读取第r行的内容
row = self.sheet.row_values(num)
# 辅助遍历行里面的列
i = 0
row1 = row
# 把读取的数据都变成字符串
for strs in row:
row1[i] = str(strs)
i = i + 1
return row1
class Writer:
'''
by kongwen 2019/7/8 用来复制写入excel
'''
def __init__(self):
#读取需要的复制excel
self.workbook=None
#拷贝的工作簿
self.wb=None
#当前工作的sheet页
self.sheet=None
#记录生成的文件,用来保存
self.df=None
#记录写入的行
self.row=0
#记录写入的列
self.clo=0
#复制并打开excel
def copy_open(self,srcfile,dstfile):
#判断要复制的文件是否存在
if not os.path.isfile(srcfile):
print(srcfile+" not exist")
return
#判断要新建的文件是否存在,存在则提示
if os.path.isfile(dstfile):
print("warning:"+dstfile+"file already exist")
#记录要保存的文件
self.df=dstfile
#读取EXCEL到缓存
#formatting_info带格式的复制
self.workbook=xlrd.open_workbook(filename=srcfile,formatting_info=True)
#拷贝
self.wb=copy(self.workbook)
#默认使用第一个sheet
#sheet=wb.get_sheet('Sheet1')
return
#获取sheet页面
def get_sheets(self):
#获取所有sheet的名字,并返回第一个列表
sheets=self.workbook.sheet_names()
#print(sheets)
return sheets
#切换sheet页面
def set_sheet(self,name):
#通过sheet名字,切换sheet页面
self.sheet=self.wb.get_sheet(name)
return
#写入指定单元格,保留原格式
def write(self,r,c,value):
#获取写入的单元格
def _getCell(sheet,r,c):
#获取行
row=sheet._Worksheet__rows.get(r)
if not row:
return None
#获取单元格
cell=row._Row__cells.get(c)
return cell
#获取要写入的单元格
cell=_getCell(self.sheet,r,c)
#写入值
self.sheet.write(r,c,value)
if cell:
#获取要写入的单元格
ncell=_getCell(self.sheet,r,c)
if ncell:
#设置写入后格式和写入前一样
ncell.xf_idx=cell.xf_idx
return
#保存
def save_close(self):
#保存复制后的文件到硬盘
self.wb.save(self.df)
return
#调试
if __name__ == '__main__':
reader=Reader()
reader.open_excle('/Users/niweizhong/Desktop/case1.xls')
sheetname=reader.get_sheets()
for sheet in sheetname:
#设置当前读取的sheet页面
reader.set_sheet(sheet)
for i in range(reader.rows):
print(reader.readline())
writer=Writer()
writer.copy_open('/Users/niweizhong/Desktop/case1.xls','/Users/niweizhong/Desktop/case2.xls')
sheetname=writer.get_sheets()
writer.set_sheet(sheetname[0])
writer.write(1,1,'William')
writer.save_close()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment