Sharepoint jest powszechną usługą w której użytkownicy organizacji przechowują pliki. Zautomatyzować pobieranie i wysyłanie plików na Sharepoint można za pomocą języka Python, a bezpośrednio łączyć się z plikiem można za pomocą Power BI 🙂
Pobieranie plików z Sharepoint
Jeśli nie mamy zainstalowanych bibliotek, wykonujemy to teraz:
$pip install Office365-REST-Python-Client
Wczytujemy biblioteki
from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.files.file import File
Podajemy dane do autoryzacji
ctx_auth = AuthenticationContext('https://domena.sharepoint.com/sites/DawidShare')
ctx_auth.acquire_token_for_user('mail', 'hasło)
ctx = ClientContext('https://domena.sharepoint.com/sites/DawidShare', ctx_auth)
Otwieramy plik z lokalizacji Sharepoint i pobieramy jego content
response = File.open_binary(ctx, "/sites/DawidShare/Shared Documents/Skoroszyt.xlsx")
Podajemy lokalną ścieżkę zapisu:
path = "sciezka/nazwa_pliku.xlsx"
Zapisujemy content do pliku
with open(path, "wb") as local_file:
local_file.write(response.content)
Upload plików do Sharepoint
Wczytujemy biblioteki i autoryzujemy dostęp
from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.files.file import File
ctx_auth = AuthenticationContext('https://domena.sharepoint.com/sites/DawidShare')
ctx_auth.acquire_token_for_user('mail', 'haslo')
ctx = ClientContext('https://domena.sharepoint.com/sites/DawidShare', ctx_auth)
Podajemy lokalizację zapisu na Sharepoint:
target_folder = ctx.web.get_folder_by_server_relative_url('/sites/DawidShare/Shared Documents/')
Otwieramy plik lokalny i zapisujemy w sieciowej lokalizacji:
with open(sciezka/nazwa_pliku.xlsx', 'rb') as content_file:
file_content = content_file.read()
target_folder.upload_file('nazwa_pliku.xlsx', file_content).execute_query()
Pobieranie danych z pliku z Sharepoint w Power BI
Z zakładki „Pobierz dane” wybieramy opcję „Internet”

Wpisujemy adres URL

Dalej musimy wybrać sposób w jaki się zalogować. W polu „Wybierz poziom, na którym chcesz zastosować ustawienia” wybieramy naszą konkretną stronę z plikiem, ponieważ możemy nie mieć dostępu do ogólnej wersji strony Sharepoint organizacji. Klikamy „Połącz” i gotowe 🙂
BONUS: tworzenie folderu na Sharepoint z użyciem Python
from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.files.file import File
ctx_auth = AuthenticationContext('https://domena.sharepoint.com/sites/DawidShare')
ctx_auth.acquire_token_for_user('mail', 'haslo')
ctx = ClientContext('https://domena.sharepoint.com/sites/DawidShare', ctx_auth)
def create_folder(dir_name: str):
if dir_name:
result = ctx.web.folders.add(f'Shared Documents/{dir_name}').execute_query()
if result:
relative_url = f'Shared Documents/{dir_name}'
return relative_url
create_folder('nowy_folder')