47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
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:
|
|
if not isinstance(fields[i], str):
|
|
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)):
|
|
line_dict[tabs[i]] = line[i]
|
|
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))
|