2015-02-14 20 views
11

używam openpyxl aby odczytać wartość komórki (excel Aktualizacja dodatek-Zestawienie tę kolumnę. )wartość komórki Czytaj Excel, a nie formuły obliczeniowej to -openpyxl

Użyłem data_only = True ale nie odzwierciedlających aktualną komórkę zamiast tego wartość jest przechowywana przy ostatnim odczytaniu arkusza przez program Excel.

wbFile = openpyxl.load_workbook(filename = xxxx,data_only=True) 
wsFile = wbFile[c_sSheet] 

Jak mogę odczytać rzeczywistą wartość komórki?

+0

Nie sądzę, że "openpyxl" jest repliką ogromnego podsystemu ewaluacji formuły Excel, więc myślę, że po prostu nie można go automatycznie przeliczyć wszystkich formuł. Najlepszym rozwiązaniem jest implementacja własnego interpretera 'eval' dla podzbioru tego dużego języka formuł. –

+0

Nie potrzebuję obliczać ani wykonywać forumula. po prostu potrzebuję odczytać wartość komórki. – user3411047

+1

"Wartość komórki" (poza formułą) jest tym, co zapisał program Excel podczas zapisywania arkusza, co sugeruje, że tak naprawdę nie jest to, czego chcesz - chcesz mieć "bieżącą" wartość (nie ma wątpliwości co do wartości w innych komórkach) a to oznacza, że ​​* musisz * przeliczyć formułę na podstawie bieżących wartości innych komórek! –

Odpowiedz

3

Jak mówi @ alex-martelli, openpyxl nie analizuje formuł. Po otwarciu pliku Excel z opcją openpyxl możesz wybrać formuły lub ostatnią obliczoną wartość. Jeśli, jak wskażesz, formuła jest zależna od dodatków, buforowana wartość nigdy nie będzie dokładna. Jako dodatki poza specyfikacją pliku nigdy nie będą obsługiwane. Zamiast tego możesz chcieć spojrzeć na coś takiego, jak xlwings, które może wchodzić w interakcje z środowiskiem wykonawczym Excel.

32
wb = openpyxl.load_workbook(filename, data_only=True) 

Pomocna jest flaga data_only.

+1

Tak. To odpowiada na pytanie. Jeśli chcesz uzyskać dostęp zarówno do równania, jak i do wartości, możesz zakończyć w dwóch instancjach, powiedz 'wb2 = openpyxl.load_workbook (filename)'. Następnie po odczytaniu odpowiedniego indeksu otrzymasz wartość z 'wb' i równania z' wb2'. –

+0

Cześć, próbowałem tego, ale to nie działa dla mnie. Otrzymuję "None" ... – galeej

+0

@galeej prawdopodobnie dlatego, że twoja komórka jest pusta –

Powiązane problemy