修复xlrd在读取xls中金额时的问题

This commit is contained in:
faker
2022-12-15 16:23:45 +08:00
parent e839992060
commit abe646a87e

View File

@@ -2,6 +2,7 @@ import xlrd
import openpyxl
from xlutils.copy import copy
import os
from decimal import Decimal
class XLSHelper:
def __init__(self, fpath=None):
@@ -42,14 +43,35 @@ class XLSHelper:
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.html
def _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.nrows
col_count = self.read_sheet.ncols
rows_data = []
for i in range(row_count):
row_data = self.read_sheet.row_values(i)
for row in range(row_count):
row_data = []
for col in range(col_count):
cell = self.read_sheet.cell(row, col)
value = cell.value
ctype = 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_data
def write_cell_value(self, row, col, value):
if not self.write_sheet: