AutoFramework/Business/Class/ExcelUtils.py

51 lines
1.6 KiB
Python
Raw Normal View History

2022-07-21 08:44:10 +08:00
from Base.Class.Excel import *
def read_view_dict(filename=None, sheet=None,
area='', from_col=0, from_row=0, to_col=0, to_row=0, fields=None,
auto_truncate=False):
view = Excel().open(filename=filename, read_only=True).select(sheet).cellGetView(
area=area, from_col=from_col, from_row=from_row, to_col=to_col, to_row=to_row
)
tabs = []
try:
for i in range(len(view[0])):
try:
2022-08-06 18:53:35 +08:00
if not isinstance(fields[i], (str, tuple, list)):
2022-07-21 08:44:10 +08:00
raise TypeError()
tabs.append(fields[i])
except:
tabs.append('col' + str(i))
except:
pass
if len(tabs) != len(set(tabs)):
raise Exception('字段存在重复项目 | There are duplicates in the field')
data = []
for line in view:
if auto_truncate:
none_number = 0
for value in line:
if value is None:
none_number += 1
if len(line) == none_number:
break
line_dict = {}
for i in range(len(line)):
2022-08-06 18:53:35 +08:00
fiel = tabs[i]
if isinstance(fiel, str):
fiel = [fiel]
for v in fiel:
line_dict[v] = line[i]
2022-07-21 08:44:10 +08:00
data.append(line_dict)
return data
if __name__ == '__main__':
from Base.Class.Json import *
from Base.Class.Yaml import *
print(json_encode(read_view_dict(filename='../../example.xlsx', sheet='表一', area='A2:F530', fields=['id','name','age','city','mark1','mark2'], auto_truncate=True), 4, False))