“ wb”表中没有A2数据,即“客户代码”中的数据,因此请报告此错误。
我正在处理XLSX表,分析数据并根据示例重新分配存储的数据。根据对示例表的分析,现在处理的表没有示例数据。在这种情况下,我不处理它们,而仅存储现有数据。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import openpyxl
wb = openpyxl.load_workbook('康之源药业.xlsx')
s1 = wb.active
def getdata(filename):
data = []
for col in s1.columns:
'''取出每一列的值'''
line = [cell.value for cell in col if cell.value != None]
data.append(line)
return data
def cachedata(data):
'''数据储存'''
for i in data:
'''为空的列表不处理'''
if len(i) != 0:
#data.remove(i)
if i[0] == '销售时间':
a0 = i
if i[0] == '生产厂家':
a1 = i
if i[0] == '客户代码':
a2 = i
if i[0] == '客户名称':
a3 = i
if i[0] == '产品代码':
a4 = i
if i[0] == '产品名称':
a5 = i
if i[0] == '产品规格':
a6 = i
if i[0] == '单位':
a7 = i
if i[0] == '批号':
a8 = i
if i[0] == '数量':
a9 = i
if i[0] == '含税单价':
a10 = i
if i[0] == '商品名称':
a11 = i
if i[0] == '不含税单价':
a12 = i
if i[0] == '含税金额':
a13 = i
if i[0] == '不含税金额':
a14 = i
if i[0] == '出货类型':
a15 = i
if i[0] == '客户城市':
a16 = i
if i[0] == '客户地址':
a17 = i
if i[0] == '经销商发货单号':
a18 = i
if i[0] == '出货仓库':
a19 = i
if i[0] == '购进单位编码':
a20 = i
if i[0] == '一级商编码':
a21 = i
if i[0] == '一级商名称':
a22 = i
return a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22
if __name__ == '__main__':
data = getdata(wb)
cachedata = cachedata(data)
a2 = cachedata[2]
print(a2)
错误消息:
Traceback (most recent call last):
File "C:\Users\Yang\Desktop\3.py", line 107, in <module>
cachedata = cachedata(data)
File "C:\Users\Yang\Desktop\3.py", line 76, in cachedata
return a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22
UnboundLocalError: local variable 'a2' referenced before assignment
但是当我添加a2
数据时,代码就起作用了。
答案 0 :(得分:0)
尝试为cachedata
中的变量添加默认值,以使它们仍然存在,无论是否为其分配了值:
def cachedata(data):
a0 = a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 = a10 = a11 = a12 = a13 = a14 = \
a15 = a16 = a17 = a18 = a19 = a20 = a21 = a22 = []
'''数据储存'''
for i in data:
'''为空的列表不处理'''
if len(i) != 0:
#data.remove(i)
if i[0] == '销售时间':
a0 = i
if i[0] == '生产厂家':
a1 = i
if i[0] == '客户代码':
a2 = i
if i[0] == '客户名称':
a3 = i
if i[0] == '产品代码':
a4 = i
if i[0] == '产品名称':
a5 = i
if i[0] == '产品规格':
a6 = i
if i[0] == '单位':
a7 = i
if i[0] == '批号':
a8 = i
if i[0] == '数量':
a9 = i
if i[0] == '含税单价':
a10 = i
if i[0] == '商品名称':
a11 = i
if i[0] == '不含税单价':
a12 = i
if i[0] == '含税金额':
a13 = i
if i[0] == '不含税金额':
a14 = i
if i[0] == '出货类型':
a15 = i
if i[0] == '客户城市':
a16 = i
if i[0] == '客户地址':
a17 = i
if i[0] == '经销商发货单号':
a18 = i
if i[0] == '出货仓库':
a19 = i
if i[0] == '购进单位编码':
a20 = i
if i[0] == '一级商编码':
a21 = i
if i[0] == '一级商名称':
a22 = i
return a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22
答案 1 :(得分:0)
我推荐这种方式:
def cachedata(data):
'''数据储存'''
for i in data:
'''为空的列表不处理'''
if len(i) != 0:
#data.remove(i)
if i[0] == '销售时间':
a0 = i
if i[0] == '生产厂家':
a1 = i
if i[0] == '客户代码':
a2 = i
if i[0] == '客户名称':
a3 = i
if i[0] == '产品代码':
a4 = i
if i[0] == '产品名称':
a5 = i
if i[0] == '产品规格':
a6 = i
if i[0] == '单位':
a7 = i
if i[0] == '批号':
a8 = i
if i[0] == '数量':
a9 = i
if i[0] == '含税单价':
a10 = i
if i[0] == '商品名称':
a11 = i
if i[0] == '不含税单价':
a12 = i
if i[0] == '含税金额':
a13 = i
if i[0] == '不含税金额':
a14 = i
if i[0] == '出货类型':
a15 = i
if i[0] == '客户城市':
a16 = i
if i[0] == '客户地址':
a17 = i
if i[0] == '经销商发货单号':
a18 = i
if i[0] == '出货仓库':
a19 = i
if i[0] == '购进单位编码':
a20 = i
if i[0] == '一级商编码':
a21 = i
if i[0] == '一级商名称':
a22 = i
local_ref = locals()
return tuple(local_ref.get(a + str(i), []) for i in range(23))