導(dǎo)入開(kāi)發(fā)包
pip
install
xlrd
==
1.2.0
解析xls文件
# filename 文件路徑
# file_contents 文件上傳解析文件內(nèi)容
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
(
"當(dāng)前xls上傳的數(shù)據(jù)不能超過(guò)%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
解析內(nèi)容
def
translate_xlsx_field_2_string
(
work_sheet
)
:
rows_data
=
[
]
tb
=
work_sheet
.
sheets
(
)
[
0
]
n_row
=
tb
.
nrows
# 第一條為標(biāo)題,不要了
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
)
# 空行沒(méi)數(shù)據(jù)
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'
]
}
)
# 校驗(yàn)資源在對(duì)應(yīng)的后臺(tái)是否存在沖突
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
)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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