zoukankan      html  css  js  c++  java
  • 基础类封装-Excel存取库封装

      1 #!/usr/bin/env python3
      2 # -*- coding: utf-8 -*-
      3 # @Time    : 2019/10/14 23:37
      4 # @Author  : Tang Yiwei
      5 # @Email   : 892398433@qq.com
      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
  • 相关阅读:
    HDU 6143 Killer Names【dp递推】【好题】【思维题】【阅读题】
    HDU 6143 Killer Names【dp递推】【好题】【思维题】【阅读题】
    POJ 3974 Palindrome【manacher】【模板题】【模板】
    POJ 3974 Palindrome【manacher】【模板题】【模板】
    HDU 6127 Hard challenge【计算机几何】【思维题】
    HDU 6127 Hard challenge【计算机几何】【思维题】
    HDU 6129 Just do it【杨辉三角】【思维题】【好题】
    HDU 6129 Just do it【杨辉三角】【思维题】【好题】
    HDU 3037 Saving Beans【Lucas定理】【模板题】【模板】【组合数取余】
    8.Math 对象
  • 原文地址:https://www.cnblogs.com/tython/p/12716810.html
Copyright © 2011-2022 走看看