Pyexcel изменяет значение ячейки

Итак, я использовал openpyxl для всех моих проектов Excel, но теперь я должен работать с .xls файлы, поэтому я был вынужден изменить библиотеку. Я выбрал pyexcel Потому что это казалось довольно простым и хорошо задокументированным. Так что я прошел через ад с созданием сотен переменных, потому что нет .index собственность или что-то.

Теперь я хочу прочитать столбец в правильном файле, например, столбец "Количество" и получить значение fe 12 из этого, затем проверьте тот же столбец в другом файле, и если это не 12, то сделайте это 12. Легко. Но я не могу найти слова об изменении значения одной ячейки в их документации. Вы можете мне помочь?

2 ответа

Решение

Я не понял, разве это не самое простое?

column_name = 'Quantity'
value_to_find = 12
sheets1 = pe.get_book(file_name='Sheet1.xls')
sheets1[0].name_columns_by_row(0)
row = sheets1[0].column[column_name].index(value_to_find)

sheets2 = pe.get_book(file_name='Sheet2.xls')
sheets2[0].name_columns_by_row(0)
if sheets2[0][row, column_name] != value_to_find:
    sheets2[0][row, column_name] = value_to_find

РЕДАКТИРОВАТЬ

Странно, вы можете назначать значения только при использовании индексации cell_address, должна быть какая-то ошибка. Добавьте эту функцию:

def index_to_letter(n):
    alphabet = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
    result = []
    while (n > 26):
        result.insert(0, alphabet[(n % 26)])
        n = n // 26
    result.insert(0, alphabet[n])
    return ''.join(result)

И измените последнюю часть:

sheets2[0].name_columns_by_row(0)
col_letter = index_to_letter(sheets2[0].colnames.index(column_name))
cel_address = col_letter+str(row+1)
if sheets2[0][cel_address] != value_to_find:
    sheets2[0][cel_address] = value_to_find

РЕДАКТИРОВАТЬ 2

Похоже, что вы не можете назначить только при непосредственном использовании имени столбца, поэтому можно найти индекс столбца:

sheets2[0].name_columns_by_row(0)
col_index = sheets2[0].colnames.index(column_name)
if sheets2[0][row, col_index] != value_to_find:
    sheets2[0][row, col_index] = value_to_find

Excel использует 2 набора ссылок на ячейку. Имя ячейки ("А1") и вектор ячейки (строка, столбец).

В документации PyExcel говорится, что он поддерживает оба метода. Метод caiohamamura пытается построить имя ячейки - вам не нужно, если ячейки находятся в одном и том же месте в каждом файле, вы можете использовать вектор.

Если у вас есть ячейка, назначить значение одной ячейке просто - вы присваиваете значение. Пример:

import pyexcel
sheet = pyexcel.get_sheet(file_name="Units.xls")
print(sheet[3,2]) # this gives me "cloud, underwater"
sheet[3,2] = "cloud, underwater, special"
sheet.save_as("Units1.xls")

Обратите внимание, что все, что мне нужно было сделать, это "sheet[3,2] =".
Это не указано явно, но на это намекает документация pyexcel, где говорится, что для обновления всего столбца вы делаете:

sheet.column ["Column 2"] = [11, 12, 13]

ie replace a list by assigning a new list. Same logic applies to a single cell - just assign a new value.

Bonus - the [Row, column] method gets around cell locations in columns greater than 26 (ie 'AA' and above).

Caveat - make sure in your comparison you are comparing like-for-like ie int is understood to be an int and not a str. Python should implicitly converted but in some circumstances it may not - especially if you are using python 2 and Unicode is involved.

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