对不起,我打了一堆深奥的代码,但遇到了一个我不知道如何解决的错误。使用OpenPyXL将Excel数据写入Python中的问题
基本上,我想读取电子表格列中的单个单元格,并将其数据写入相应的字典(称为dataSet)。
我创建了一个函数来做到这一点:
def loopCol(col, start_offset, write_list):
'''
Loop through 1 column (col) until it ends. Skip header by start_offset.
Write data to list within DataSet dict
'''
from openpyxl.utils import column_index_from_string
# Create list and capture str of its name
list_string = str(write_list)
print(list_string)
if list_string not in dataSet:
raise KeyError('List name not within DataSet Keys')
write_list = []
# Loop through column, capturing each cell's value
# Use start_offset to skip header cells
for i in range(column_index_from_string(col) + start_offset,
sheet.max_row + 1):
listItem = sheet[col + str(i)].value
print(listItem)
if listItem != None:
if isinstance(listItem, datetime.datetime):
listItem = listItem.strftime('%d/%m/%Y')
write_list.append(listItem)
else:
write_list.append(listItem)
# Write data to dataSet
for list_index in write_list:
dataSet[list_string] = [list_index for list_index in write_list]
loopCol('A', 0, 'dates')
loopCol('B', 0, 'ph')
loopCol('C', 0, 'water_level')
loopCol('D', 0, 'salinity')
loopCol('E', 1, 'conductivity')
loopCol('F', 0, 'tds')
所以从理论上讲,这应该经历的所有单元格在一列中,如果有一个在他们一些值,这个值写在相应的地方本字典:
dataSet = {
'dates': [],
'ph': [],
'water_level': [],
'salinity': [],
'conductivity': [],
'tds': []
}
但是,有一个问题。当所有的说法和完成字典看起来像:
{'ph': [3.4, 2.1, 7], 'salinity': [2.2, 1.2], 'conductivity': [5.3], 'water_level': ['2m', '3m', '1m'], 'tds': [], 'dates': ['Date', '21/01/2016', '28/01/2012', '06/03/2012']}
现在我知道每个列中正好有3个单元格的值。但有些人并没有把它写进字典。 '盐度'只有2个值,'电导率'只有1个,'tds'是空的。这些确实是dataSet字典中的最后一个条目,所以也许这是原因的一部分。但我无法弄清楚逻辑中的错误在哪里。
是否有人可以帮忙吗?我真的很想给我的老板留下深刻印象;)(我不用IT工作,所以任何让人们生活更轻松的电脑魔法都会被惊叹和敬畏)。
如果我没有足够好地解释代码的确切做法,请告诉我,我会尽力澄清。
请加好excel文件示例截图,好想象 – bzimor
好主意。它现在正在运行 –