Bu makalede, Excel verilerini Python’da programlı olarak Google E-Tablolar’a nasıl aktaracağınızı öğreneceksiniz.
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.
- Python için Aspose.Cells - To read the data from Excel files.
- Google İstemci Kitaplıkları - To create and update spreadsheets on Google Sheets.
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.
Yeni bir Python uygulaması oluşturun.
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
Google Cloud’da kimlik bilgileri oluşturduktan sonra indirdiğimiz JSON dosyasını projenin dizinine yerleştirin.
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')
- 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()
- Ş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)
- 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()
- 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)
- 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)
- 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.