基础类封装-Excel存取库封装

  1 #!/usr/bin/env python3
  2 # -*- coding: utf-8 -*-
  3 # @Time    : 2019/10/14 23:37
  4 # @Author  : Tang Yiwei
  5 # @Email   : [email protected]
  6 # @File    : ParseExcel.py
  7 # @Software: PyCharm
  8 
  9 import openpyxl
 10 from openpyxl.styles import Border,Side,Alignment,Font
 11 import time
 12 
 13 class ParseExcel():
 14     def __init__(self):
 15         self.workbook = None
 16         self.excelFile = None
 17         self.worksheet = None #add
 18         self.fontColor = Font(color = None) # 设置字体的颜色
 19         self.fontStyle = Font(name = None) # 设置字体的样式
 20         # 设置字体样式
 21         self.fontStyleDict = {
 22             "microsoft_accor_black":"微软雅黑",
 23             "regular_script":"楷体",
 24             "song_typeface":"宋体"
 25         }
 26         # 颜色对应的RGB值
 27         self.RGBDict = {"red":"FFFF3030",
 28                         "green":"FF008B00",
 29                         "black":"000000",
 30                         }
 31 
 32     def createExcel(self,excelPathName):
 33         # 新建excel
 34         try:
 35             self.workbook = openpyxl.Workbook()
 36         except Exception as e:
 37             raise e
 38         self.excelFile = excelPathName
 39         return self.workbook
 40 
 41     def active(self):
 42         #  获取活跃的表格
 43         self.worksheet = self.workbook.active
 44         return self.worksheet
 45 
 46     def addTitle(self,title):
 47         # 修改title
 48         self.active.title = title
 49 
 50     def addSheet(self,sheetName):
 51         # 增加sheet
 52         self.worksheet_n = self.workbook.create_sheet(sheetName)
 53 
 54     def loadWordBook(self,excelPathName):
 55         # 将excel加载到内存中,并获取其workbook对象
 56         try:
 57             self.workbook = openpyxl.load_workbook(excelPathName)
 58         except Exception as e:
 59             raise e
 60         self.excelFile = excelPathName
 61         return self.workbook
 62 
 63     def getSheetByName(self,sheetName):
 64         # 根据sheet名获取该sheet对象
 65         try:
 66             sheet = self.workbook.get_sheet_by_name(sheetName)
 67             return sheet
 68         except Exception as e:
 69             raise e
 70 
 71     def getSheetByIndex(self,sheetIndex):
 72         # 根据sheet的索引号获取该sheet对象
 73         try:
 74             sheetname = self.workbook.get_sheet_names()[sheetIndex]
 75         except Exception as e:
 76             raise e
 77         sheet = self.workbook.get_sheet_by_name(sheetname)
 78         return sheet
 79 
 80     def getRowsNumber(self,sheet):
 81         # 获取sheet中有数据区域的结束行号
 82         return sheet.max_row
 83 
 84     def getColsNumber(self,sheet):
 85         # 获取sheet中有数据区域的结束列号
 86         return sheet.max_column
 87 
 88     def getStartRowNumber(self,sheet):
 89         # 获取sheet中有数据区域的开始行号
 90         return sheet.min_row
 91 
 92     def getStartColNumber(self,sheet):
 93         # 获取sheet中有数据区域开始的列号
 94         return sheet.min_column
 95 
 96     def detele_rows(self,sheet,startRow,N):
 97         # 删除行,删除startRow开始以后的N行
 98         return sheet.delete_rows(startRow,N)
 99 
100     def getRow(self,sheet,rowNo):
101         # 获取sheet中某一行,返回的是这一行所有的数据内容组成tuple
102         # 下标从1开始,sheet,row[1]表示第一行
103         dataList = []
104         rows = self.getRowsNumber(sheet)
105         cols = self.getColsNumber(sheet)
106         if rowNo - 1 >= rows:
107             print('row out of max range! Please Check excel row number!')
108         try:
109             for line in sheet.rows:
110                 tmpList = []
111                 for i in range(cols):
112                     tmpList.append(line[i].value)
113                 dataList.append(tmpList)
114             return dataList[rowNo - 1]
115         except Exception as e:
116             raise e
117 
118     def getColumn(self,sheet,colNo):
119         # 获取sheet中某一列,返回的是这一列所有的数据内容组成tuple
120         # 下标从1开始,sheet,row[1]表示第一列
121         dataList = []
122         rows = self.getRowsNumber(sheet)
123         cols = self.getColsNumber(sheet)
124         if colNo - 1 >= cols:
125             print('column out of max range! Please Check excel column number!')
126         try:
127             for line in sheet.columns:
128                 tmpList = []
129                 for i in range(1,rows):#过滤掉第一列的标题数据
130                     tmpList.append(line[i].value)
131                 dataList.append(tmpList)
132             return tuple(dataList[colNo - 1])
133         except Exception as e:
134             raise e
135 
136     def getCellOfValue(self,sheet,coordinate = None,rowNo = None,colsNo = None):
137         # 根据单元格所在位置索引获取该单元格中的值,下标从1开始
138         # sheet.cell(row  = 1,column = 1).value,表示Excel中第一行第一列的值
139         if coordinate != None:
140             try:
141                 return sheet.cell(coordinate = coordinate).value
142             except Exception as e:
143                 raise e
144         elif coordinate is None and rowNo is not None and colsNo is not None:
145             try:
146                 return sheet.cell(row = rowNo,column = colsNo).value
147             except Exception as e:
148                 raise e
149         else:
150             raise Exception("Insufficient Coordinates of cell")
151 
152     def getCellOfObject(self,sheet,coordinate = None,rowNo = None,colsNo = None):
153         # 获取某个单元格对的对象,可以根据单元格所在位置的数字索引
154         # 也可以直接根据excel中单元格的编码及坐标
155         # 如getCellOfObject(sheet,coordinate = 'A1',) or
156         # getCellOfObject(sheet,rowNo = 1,colsNo = 2)
157         if coordinate != None:
158             try:
159                 return sheet.cell(coordinate = coordinate)
160             except Exception as e:
161                 raise e
162 
163         elif coordinate == None and rowNo is not None and colsNo is not None:
164             try:
165                 return sheet.cell(row = rowNo,column = colsNo)
166             except Exception as e:
167                 raise e
168         else:
169             raise Exception('Insufficient Coordinates of cell')
170 
171     def writeCell(self,sheet,content,coordinate = None,rowNo = None,colsNo = None,colorStyle=None,fontStyle=None):
172         # 根据单元格在Excel中的编码坐标或者数字索引坐标向单元格中写入数据
173         # 下标从1开始,参数style表示字体的颜色的名字,比如red,green
174         if coordinate is not None:
175             try:
176                 sheet.cell(coordinate = coordinate).value = content
177                 if colorStyle is not None:
178                     sheet.cell(coordinate = coordinate).font = Font(color = self.RGBDict[colorStyle])
179                 if fontStyle is not None:
180                     sheet.cell(coordinate = coordinate).font = Font(name = self.fontStyleDict[fontStyle])
181                 self.workbook.save(self.excelFile)
182             except Exception as e:
183                 raise e
184         elif coordinate == None and rowNo is not None and colsNo is not None:
185             try:
186                 sheet.cell(row = rowNo,column = colsNo).value = content
187                 if colorStyle:
188                     sheet.cell(row = rowNo,column = colsNo).font = Font(color = self.RGBDict[colorStyle])
189                 if fontStyle:
190                     sheet.cell(coordinate=coordinate).font = Font(name=self.fontStyleDict[fontStyle])
191                 self.workbook.save(self.excelFile)
192             except PermissionError as e:
193                 print("file is open or Please check file permissions!")
194             except Exception as e:
195                 raise Exception('Insufficient Coordinates of cell')
196         else:
197             raise Exception('Insufficient Coordinates of cell')
198 
199     def writeCellCurrentTime(self,sheet,coordinate = None,rowNo = None,colsNo = None):
200         # 写入当前时间,下标从1开始
201         now = int(time.time()) #显示未时间戳
202         timeArray = time.localtime(now)
203         currentTime = time.strftime("%Y-%m-%d %H:%M:%S",timeArray)
204         if coordinate is not None:
205             try:
206                 sheet.cell(coordinate = coordinate).value = currentTime
207                 self.workbook.save(self.excelFile)
208             except Exception as e:
209                 raise e
210         elif coordinate == None and rowNo is not None and colsNo is not None:
211             try:
212                 sheet.cell(row = rowNo,column = colsNo).value = currentTime
213                 self.workbook.save(self.excelFile)
214             except PermissionError as e:
215                 print("file is open or Please check file permissions!")
216             except Exception as e:
217                 raise e
218         else:
219             raise Exception('Insufficient Coordinates of cell')
220 
221     def writeCelltmp(self, sheet, content, coordinate=None, rowNo=None, colsNo=None, colorStyle=None,fontStyle=None):
222         # 只写入数据,不保存数据,保存数据统一调用saveTable()方法
223         # 根据单元格在Excel中的编码坐标或者数字索引坐标向单元格中写入数据
224         # 下标从1开始,参数style表示字体的颜色的名字,比如red,green
225         if coordinate is not None:
226             try:
227                 sheet.cell(coordinate=coordinate).value = content
228                 if colorStyle is not None:
229                     sheet.cell(coordinate=coordinate).font = Font(color=self.RGBDict[colorStyle])
230                 if fontStyle is not None:
231                     sheet.cell(coordinate=coordinate).font = Font(name=self.fontStyleDict[fontStyle])
232             except Exception as e:
233                 raise e
234         elif coordinate == None and rowNo is not None and colsNo is not None:
235             try:
236                 sheet.cell(row=rowNo, column=colsNo).value = content
237                 if colorStyle:
238                     sheet.cell(row=rowNo, column=colsNo).font = Font(color=self.RGBDict[colorStyle])
239                 if fontStyle:
240                     sheet.cell(row=rowNo, column=colsNo).font = Font(name=self.fontStyleDict[fontStyle])
241             except PermissionError as e:
242                 print("file is open or Please check file permissions!")
243             except Exception as e:
244                 raise Exception('Insufficient Coordinates of cell')
245         else:
246             raise Exception('Insufficient Coordinates of cell')
247 
248     def saveTable(self):
249         # 保存表格
250         self.workbook.save(self.excelFile)
251 
252 
253 
254 if __name__ == "__main__":
255     pass

猜你喜欢

转载自www.cnblogs.com/tython/p/12716810.html