同步操作将从 mktime/python-learn 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
import xlrdimport openpyxlfrom xlutils.copy import copyimport osfrom decimal import Decimalclass XLSHelper:def __init__(self, fpath=None):self.read_fpath = fpathself.read_book = Noneself.read_sheet = Noneself.write_path = fpathself.write_book = Noneself.write_sheet = Nonedef __del__(self):del self.read_bookdel self.read_sheetdel self.write_bookdel self.write_sheetdef load_excel(self, fpath):self.read_fpath = fpathself.read_book = xlrd.open_workbook(self.read_fpath, formatting_info=True)self.write_book = copy(self.read_book)return selfdef load_sheet(self, index):if not self.read_book:raise ValueError("先调用load_excel")self.read_sheet = self.read_book.sheets()[index]self.write_sheet = self.write_book.get_sheet(index)return selfdef get_sheet_count(self):return len(self.read_book.sheets())def set_write_path(self, fpath):self.write_path = fpathreturn selfdef get_cell_value(self, row, column):if not self.read_sheet:raise ValueError('先调用load_sheet')return self.read_sheet.cell_value(row, column)#如果小数位只有1位 则把第二位小数的0删除, etc: 0.10 --> 0.1# thanks to: https://www.cnblogs.com/feifeifeisir/p/15246080.htmldef _remove_exponent(self, num):return num.to_integral() if num == num.to_integral() else num.normalize()def get_rows_values(self):row_count = self.read_sheet.nrowscol_count = self.read_sheet.ncolsrows_data = []for row in range(row_count):row_data = []for col in range(col_count):cell = self.read_sheet.cell(row, col)value = cell.valuectype = cell.ctype# 针对number特殊处理if ctype == xlrd.XL_CELL_NUMBER:# print(type(value), value, str(value))value = str(self._remove_exponent(Decimal(value).quantize(Decimal('.01'), rounding = 'ROUND_HALF_UP')))# print(value)row_data.append(value)rows_data.append(row_data)return rows_data# rows_data = []# for i in range(row_count):# row_data = self.read_sheet.row_values(i)# rows_data.append(row_data)# return rows_datadef write_cell_value(self, row, col, value):if not self.write_sheet:raise ValueError('请先逐次调用load_excel,load_sheet')self.write_sheet.write(row, col, value)self.write_book.save(self.write_path)return selfclass XLSXHelper:def __init__(self, fpath=None):self.read_fpath = fpathself.read_book = Noneself.read_sheet = Noneself.write_fpath = fpathdef __del__(self):del self.read_bookdel self.read_sheetdef load_excel(self, fpath):self.read_fpath = fpathself.read_book = openpyxl.load_workbook(self.read_fpath)return selfdef load_sheet(self, index):if not self.read_book:raise ValueError("先调用load_excel")self.read_sheet = self.read_book.worksheets[index]return selfdef get_sheet_count(self):return len(self.read_book.worksheets)def set_write_path(self, fpath):self.write_fpath = fpathreturn selfdef get_cell_value(self, row, column):if not self.read_sheet:raise ValueError('先调用load_sheet')return self.read_sheet.cell(row=row+1, column=column+1).valuedef get_rows_values(self):rows = [row for row in self.read_sheet.rows]rows_raw = []for row in rows:row_raw = []for cell in row:value = cell.valuerow_raw.append(value)rows_raw.append(row_raw)return rows_rawdef write_cell_value(self, row, col, value):self.read_sheet.cell(row+1, col+1).value = valueself.read_book.save(self.write_fpath)return selfclass ExcelHelper:def __init__(self):self.instance = Nonedef load_excel(self, fpath):"""根据文件格式初始化excel instance"""if not os.path.exists(fpath):raise ValueError('excel文件不存在')if fpath.endswith('.xls'):self.instance = XLSHelper(fpath)elif fpath.endswith('.xlsx'):self.instance = XLSXHelper(fpath)else:raise ValueError('文件格式不正确')self.instance.load_excel(fpath)return selfdef load_sheet(self, index):"""载入sheet"""if not self.instance:raise ValueError('先调用load_excel')self.instance.load_sheet(index)return selfdef get_sheet_count(self):""" 计算表格有多少个sheet"""if not self.instance:raise ValueError('先调用load_excel')return self.instance.get_sheet_count()def set_write_path(self, fpath):""" 设定输出excel文件路径,如果不设置,则追加在读取的excel文件内"""self.instance.set_write_path(fpath)return selfdef get_cell_value(self, row, column):""" 获取某个单元格的值"""if not self.instance:raise ValueError('先调用load_excel')return self.instance.get_cell_value(row, column)def get_rows_values(self):""" 获取整个sheet的内容,格式为二维数据example:[[1, 2, 3],[1, 2, 3],[1, 2, 3],...]"""return self.instance.get_rows_values()def write_cell_value(self, row, col, value):""" 往某个单元格写入内容"""self.instance.write_cell_value(row, col, value)return self
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。