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)

Как генерируются входные данные? Это где-то вне вашей досягаемости или вы можете просто предварительно отсортировать это в массивы, чтобы добавить его?

Другие вопросы по тегам