Excel操作(写入行与列、指定 要操作的sheet、获取最大的列,获取最大的行、获取其中一行,获取其中一列、获取一行中的值、获取一行、获取所有 Excel中sheetname的名字)

from openpyxl import *
import os
from openpyxl.styles import NamedStyle,colors,Font,Border,Side

test=os.path.abspath(__file__)
print(test)

file_path='126邮箱联系人.xlsx'

#定义一个Excel的变量
class ExcelUtil():
    def __init__(self,file_path:object)->object:
        self.file_path=file_path
        if not os.path.exists(file_path) or not (".xls" in file_path):
            print("指定的excel文件路径%s不存在,或者文件类型不是xlsx" % file_path)
        else:
            self.wb=load_workbook(file_path)
            print("加载excel%s文件成功"%file_path)
    def get_sheet_names(self):
        return self.wb.sheetnames
            
    def set_sheet_by_name(self,sheet_name):
        if not sheet_name in self.get_sheet_names():
            print("设定的sheet:%s不存在,请重新 设定!"%sheet_name)
            return
        self.sheet=self.wb[sheet_name]
        return self.sheet
    
    def get_a_line(self,row_no):
        rows=[]
        for row in self.sheet.iter_rows():
            rows.append(row)
        if not isinstance(row_no,int):
            print("输入的选号%s不是一个整数"%row_no)
        if not 0<=row_no<len(rows):
            print("输入的行号%s超过行数范围" % row_no)
            return None
        return rows[row_no]
        #实例11:获取行的值(这里是第1行的值)
        
    def get_a_line_values(self,row_no):
        values=[]
        for cell in self.get_a_line(row_no):
            values.append(cell.value)
        return values
        
    def get_a_column(self,col_no):
        cols=[]#存储一下列对象
        for col in self.sheet.iter_cols():
            cols.append(col)#遍历所有的列
        if not isinstance(col_no, int):
            print("输入的选号%s不是一个整数" % col_no)
        if not 0 <= col_no < len(cols):
            print("输入的行号%s超过行数范围" % col_no)
            return None
        return cols[col_no]
    
    #获取最大的行是多少       
    def get_max_row_no(self):
        return self.sheet.max_row
        

    #获取最大列的是多少
    def get_max_col_no(self):
        return self.sheet.max_column
        
    def create_new_sheet(self,sheet_name):
        if sheet_name in self.get_sheet_names():
            return
        self.wb.create_sheet(sheet_name)

        
        
       # 实例13写入行与列
    def write_cell_value(self,row_no,col_no,value,colour=None):
        if (not isinstance(row_no,int)) or (not isinstance(col_no,int)):
            print("输入的行号%s或者列号%s有误"%(row_no,col_no))
            return None
        if "red" in colour:
            self.sheet.cell(row=row_no+1,column=col_no+1).font=Font(color=colors.RED)
        elif "green" in colour:
            self.sheet.cell(row=row_no+1,column=col_no+1).font=Font(color=colors.GREEN)
        else:
            self.sheet.cell(row=row_no+1,column=col_no+1).font=Font(color=colors.BLACK)
        bd=Side(style="thin",color="000000")
        #这行代码代表把整个要写入到单元格的信息边框设置为黑色
        self.sheet.cell(row=row_no+1,column=col_no+1).border=Border(left=bd,right=bd,top=bd,bottom=bd)
        # 把值写入到对应的cell里面
        self.sheet.cell(row=row_no+1,column=col_no+1).value=value
        
        
    def save(self):
        return self.wb.save(self.file_path)
            
if __name__=="__main__":
    ExcelPath=ExcelUtil(file_path)
    print(ExcelPath.set_sheet_by_name("联系人1"))
    # print(ExcelPath.get_a_line(2))   
        # :\pythonExcise\0511Excel+other.py
        # 加载excel126邮箱联系人.xlsx文件成功
        # <Worksheet "联系人1">
        # (<Cell '联系人1'.A3>, <Cell '联系人1'.B3>, <Cell '联系人1'.C3>, <Cell '联系人1'.D3>, <Cell '联系人1'.E3>, <Cell '联系人1'.F3>, <Cell '联系人1'.G3>, <Cell '联系人1'.H3>)
    # print(ExcelPath.get_a_line_values(2))
        # <Worksheet "联系人1">
        # (<Cell '联系人1'.A2>, <Cell '联系人1'.B2>, <Cell '联系人1'.C2>, <Cell '联系人1'.D2>, <Cell '联系人1'.E2>, <Cell '联系人1'.F2>, <Cell '联系人1'.G2>, <Cell '联系人1'.H2>)
        # [2, '访问126首页', 'visit', None, 'http://mail.126.com', 'y', None, None]
    # print(ExcelPath.get_a_column(5))
    print(ExcelPath.get_cell_values(1,1))
        # # E:\pythonExcise\0511Excel+other.py
        # # 加载excel126邮箱联系人.xlsx文件成功
        # # <Worksheet "联系人1">
        # # 打开浏览器
    #指定要写入的sheet,写入时一定要执行保存Excel中对应的路径
    print(ExcelPath.create_new_sheet('0511zsq_test'))
    print(ExcelPath.set_sheet_by_name("0511zsq_test"))
    print(ExcelPath.write_cell_value(1,1,"晚上好!","Green"))
        # # E:\pythonExcise>python 0511Excel+other.py
        # # E:\pythonExcise\0511Excel+other.py
        # # 加载excel126邮箱联系人.xlsx文件成功
        # # <Worksheet "联系人1">
        # # 打开浏览器
        # # None
        # # <Worksheet "0511zsq_test">
        # # None
    ExcelPath.save()

 

posted @ 2020-05-12 01:20  进阶的淑琴  阅读(633)  评论(0)    收藏  举报