導入開發包
pip
install
xlrd
==
1.2.0
解析xls文件
# filename 文件路徑
# file_contents 文件上傳解析文件內容
def
parse_xls
(
filename
=
None
,
file_contents
=
None
)
:
result
=
{
"error"
:
{
}
,
"data_list"
:
[
]
,
"model_name"
:
""
}
work_sheet
=
None
try
:
if
filename
:
work_sheet
=
xlrd
.
open_workbook
(
filename
)
elif
file_contents
:
work_sheet
=
xlrd
.
open_workbook
(
filename
=
None
,
file_contents
=
file_contents
)
tb
=
work_sheet
.
sheets
(
)
[
0
]
if
tb
.
nrows
>
RES_LIMIT
:
raise
Exception
(
"當前xls上傳的數據不能超過%d行"
,
RES_LIMIT
)
name
,
datas
=
translate_xlsx_field_2_string
(
work_sheet
)
result
[
'data_list'
]
=
datas
result
[
'model_name'
]
=
RES_MAPPING
.
get
(
name
)
except
Exception
as
e
:
logger
.
exception
(
e
)
result
[
'error'
]
=
str
(
e
)
return
result
解析內容
def
translate_xlsx_field_2_string
(
work_sheet
)
:
rows_data
=
[
]
tb
=
work_sheet
.
sheets
(
)
[
0
]
n_row
=
tb
.
nrows
# 第一條為標題,不要了
for
i
in
range
(
1
,
n_row
)
:
one_row
=
[
]
for
j
in
range
(
0
,
len
(
tb
.
row
(
i
)
)
)
:
if
tb
.
cell
(
i
,
j
)
.
ctype
in
[
2
,
4
]
:
value
=
str
(
tb
.
cell_value
(
i
,
j
)
)
.
strip
(
)
one_row
.
append
(
value
if
value
else
None
)
elif
tb
.
cell
(
i
,
j
)
.
ctype
==
0
:
one_row
.
append
(
None
)
elif
tb
.
cell
(
i
,
j
)
.
ctype
==
3
:
date_v
=
xlrd
.
xldate_as_tuple
(
tb
.
cell_value
(
i
,
j
)
,
work_sheet
.
datemode
)
one_row
.
append
(
datetime
.
datetime
(
*
date_v
)
.
strftime
(
"%Y-%m-%d %H:%M:%S"
)
)
else
:
value
=
tb
.
cell_value
(
i
,
j
)
.
strip
(
)
one_row
.
append
(
value
if
value
else
None
)
# 空行沒數據
if
one_row
.
count
(
None
)
==
len
(
one_row
)
:
continue
rows_data
.
append
(
one_row
)
return
tb
.
name
,
rows_data
例子
## demo01
for
single_xls
in
request
.
FILES
:
rs
=
parse_xls
(
filename
=
None
,
file_contents
=
request
.
FILES
[
single_xls
]
.
read
(
)
)
if
rs
[
'error'
]
:
errors_info
.
append
(
{
"xls_name"
:
request
.
FILES
[
single_xls
]
.
name
,
"error"
:
rs
[
'error'
]
}
)
# 校驗資源在對應的后臺是否存在沖突
data_json
=
rs
[
'data_list'
]
model_name
=
rs
[
'model_name'
]
model_data
[
model_name
]
=
data_json
## demo02
base_dir
=
os
.
path
.
abspath
(
os
.
path
.
join
(
os
.
getcwd
(
)
)
)
xls_path
=
"/"
.
join
(
[
base_dir
,
UPLOAD_PATH
,
str
(
_task_id
)
,
folder_name
,
file_name
]
)
logger
.
info
(
"the xls_path = %s"
,
xls_path
)
# 讀取資源文件
result
=
parse_xls
(
filename
=
xls_path
)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
