Оценка индекса соответствия с Openpyxl и Xlwings;формула возвращает, а не значение - PullRequest
1 голос
/ 13 октября 2019

Я ссылался на следующие ссылки, но все еще не могу заставить мой код работать
Python openpyxl data_only = True, возвращая None
Обновить внешние данные Excel с помощью Python
Использование Openpyxl в Python для сопоставления индексов
Я занимаюсь своим проектом небольшими кусочками, так как я новичок в Python и кодировании. В конечном счете, я надеюсь заполнить ячейку случайным числом, а затем использовать индексное совпадение для оценки списка текста и чисел, чтобы идентифицировать текстовую строку, которая соответствует случайному числу. Так что, если пункт 4 в таблице был "Hello World!"если случайное число было 4, то программа вернула бы "Hello World!"

Концептуально я думаю, что могу использовать Data_only = True, но проблема в том, что формула никогда не оценивается, поскольку все вычисления выполняются в Python и не превосходят. Таким образом, он продолжает возвращать формулу, а не значение.

Я попытался переставить приведенный ниже блок кода. Когда он работает, файл просто печатает «= index (B4: B72, match (B1, A4: A72,0))». Я начал пытаться использовать библиотеку win32com, чтобы открыть и закрыть файл, но пока он не работал. Но я также получаю много ошибок, когда пытаюсь манипулировать кодом, чтобы получить желаемый результат. Иногда, если я немедленно перезапускаю код, я получаю сообщение об ошибке, в котором отказано в доступе к файлу или что он доступен только для чтения. Я также заметил, что в диспетчере задач запускается тонна процессов Excel, хотя на самом деле нет открытых файлов.

Мне удалось продвинуться довольно далеко с документами Openpyxl, но я считаю, что документы xlwings действительно трудно понять, поэтому я хотелсообщение ищет помощи.

path= "C:\\Users\\Me\\Documents\\Python\\File.xlsx"

xlapp = win32com.client.DispatchEx("Excel.Application")
wb = xlapp.workbooks.open(path)
wb.RefreshAll()
wb.save(path)
xlapp.Quit()


myworkbook=load_workbook(path , data_only=True)
worksheet=myworkbook['Sheet1']
#print(myworkbook.sheetnames)
mycell=worksheet['B2']
mycell.value="=index(B4:B72,match(B1,A4:A72,0))"
myworkbook.save(path)


print(mycell.value)

Это дает ошибку pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', "We can't save 'File.xlsx' because the file is read-only.\n\nTo keep your changes, you'll need to save the workbook with a new name or in a different location.", 'xlmain11.chm', 0, -2146827284), None)

...