Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power Query w Excelu, Power BI i Fabric
Ukryty plik ~$ w folderze psuje łączenie plików Excela w Power Query
Zapytanie łączące skoroszyty z folderu działało rano, a po południu kończy się błędem, choć nikt nie zmieniał plików. Przyczyną bywa plik ~$ w folderze, który Excel tworzy, gdy ktoś otworzy jeden ze skoroszytów źródłowych. Power Query widzi ten ukryty plik na liście i próbuje go odczytać jak zwykły skoroszyt. Pokazujemy, jak go rozpoznać, jak go odfiltrować i dlaczego filtr po rozszerzeniu nie wystarcza.
Odświeżenie zapytania, które łączy skoroszyty z folderu, kończy się błędem dla całego zapytania, a po zamknięciu skoroszytu przez drugą osobę ponowna próba przechodzi. Odtworzyliśmy to w polskim Excelu: otworzyliśmy jeden z dwóch skoroszytów w folderze i w tym czasie odświeżyliśmy zapytanie z innego pliku. Lista z Folder.Files miała trzy pozycje, w tym ~$Nordvella_sprzedaz_2026-05.xlsx, a odczyt tej pozycji jako skoroszytu dał komunikat, w którym zamiast przykładowej ścieżki zobaczysz swoją:
DataSource.Error: The process cannot access the file 'C:\Sprzedaz_miesieczna\~$Nordvella_sprzedaz_2026-05.xlsx' because it is being used by another process.
Ten komunikat jest po angielsku także w polskim Excelu i oznacza, że plik trzyma otwarty inny proces. Gdy plik ~$ trafi do folderu na stałe, na przykład skopiowany razem z folderem w czasie, gdy skoroszyt był otwarty, odczyt kończy się innym błędem: DataFormat.Error: Nie można załadować tego pliku programu Excel, ponieważ nie można zrozumieć jego formatu. File contains corrupted data. (ang. We were unable to load this Excel file because we couldn't understand its format.). W naszym teście tak zachowała się kopia pliku blokady o rozmiarze 165 bajtów.
Excel przy otwieraniu skoroszytu tworzy w tym samym folderze plik blokady o nazwie zaczynającej się od ~$ i usuwa go po zamknięciu. W naszym teście plik ~$Nordvella_sprzedaz_2026-05.xlsx miał 165 bajtów i atrybut Hidden, a po zamknięciu skoroszytu zniknął. Funkcja Folder.Files zwraca go razem z pozostałymi plikami: w kolumnie Attributes ma pole Hidden równe true, a w kolumnie Extension rozszerzenie .xlsx, takie samo jak prawdziwe skoroszyty.
Kreator łączenia plików dodaje w zapytaniu głównym krok Filtrowane pliki ukryte1, który odrzuca pliki ukryte, w tym tymczasowe. Problem pojawia się w zapytaniach bez tego kroku: zbudowanych ręcznie z Folder.Files i kolumny niestandardowej z Excel.Workbook([Content]), przepisanych z innego pliku albo takich, w których ktoś ten krok usunął. Filtr po kolumnie Extension pliku blokady nie odrzuci, bo jego rozszerzenie to .xlsx. Gdy funkcja czytająca skoroszyt trafi na plik ~$, błąd w tym jednym wierszu zatrzymuje rozwinięcie całej tabeli.

= Table.SelectRows(Źródło, each not Text.StartsWith([Name], "~$")). W naszym teście ten filtr zostawił tylko dwa prawdziwe skoroszyty.= Table.SelectRows(Źródło, each [Attributes]?[Hidden]? <> true). W teście ten filtr także usunął plik ~$, a zostawił oba skoroszyty.[Extension] = ".xlsx" zostawił w teście na liście plik ~$, bo ma on to samo rozszerzenie co skoroszyty. Filtr rozszerzenia łącz z filtrem nazwy albo atrybutu.Otwórz jeden ze skoroszytów źródłowych w Excelu i odśwież zapytanie z innego pliku. Zapytanie ma przejść bez błędu, a w kroku po filtrze nie może być pozycji z ~$ na początku nazwy. W naszym teście przy otwartym skoroszycie lista po filtrze miała dwa pliki, a sam otwarty skoroszyt dał się odczytać bez przeszkód. Sprawdź też kolumnę Source.Name w wyniku: mają w niej być tylko prawdziwe pliki.
Żeby problem nie wrócił, zostaw w zapytaniu krok Filtrowane pliki ukryte1 albo własny filtr nazwy i nie usuwaj go przy porządkowaniu kroków. Gdy budujesz łączenie plików ręcznie albo kopiujesz kod z innego zapytania, dodaj filtr od razu po kroku Źródło. Jeśli folder jest wspólny, ustal, że pliki źródłowe zamyka się przed odświeżeniem raportu.
Wróć do listy: 88 najczęstszych pytań i problemów związanych z Power Query
Szkolenie Microsoft Excel - Power Query --> Dwa dni warsztatów z Excela: pobieranie danych z plików, folderów, SharePointa i baz SQL, ich czyszczenie i łączenie w Power Query, praca w języku M, a na koniec model danych i oparta na nim tabela przestawna. Prowadzi Sebastian Stasiak.
To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5
Komentarze (0)
Brak komentarzy...