Chcę móc odczytać plik programu Excel w języku Python, pozostawić skrypt Python uruchomiony, robiąc coś innego po zakończeniu odczytu, i móc edytować plik Excel w innym w międzyczasie. Używam Pythona 2.7 i Openpyxl.Openpyxl nie zamyka skoroszytu programu Excel w trybie tylko do odczytu
Obecnie wygląda następująco:
from openpyxl import load_workbook
def get_excel_data():
OESwb = load_workbook(filename = OESconfigFile, data_only=True,
read_only=True)
ws = OESwb.get_sheet_by_name('MC01')
aValue = ws['A1'].value
return aValue
val = get_excel_data()
Po uruchomieniu funkcji, plik Excel jest nadal zamknięte dla dostępu z innych procesów (to daje błąd „«filename»jest aktualnie w użyciu Spróbuj ponownie później. ") nawet wtedy, gdy nie chcę już czytać tego w Pythonie.
Jak mogę zamknąć plik z mojego skryptu? Próbowałem OESwb.close(), ale daje błąd "" Workbook "obiekt nie ma atrybut" zamknij "". Znalazłem this post, ale wydaje się, że to nie pomaga.
EDYTOWANIE: Wygląda na to, że OESwb.save ("filename.xlsx") działa, ale tylko jeśli read_only = False. Idealnym rozwiązaniem byłoby jednak zamknięcie pliku i pozostanie w trybie tylko do odczytu. Wygląda na to, że jest to błąd z openpyxl, ponieważ powinien zamknąć plik po zakończeniu load_workbook.
próbowałeś 'OESwb.save()'? – Jeremy
To nie jest błąd. W trybie tylko do odczytu plik obsługi musi być otwarty. Wszelkie zmiany w pliku nie zostałyby zauważone przez openpyxl, więc nie ma sensu próbować edytować pliku w Excelu podczas czytania go za pomocą openpyxl. –
Nie rozumiem, dlaczego obsługa plików musi być otwarta w trybie tylko do odczytu? Nie chodzi o to, że chcę przeczytać zmiany w pliku po jego przeczytaniu, chcę odczytać plik jako tylko do odczytu, a następnie móc go edytować, aby inne procesy mogły odczytać zmiany. Niezależnie od tego, zmodyfikowałem swój kod, aby usunąć tylko do odczytu, używać tylko iteratorów i danych, a następnie zapisać plik, aby go zamknąć. Nie przetestowałem jeszcze, czy plik zostanie zamknięty bez zapisania go, jeśli tylko do odczytu nie jest włączony. – wordsforthewise