Bu makalede, Excel verilerini Python’da programlı olarak Google E-Tablolar’a nasıl aktaracağınızı öğreneceksiniz.

Excel Dosyalarını Python'da Google Sayfalarına Aktarın

Excel dosyaları, verileri depolamak ve bunlar üzerinde grafik oluşturma, formül uygulama gibi çeşitli türde işlemleri gerçekleştirmek için yaygın olarak kullanılır. Öte yandan Google E-Tablolar, e-tablolar oluşturmak ve bunları değiştirmek için popüler bir çevrimiçi uygulamadır. Google E-Tablolar ayrıca e-tabloların birden fazla kişiyle gerçek zamanlı olarak paylaşılmasını sağlar. Belirli durumlarda, Excel XLS veya XLSX dosyalarını programlı olarak Google E-Tablolar’a aktarmanız gerekebilir. Bunu başarmak için bu makale, bir Google projesinin nasıl kurulacağına ve Python’da Excel dosyalarından Google E-Tablolar’a nasıl veri aktarılacağına ilişkin eksiksiz bir kılavuz sağlar.

Ön Koşullar - Python’da Excel Verilerini Google E-Tablolara Aktarın

Google Bulut Projesi

Google E-Tablolar ile iletişim kurmak için Google Cloud üzerinde bir proje oluşturmamız ve Google E-Tablolar API’sini etkinleştirmemiz gerekecek. Ayrıca, kodumuzla gerçekleştireceğimiz eylemleri yetkilendirmek için kullanılan kimlik bilgilerini oluşturmamız gerekiyor. Bir Google Cloud projesi oluşturma ve Google E-Tablolar API’sini etkinleştirme hakkındaki yönergeleri okuyabilirsiniz.

Google Cloud projesini oluşturduktan ve Google Sheets API’yi etkinleştirdikten sonra Python uygulamamıza aşağıdaki API’leri yüklemeye geçebiliriz.

Excel Dosyalarını Google E-Tablolara Aktarmak için Python Kitaplıkları

Excel XLS/XLSX dosyalarından Google E-Tablolar’a veri aktarmak için aşağıdaki API’lere ihtiyacımız olacak.

Verileri Excel’den Python’da Google E-Tablolara Aktarın

Aşağıda, bir Excel XLSX dosyasındaki verilerin nasıl okunacağı ve bir Python uygulamasında Google E-Tablolar’a nasıl yazılacağı ile ilgili adım adım kılavuz yer almaktadır.

  1. Yeni bir Python uygulaması oluşturun.

  2. Aspose.Cells ve Google istemci kitaplıklarını projeye kurun.

pip install aspose.cells
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
  1. Google Cloud’da kimlik bilgileri oluşturduktan sonra indirdiğimiz JSON dosyasını projenin dizinine yerleştirin.

  2. Google E-Tablolar’da yeni bir e-tablo oluşturan, varsayılan sayfanın adını ayarlayan ve e-tablonun kimliğini döndüren Createspreadsheet adlı bir yöntem yazın.

def create_spreadsheet(_service, _title, _sheetName):   
    # E-tablo ayrıntıları
    spreadsheetBody = {
        'properties': {
            'title': "{0}".format(_title)
        },
        'sheets': {
            'properties': {
                'title' : "{0}".format(_sheetName)
            }
        }
    }

    # E-tablo oluştur
    spreadsheet = _service.spreadsheets().create(body=spreadsheetBody,
                                                fields='spreadsheetId').execute()
    
    print('Spreadsheet ID: {0}'.format(spreadsheet.get('spreadsheetId')))
    print('Spreadsheet URL: "https://docs.google.com/spreadsheets/d/{0}'.format(spreadsheet.get('spreadsheetId')))
    
    # Web tarayıcısında aç
    webbrowser.open_new_tab("https://docs.google.com/spreadsheets/d/{0}".format(spreadsheet.get('spreadsheetId')))

    return spreadsheet.get('spreadsheetId')
  1. Google e-tablosuna yeni bir sayfa eklemek için addsheet adlı başka bir yöntem yazın.
def add_sheet(_service, _spreadsheetID, _sheetName):
    data = {'requests': [
        {
            'addSheet':{
                'properties':{'title': '{0}'.format(_sheetName)}
            }
        }
    ]}

    # İsteği yürüt
    res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()
  1. Şimdi kimlik bilgilerini (JSON dosyası) kullanarak Google E-Tablolar hizmetini başlatın ve uygulamanın kapsamlarını tanımlayın. kapsamlar parametresi, Google Sayfalarına ve özelliklerine erişim izinlerini belirtmek için kullanılır.
# Bu kapsamları değiştiriyorsanız, token.json dosyasını silin.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

creds = None
# token.json dosyası, kullanıcının erişim ve yenileme belirteçlerini saklar ve
# ilk için yetkilendirme akışı tamamlandığında otomatik olarak oluşturulur
# zaman.
if os.path.exists('token.json'):
    creds = Credentials.from_authorized_user_file('token.json', SCOPES)

# Kullanılabilir (geçerli) kimlik bilgisi yoksa, kullanıcının oturum açmasına izin verin.
if not creds or not creds.valid:
    if creds and creds.expired and creds.refresh_token:
        creds.refresh(Request())
    else:
        flow = InstalledAppFlow.from_client_secrets_file(
            'credentials1.json', SCOPES)
        creds = flow.run_local_server(port=0)
    # Bir sonraki çalıştırma için kimlik bilgilerini kaydedin
    with open('token.json', 'w') as token:
        token.write(creds.to_json())

    service = build('sheets', 'v4', credentials=creds)
  1. Ardından Aspose.Cells’i kullanarak Excel XLS veya XLSX dosyasını yükleyin ve çalışma kitabındaki ilk çalışma sayfasının adını alın.
# Excel çalışma kitabını yükle
wb = Workbook(fileName)

# Çalışma sayfaları koleksiyonunu alın
collection = wb.getWorksheets()
collectionCount = collection.getCount()

# Çalışma kitabını ve ilk sayfanın adını al
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
  1. Google E-Tablolar’da yeni bir e-tablo oluşturmak için createspreadsheet yöntemini çağırın.
# Google E-Tablolar'da e-tablo oluşturun
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
  1. Excel dosyasındaki çalışma sayfaları arasında geçiş yapın. Her yinelemede, çalışma sayfasındaki verileri okuyun ve bir diziye ekleyin.
# Tüm çalışma sayfalarında döngü yapın
for worksheetIndex in range(collectionCount):

    # Dizini kullanarak çalışma sayfasını alın
    worksheet = collection.get(worksheetIndex)

    # Çalışma sayfası aralığını ayarla
    if(worksheetIndex==0):
        sheetRange= "{0}!A:Y".format(firstSheetName)
    else:
        add_sheet(service, spreadsheetID, worksheet.getName())
        sheetRange= "{0}!A:Y".format(worksheet.getName())

    # Satır ve sütun sayısını al
    rows = worksheet.getCells().getMaxDataRow()
    cols = worksheet.getCells().getMaxDataColumn()

    # Çalışma sayfasının verilerini depolamak için liste
    worksheetDatalist = []

    # Satırlarda döngü
   for i in range(rows):
        # Çalışma sayfasındaki her satırı saklamak için liste 
        rowDataList = []

        # Seçilen satırdaki her sütunda döngü
       for j in range(cols):
            cellValue = worksheet.getCells().get(i, j).getValue()
            if( cellValue is not None):
                rowDataList.append(str(cellValue))
            else:
                rowDataList.append("")

        # Çalışma sayfası verilerine ekle
        worksheetDatalist.append(rowDataList)
  1. Excel dosyasındaki her çalışma sayfası için, Google E-Tablolara veri yazmak üzere bir istek oluşturun.
# Değerleri ayarla
body = {
    'values': worksheetDatalist
}

# İsteği yürüt
result = service.spreadsheets().values().update(
    spreadsheetId=spreadsheetID, range=sheetRange,
    valueInputOption='USER_ENTERED', body=body).execute()

# Güncellenen hücrelerin sayısını yazdır    
print('{0} cells updated.'.format(result.get('updatedCells')))

Aşağıda, verileri bir Excel dosyasından Google E-Tablolar’daki bir e-tabloya aktarmanın tam işlevi yer almaktadır.

def export_to_google(fileName):
    # Bu kapsamları değiştiriyorsanız, token.json dosyasını silin.
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

    creds = None
    # token.json dosyası, kullanıcının erişim ve yenileme belirteçlerini saklar ve
    # ilk için yetkilendirme akışı tamamlandığında otomatik olarak oluşturulur
    # zaman.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
    # Kullanılabilir (geçerli) kimlik bilgisi yoksa, kullanıcının oturum açmasına izin verin.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials1.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Bir sonraki çalıştırma için kimlik bilgilerini kaydedin
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('sheets', 'v4', credentials=creds)
        
        # Excel çalışma kitabını yükle
        wb = Workbook(fileName)

        # Çalışma sayfaları koleksiyonunu alın
        collection = wb.getWorksheets()
        collectionCount = collection.getCount()

        # Çalışma kitabını ve ilk sayfanın adını al
        spreadsheetName = wb.getFileName()
        firstSheetName = collection.get(0).getName()

        # Google E-Tablolar'da e-tablo oluşturun
        spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)

        # Çalışma sayfası aralığını ayarlamak için
        sheetRange = None

        # Tüm çalışma sayfalarında döngü yapın
       for worksheetIndex in range(collectionCount):

            # Dizini kullanarak çalışma sayfasını alın
            worksheet = collection.get(worksheetIndex)

            # Çalışma sayfası aralığını ayarla
            if(worksheetIndex==0):
                sheetRange= "{0}!A:Y".format(firstSheetName)
            else:
                add_sheet(service, spreadsheetID, worksheet.getName())
                sheetRange= "{0}!A:Y".format(worksheet.getName())

            # Satır ve sütun sayısını al
            rows = worksheet.getCells().getMaxDataRow()
            cols = worksheet.getCells().getMaxDataColumn()

            # Çalışma sayfasının verilerini depolamak için liste
            worksheetDatalist = []

            # Satırlarda döngü
           for i in range(rows):
                # Çalışma sayfasındaki her satırı saklamak için liste 
                rowDataList = []

                # Seçilen satırdaki her sütunda döngü yapın
               for j in range(cols):
                    cellValue = worksheet.getCells().get(i, j).getValue()
                    if( cellValue is not None):
                        rowDataList.append(str(cellValue))
                    else:
                        rowDataList.append("")

                # Çalışma sayfası verilerine ekle
                worksheetDatalist.append(rowDataList)

            # Değerleri ayarla
            body = {
                'values': worksheetDatalist
            }
            
            # İsteği yürüt
            result = service.spreadsheets().values().update(
                spreadsheetId=spreadsheetID, range=sheetRange,
                valueInputOption='USER_ENTERED', body=body).execute()

            # Güncellenen hücrelerin sayısını yazdır    
            print('{0} cells updated.'.format(result.get('updatedCells')))
    except HttpError as err:
        print(err)

    print("Workbook has been exported to Google Sheets.")

Kaynak Kodunu Tamamlayın

Python’da bir Excel XLSX dosyasını Google E-Tablolar’a dışa aktarmak için eksiksiz kaynak kodu aşağıdadır.

from __future__ import print_function
import jpype
import webbrowser
import os.path
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
import asposecells

jpype.startJVM()
from asposecells.api import Workbook, License


def export_to_google(fileName):
    # Bu kapsamları değiştiriyorsanız, token.json dosyasını silin.
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

    creds = None
    # token.json dosyası, kullanıcının erişim ve yenileme belirteçlerini saklar ve
    # ilk için yetkilendirme akışı tamamlandığında otomatik olarak oluşturulur
    # zaman.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
    # Kullanılabilir (geçerli) kimlik bilgisi yoksa, kullanıcının oturum açmasına izin verin.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials1.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Bir sonraki çalıştırma için kimlik bilgilerini kaydedin
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('sheets', 'v4', credentials=creds)
        
        # Excel çalışma kitabını yükle
        wb = Workbook(fileName)

        # Çalışma sayfaları koleksiyonunu alın
        collection = wb.getWorksheets()
        collectionCount = collection.getCount()

        # Çalışma kitabını ve ilk sayfanın adını al
        spreadsheetName = wb.getFileName()
        firstSheetName = collection.get(0).getName()

        # Google E-Tablolar'da e-tablo oluşturun
        spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)

        # Çalışma sayfası aralığını ayarlamak için
        sheetRange = None

        # Tüm çalışma sayfalarında döngü yapın
       for worksheetIndex in range(collectionCount):

            # Dizini kullanarak çalışma sayfasını alın
            worksheet = collection.get(worksheetIndex)

            # Çalışma sayfası aralığını ayarla
            if(worksheetIndex==0):
                sheetRange= "{0}!A:Y".format(firstSheetName)
            else:
                add_sheet(service, spreadsheetID, worksheet.getName())
                sheetRange= "{0}!A:Y".format(worksheet.getName())

            # Satır ve sütun sayısını al
            rows = worksheet.getCells().getMaxDataRow()
            cols = worksheet.getCells().getMaxDataColumn()

            # Çalışma sayfasının verilerini depolamak için liste
            worksheetDatalist = []

            # Satırlarda döngü
           for i in range(rows):
                # Çalışma sayfasındaki her satırı saklamak için liste 
                rowDataList = []

                # Seçilen satırdaki her sütunda döngü yapın
               for j in range(cols):
                    cellValue = worksheet.getCells().get(i, j).getValue()
                    if( cellValue is not None):
                        rowDataList.append(str(cellValue))
                    else:
                        rowDataList.append("")

                # Çalışma sayfası verilerine ekle
                worksheetDatalist.append(rowDataList)

            # Değerleri ayarla
            body = {
                'values': worksheetDatalist
            }
            
            # İsteği yürüt
            result = service.spreadsheets().values().update(
                spreadsheetId=spreadsheetID, range=sheetRange,
                valueInputOption='USER_ENTERED', body=body).execute()

            # Güncellenen hücrelerin sayısını yazdır    
            print('{0} cells updated.'.format(result.get('updatedCells')))
    except HttpError as err:
        print(err)

    print("Workbook has been exported to Google Sheets.")

def create_spreadsheet(_service, _title, _sheetName):   
    # E-tablo ayrıntıları
    spreadsheetBody = {
        'properties': {
            'title': "{0}".format(_title)
        },
        'sheets': {
            'properties': {
                'title' : "{0}".format(_sheetName)
            }
        }
    }

    # E-tablo oluştur
    spreadsheet = _service.spreadsheets().create(body=spreadsheetBody,
                                                fields='spreadsheetId').execute()
    
    # Web tarayıcısında aç
    webbrowser.open_new_tab("https://docs.google.com/spreadsheets/d/{0}".format(spreadsheet.get('spreadsheetId')))

    return spreadsheet.get('spreadsheetId')

def add_sheet(_service, _spreadsheetID, _sheetName):
    data = {'requests': [
        {
            'addSheet':{
                'properties':{'title': '{0}'.format(_sheetName)}
            }
        }
    ]}

    # İsteği yürüt
    res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()

 # Bir Aspose.Cells icense nesnesi oluşturun
license = License()

# Değerlendirme sınırlamalarından kaçınmak için Aspose.Cells lisansını ayarlayın
license.setLicense("D:\\Licenses\\Conholdate.Total.Product.Family.lic")

export_to_google("Book1.xlsx")

Ücretsiz Aspose.Cells Lisansı Alın

Ücretsiz bir geçici lisans alabilir ve Aspose.Cells for Python’u değerlendirme sınırlamaları olmaksızın kullanabilirsiniz.

Çözüm

Bu makalede, Excel verilerini Python’da Google E-Tablolar’a nasıl aktaracağınızı öğrendiniz. Google Cloud’da proje oluşturmayı, Google Sheets API’yi etkinleştirmeyi, Excel dosyalarını okumayı ve Excel dosyalarından Google Sheets’e veri aktarmayı ele aldık. Aspose.Cells for Python hakkında daha fazlasını keşfetmek için belgeleri ziyaret edebilirsiniz. Ayrıca forumumuz aracılığıyla da sorularınızı sorabilirsiniz.

Ayrıca bakınız