Openpyxl, добавить значение ключа в столбец, если ключ соответствует ячейке?
У меня есть файл Excel, содержащий:
A1 = название компании B1 = мобильный
так далее
Я создал словарь из некоторых данных, имеющих заголовки столбцов в качестве ключей, сравнивая ячейки с ключами, чтобы проверить, совпадают ли они. При совпадении я хочу сравнить ячейки этого столбца со значением соответствующего ключа. Если значение отсутствует append
в колонку.
for key in dictionary_test.keys():
os.chdir("C:\Python34")
wb = load_workbook("Trying web.xlsx")
ws = wb.active
for row in ws.iter_rows():
for cell in row:
if key == cell.value:
ws.append(dictionary_test)
wb.save("Trying web.xlsx")
Я получаю следующую ошибку:
Трассировка (последний вызов был последним): файл "", строка 8, в файле "C:\Python34\lib\site-packages\openpyxl\worksheet\worksheet.py", строка 692, в файле append col_idx = column_index_from_string(col_idx) "C:\Python34\lib\site-packages\openpyxl\utils__init__. Py", строка 112, в>column_index_from_string повысить ValueError("{0} не является допустимым именем столбца".format(str_col)) ValueError: Контактное лицо является неверное имя столбца
Как мне исправить это?
Структура файла Excel:
A1 = компания
B1 = мобильный
C1 = телефон
D1 = контактное лицо
E1 = Позвоните нам
F1 = адрес
В настоящее время в клетках под ними ничего нет.
1 ответ
Я предполагаю в dictionary_test
Вы пытаетесь что-то вроде этого:
dictionary_test = {
"Company": "Microsoft",
"Mobile": "1234567",
...
}
Библиотека не знает, что первой строкой в вашем листе Excel должны быть имена столбцов. Таким образом, вы пытаетесь распаковать это в цикле, но вы передаете ему полный словарь в строке добавления. Попробуйте вместо этого массив. Вот так:
data = [ "Microsoft", "1234567", ... ]
ws.append(data)
Как генерируются входные данные? Это где-то вне вашей досягаемости или вы можете просто предварительно отсортировать это в массивы, чтобы добавить его?