Blog JSystems - uwalniamy wiedzę!

Szukaj

Power Query w Excelu, Power BI i Fabric

Ukryty plik ~$ w folderze psuje łączenie plików Excela w Power Query

W skrócie

  • Gdy ktoś ma otwarty skoroszyt z folderu źródłowego, Excel tworzy obok ukryty plik ~$ z tą samą nazwą. Power Query widzi go na liście plików, a próba odczytania go jako skoroszytu kończy się błędem i zatrzymuje łączenie.
  • Folder.Files zwraca także pliki ukryte, a plik ~$ ma rozszerzenie .xlsx, więc filtr po Extension go nie usunie. Kreator łączenia plików dodaje krok Filtrowane pliki ukryte1, ale zapytania budowane ręcznie go nie mają.
  • Odfiltruj pliki, których nazwa zaczyna się od ~$, albo pliki z atrybutem Hidden i zamykaj pliki źródłowe przed odświeżeniem. Potem sprawdź listę plików w kroku po filtrze.

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.

Jak to wygląda w praktyce

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.

Dlaczego tak się dzieje

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.

Zapytanie Sprzedaz_miesieczna po połączeniu plików z folderu w Power Query z krokiem Filtrowane pliki ukryte1 i kolumną Source.Name
Zapytanie Sprzedaz_miesieczna po połączeniu plików z folderu. Drugi krok na liście Zastosowane kroki to Filtrowane pliki ukryte1, a kolumna Source.Name podaje nazwę pliku dla każdego wiersza.

Jak to rozwiązać krok po kroku

  1. Sprawdź listę plików. W zapytaniu głównym kliknij krok Źródło i przejrzyj kolumnę Name. Pozycja z nazwą zaczynającą się od ~$ to plik blokady otwartego skoroszytu.
  2. Sprawdź, czy na liście Zastosowane kroki jest krok Filtrowane pliki ukryte1. Jeśli go nie ma, dodaj filtr zaraz po kroku Źródło: kliknij strzałkę w nagłówku kolumny Name, wybierz Filtry tekstu, potem Nie zaczyna się od i wpisz ~$. Krok w pasku formuły będzie podobny do = Table.SelectRows(Źródło, each not Text.StartsWith([Name], "~$")). W naszym teście ten filtr zostawił tylko dwa prawdziwe skoroszyty.
  3. Drugi sposób to filtr na atrybut ukrycia, taki sam jak w kroku dodawanym przez kreator: = Table.SelectRows(Źródło, each [Attributes]?[Hidden]? <> true). W teście ten filtr także usunął plik ~$, a zostawił oba skoroszyty.
  4. Nie polegaj na samym filtrze rozszerzenia. Filtr [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.
  5. Zamykaj pliki źródłowe przed odświeżeniem. Po zamknięciu skoroszytu Excel usuwa plik ~$: w naszym teście w folderze zostały wtedy tylko dwa skoroszyty. Plik ~$, który został w folderze na stałe, na przykład skopiowany razem z nim, ma tę samą nazwę i atrybut ukrycia, więc pominie go każdy z filtrów z kroku 2 i 3.

Jak sprawdzić, że zadziałało

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

Baner szkolenia Microsoft Excel - Power Query w JSystems z edytorem Power Query na ekranie laptopa

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

Najczęściej zadawane pytania

Skąd w folderze bierze się plik ~$?
Tworzy go Excel, gdy ktoś otwiera skoroszyt, i usuwa go po zamknięciu. W naszym teście plik ~$Nordvella_sprzedaz_2026-05.xlsx pojawił się po otwarciu skoroszytu, miał 165 bajtów i atrybut ukryty, a po zamknięciu zniknął. Power Query widzi go na liście plików razem z prawdziwymi skoroszytami.
Dlaczego filtr po rozszerzeniu .xlsx nie usuwa pliku ~$?
Plik blokady ma to samo rozszerzenie co skoroszyt, którego dotyczy. W naszym teście kolumna Extension pokazała .xlsx dla wszystkich trzech plików. Odfiltruj go po nazwie zaczynającej się od ~$ albo po atrybucie Hidden.
Czy kreator łączenia plików sam pomija pliki ukryte?
Tak, w zapytaniu głównym dodaje krok Filtrowane pliki ukryte1, który odrzuca pliki z atrybutem Hidden. Kłopot pojawia się wtedy, gdy ten krok usunięto albo gdy zapytanie zbudowano ręcznie bez niego. Sprawdź listę Zastosowane kroki w zapytaniu głównym.
Co oznacza komunikat The process cannot access the file because it is being used by another process?
Power Query próbuje odczytać plik, który w tej chwili trzyma otwarty inny program. W naszym teście tak zakończył się odczyt pliku ~$ otwartego skoroszytu, a komunikat był po angielsku także w polskim Excelu. Odfiltruj pliki ~$ albo zamknij skoroszyt i odśwież zapytanie ponownie.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...