python 封装操作excel模块

封装常用的操作excel功能模块

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import xlrd
import xlwt
from xlutils.copy import copy


class OperationExcel:
    """操作excel"""

    def __init__(self, file_path=None, sheet_name=None):
        if file_path:
            self.file_path = file_path
            self.sheet_name = sheet_name
        else:
            self.file_path = "E:\\PyProject\\Hardware_Devices_Interface\\case1.xls"
            self.sheet_name = 'Sheet1'
        self.data = self.get_data()

    def get_data(self):
        """
        获取sheets的内容
        :return:
        """
        data = xlrd.open_workbook(self.file_path)
        table = data.sheet_by_name(self.sheet_name)
        return table

    def get_max_rows(self):
        """
        获取单元格行数
        :return:
        """
        return self.data.nrows

    def get_max_cols(self):
        """
        获取单元格列数
        :return:
        """
        return self.data.ncols

    def get_cell_value(self, row, col):
        """
        获取单元格数据
        :param row::param col::return:
        """
        return self.data.cell_value(row, col)

    def get_cell_type(self, row, col):
        """
        获取单元格数据的类型
        :param row::param col::return:
        """
        # 0:空内容  1:字符集  2:数字  3:日期  4:布尔  5:错误
        return self.data.cell_type(row, col)

    def get_row_value(self, row):
        """
        获取某一行的内容
        :param row:行号
        :return:
        """
        return self.data.row_values(row)

    def get_col_data(self, col):
        """
        获取某一列的内容
        :param col:列号
        :return:
        """
        return self.data.col_values(col)

    def write_value(self, row, col, value):
        """
        回写数据到excel
        :param row::param col::param value::return:
        """
        read_data = xlrd.open_workbook(self.file_path, formatting_info=True)
        new_data = copy(read_data)  # 将xlrd的对象转化为xlwt的对象
        table = new_data.get_sheet(self.sheet_name)
        table.write(row, col, value, self.set_style())
        new_data.save(self.file_path)

    @staticmethod
    def set_style(name='宋体', height=220, bold=False):
        style = xlwt.XFStyle()  # 初始化样式

        font = xlwt.Font()  # 为样式创建字体
        font.name = name  # 定义具体的字体
        font.bold = bold  # 定义是否加粗
        font.color = 'black'  # 黑色
        # font.color_index = 4  # 定义字体颜色
        font.height = height  # 定义字体大小  220就是11号字体,大概就是11*20得来的吧
        style.font = font  # 最终把自定义的字体,定义到风格里面

        alignment = xlwt.Alignment()  # 设置字体在单元格的位置
        alignment.horz = xlwt.Alignment.HORZ_CENTER  # 水平方向 居中:HORZ_CENTER  左对齐:HORZ_LEFT  右对齐:HORZ_RIGHT
        alignment.vert = xlwt.Alignment.VERT_CENTER  # 垂直方向 居中:VERT_CENTER  顶部对齐:VERT_TOP  底部对齐:VERT_BOTTOM
        style.alignment = alignment

        border = xlwt.Borders()  # 给单元格加框线
        border.left = xlwt.Borders.THIN  # 左
        border.top = xlwt.Borders.THIN  # 上
        border.right = xlwt.Borders.THIN  # 右
        border.bottom = xlwt.Borders.THIN  # 下
        border.left_colour = 0x40  # 设置框线颜色,0x40是黑色
        border.right_colour = 0x40
        border.top_colour = 0x40
        border.bottom_colour = 0x40
        style.borders = border

        return style

if __name__ == '__main__':
    opera = OperationExcel(file_path='E:\\PyProject\\case1.xls', sheet_name='Sheet1')
    opera.get_data()
    opera.get_cell_value(1, 1)
    opera.write_value(3, 1, 'ceshi样式')
    opera.get_cell_type(2, 0)
    print(opera.get_max_rows())
    print(opera.get_cell_value(1, 1))

你可能感兴趣的:(python,excel)