pyefun.excel.excel_xlwr 源代码

"""

.. Hint::
    xlwt 和 wlrd 封装的excel操作

    可能需要

    pip install xlutils
    pip install xlwt
    pip install xlrd


.. literalinclude:: ../../../example/excel_xlwr.py
    :language: python
    :caption: 代码示例
    :linenos:

"""

import xlwt
import xlrd
from xlutils.copy import copy


[文档]class Excel(): def __init__(self): pass
[文档] def 打开Excel(self, 文件路径, 编辑=False, 保留样式=False): pass self.工作簿读操作 = xlrd.open_workbook(filename=文件路径, # logfile=sys.stdout, verbosity=0, # use_mmap=USE_MMAP, file_contents=None, encoding_override=None, formatting_info=保留样式, on_demand=False, ragged_rows=False) self.sheetw = None self.编辑 = 编辑 if self.编辑: self.工作簿写操作 = self.复制为写操作excel()
[文档] def 复制为写操作excel(self): wb = copy(self.工作簿读操作) wb.wb = wb return Excel写工作簿(wb)
[文档] def 取sheet从索引(self, 索引): """ 索引从0开始 """ sh = self.工作簿读操作.sheet_by_index(索引) if self.编辑: self.sheetw = self.工作簿写操作.wb.get_sheet(索引) return ExcelSheet(sh, sheetw=self.sheetw)
[文档] def 取sheet从名称(self, 名称): """ 取sheet名称() """ sh = self.工作簿读操作.sheet_by_name(名称) if self.编辑: self.sheetw = self.工作簿写操作.wb.get_sheet(名称) return ExcelSheet(sheet=sh, sheetw=self.sheetw)
[文档] def 取sheet数量(self): return self.工作簿读操作.nsheets
[文档] def 取sheet名称(self): return self.工作簿读操作.sheet_names()
[文档] def 保存(self, 文件路径): pass self.工作簿写操作.保存(文件路径)
[文档]class ExcelSheet(): def __init__(self, sheet: xlrd.sheet.Sheet = None, sheetw: xlwt.Worksheet = None): pass self.sheet = sheet self.sheetw = sheetw
[文档] def 取对象(self): return self.sheet
[文档] def 取行数(self): return self.sheet.nrows
[文档] def 取列数(self): return self.sheet.ncols
[文档] def 取名称(self): return self.sheet.name
[文档] def 取行所有内容(self, ): return self.sheet.row_values()
[文档] def 取列所有内容(self, ): return self.sheet.col_values()
[文档] def 取内容(self, , ): return self.sheet.cell_value(, )
### 要写出的库支持
[文档] def 置内容(self, , , 内容, 样式=xlwt.Style.default_style): self.sheetw.write(, , 内容, 样式)
[文档] def 置列宽(self, , 宽度): self.sheetw.col().width = 宽度 * 256
[文档] def 置行高(self, , 高度): self.sheetw.row().height_mismatch = True self.sheetw.row().height = 高度 * 20
[文档] def 置图片从文件(self, row, col, filename, x=0, y=0, scale_x=1, scale_y=1): self.sheetw.insert_bitmap(row=row, col=col, filename=filename, x=x, y=y, scale_x=scale_x, scale_y=scale_y)
[文档] def 置图片从数据(self, row, col, data, x=0, y=0, scale_x=1, scale_y=1): self.sheetw.insert_bitmap_data(row=row, col=col, data=data, x=x, y=y, scale_x=scale_x, scale_y=scale_y)
[文档]class Excel写工作簿(): def __init__(self, wb: xlwt.Workbook = xlwt.Workbook()): self.wb = wb
[文档] def 添加sheet(self, 名称): pass sh = self.wb.add_sheet(名称) return ExcelSheet(sheetw=sh)
[文档] def 取sheet从名称(self, 名称): pass sh = self.wb.get_sheet(名称) return ExcelSheet(sheetw=sh)
[文档] def 取sheet从索引(self, 索引): pass sh = self.wb.get_sheet(索引) return ExcelSheet(sheetw=sh)
[文档] def 保存(self, 文件路径): pass self.wb.save(文件路径)
[文档]class Excel字体(xlwt.Font): # self.height = 0x00C8 # 200: this is font with height 10 points # self.italic = False # self.struck_out = False # self.outline = False # self.shadow = False # self.colour_index = 0x7FFF # self.bold = False # self._weight = 0x0190 # 0x02BC gives bold font # self.escapement = self.ESCAPEMENT_NONE # self.underline = self.UNDERLINE_NONE # self.family = self.FAMILY_NONE # self.charset = self.CHARSET_SYS_DEFAULT # self.name = 'Arial' @property def 轮廓(self): return self.outline @轮廓.setter def 轮廓(self, value): self.outline = value @property def 阴影(self): return self.shadow @阴影.setter def 阴影(self, value): self.shadow = value @property def 字体名称(self): return self.name @字体名称.setter def 字体名称(self, value): self.name = value @property def 颜色(self): return self.colour_index @颜色.setter def 颜色(self, value): self.colour_index = value @property def 大小(self): return self.height @大小.setter def 大小(self, value): self.height = 20 * value @property def 下划线(self): return self.underline @下划线.setter def 下划线(self, value): self.underline = value @property def 斜体(self): return self.italic @斜体.setter def 斜体(self, value): self.italic = value @property def 粗体(self): return self.bold @粗体.setter def 粗体(self, value): self.bold = value @property def 删除线(self): return self.struck_out @删除线.setter def 删除线(self, value): self.struck_out = value
[文档]class Excel对齐方式(xlwt.Alignment): # HORZ_GENERAL = 0x00 水平_常规 = 0x00 # HORZ_LEFT = 0x01 水平_左对齐 = 0x01 # HORZ_CENTER = 0x02 水平_居中对齐 = 0x02 # HORZ_RIGHT = 0x03 水平_右对齐 = 0x03 # HORZ_FILLED = 0x04 水平_填满 = 0x04 # HORZ_JUSTIFIED = 0x05 # BIFF4-BIFF8X 水平_两端对齐 = 0x05 # BIFF4-BIFF8X # HORZ_CENTER_ACROSS_SEL = 0x06 # Centred across selection (BIFF4-BIFF8X) 水平_中心选择 = 0x06 # Centred across selection (BIFF4-BIFF8X) # HORZ_DISTRIBUTED = 0x07 # Distributed (BIFF8X) 水平_分散 = 0x07 # Distributed (BIFF8X) # VERT_TOP = 0x00 垂直_顶端对齐 = 0x00 # VERT_CENTER = 0x01 垂直_居中对齐 = 0x01 # VERT_BOTTOM = 0x02 垂直_底端对齐 = 0x02 # VERT_JUSTIFIED = 0x03 # Justified (BIFF5-BIFF8X) 垂直_两端对齐 = 0x03 # Justified (BIFF5-BIFF8X) # VERT_DISTRIBUTED = 0x04 # Distributed (BIFF8X) 垂直_分散 = 0x04 # Distributed (BIFF8X) @property def 水平方向(self): return self.horz @水平方向.setter def 水平方向(self, value): self.horz = value @property def 垂直方向(self): return self.vert @垂直方向.setter def 垂直方向(self, value): self.vert = value @property def 自动换行(self): return self.wrap @自动换行.setter def 自动换行(self, value): if value: self.wrap = 1 else: self.wrap = 0
[文档]class Excel样式(xlwt.XFStyle): pass @property def 字体(self): return self.font @字体.setter def 字体(self, value): self.font = value pass @property def 对齐方式(self): return self.alignment @对齐方式.setter def 对齐方式(self, value): self.alignment = value @property def 边框(self): return self.borders @边框.setter def 边框(self, value): self.borders = value @property def 背景颜色(self): return self.pattern @背景颜色.setter def 背景颜色(self, value): self.pattern = value
[文档]def 打开Excel(文件路径, 编辑=False, 保留样式=False): """ 打开一个xls文件""" excel = Excel() excel.打开Excel(文件路径, 编辑=编辑, 保留样式=保留样式) return excel
[文档]def 创建Excel空工作簿(): """ 创建一个空白的工作簿""" excel = Excel写工作簿() return excel
[文档]def 创建Excel字体( 字体名称="宋体", 轮廓=False, 阴影=False, 颜色=0, 大小=12, 下划线=False, 斜体=False, 粗体=False, 删除线=False, ): 字体 = Excel字体() 字体.轮廓 = 轮廓 字体.阴影 = 阴影 字体.字体名称 = 字体名称 字体.颜色 = 颜色 字体.大小 = 大小 字体.下划线 = 下划线 字体.斜体 = 斜体 字体.粗体 = 粗体 字体.删除线 = 删除线 return 字体
[文档]def 创建Excel对齐方式( 水平方向=Excel对齐方式.水平_居中对齐, 垂直方向=Excel对齐方式.垂直_居中对齐, 自动换行=False ): 对齐方式 = Excel对齐方式() 对齐方式.水平方向 = 水平方向 对齐方式.垂直方向 = 垂直方向 对齐方式.自动换行 = 自动换行 return 对齐方式
[文档]def 创建Excel边框(左边边框=0, 右边边框=0, 顶边边框=0, 底边边框=0, 左边颜色=0x40, 右边颜色=0x40, 顶边颜色=0x40, 底边颜色=0x40, ): """ # 细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7 # 大粗虚线:8,细点划线:9,粗点划线:10,细双点划线:11,粗双点划线:12,斜点划线:13 """ borders = xlwt.Borders() borders.left = 左边边框 borders.right = 右边边框 borders.top = 顶边边框 borders.bottom = 底边边框 borders.left_colour = 左边颜色 borders.right_colour = 右边颜色 borders.top_colour = 顶边颜色 borders.bottom_colour = 底边颜色 return borders
[文档]def 创建Excel背景颜色(颜色索引=None): """ 0=黑色,1=白色,2=红色,3=绿色,4=蓝色,5=黄色,6=品红,7=青色,16=褐红色,17=深绿色,18=深蓝色,19=深黄色,几乎棕色),20=深品红,21=青色,22=浅灰色,23=深灰色 """ pattern = xlwt.Pattern() if 颜色索引 != None: pattern.pattern = xlwt.Pattern.SOLID_PATTERN pattern.pattern_fore_colour = 颜色索引 return pattern
[文档]def 创建Excel保护(单元格锁定=1, 公式隐藏=0): protection = xlwt.Protection() protection.cell_locked = 单元格锁定 protection.formula_hidden = 公式隐藏 return protection
[文档]def 创建Excel样式(字体=创建Excel字体(), 对齐方式=创建Excel对齐方式(), 边框=创建Excel边框(), 背景颜色=创建Excel背景颜色(), 保护=创建Excel保护()): 样式 = Excel样式() 样式.字体 = 字体 样式.对齐方式 = 对齐方式 样式.边框 = 边框 样式.背景颜色 = 背景颜色 样式.protection = 保护 # self.num_format_str = 'General' # self.font = Formatting.Font() # self.alignment = Formatting.Alignment() # self.borders = Formatting.Borders() # self.pattern = Formatting.Pattern() # self.protection = Formatting.Protection() return 样式