Pada artikel ini, Anda akan belajar cara mengekspor data Excel ke Google Sheets secara terprogram dengan Python.
File Excel banyak digunakan untuk menyimpan data dan melakukan berbagai jenis operasi di dalamnya, seperti membuat bagan, menerapkan rumus. Di sisi lain, Google Sheets adalah aplikasi online populer untuk membuat dan memanipulasi spreadsheet. Google Sheets juga menyediakan pembagian spreadsheet waktu nyata dengan banyak orang. Dalam kasus tertentu, Anda mungkin perlu mengekspor file Excel XLS atau XLSX ke Google Spreadsheet secara terprogram. Untuk mencapainya, artikel ini memberikan panduan lengkap tentang cara menyiapkan proyek Google dan mengekspor data dari file Excel ke Google Sheets dengan Python.
Prasyarat - Ekspor Data Excel ke Google Sheets dengan Python
Proyek Google Cloud
Untuk berkomunikasi dengan Google Sheets, kita harus membuat proyek di Google Cloud dan mengaktifkan Google Sheets API. Selain itu, kita perlu membuat kredensial yang digunakan untuk mengotorisasi tindakan yang akan kita lakukan dengan kode kita. Anda dapat membaca pedoman tentang cara membuat proyek Google Cloud dan mengaktifkan Google Sheets API.
Setelah membuat proyek Google Cloud dan mengaktifkan Google Sheets API, kita dapat melanjutkan untuk menginstal API berikut di aplikasi Python kita.
Perpustakaan Python untuk Mengekspor File Excel ke Google Sheets
Untuk mengekspor data dari file Excel XLS/XLSX ke Google Sheets, kita memerlukan API berikut.
- Aspose.Cells for Python - To read the data from Excel files.
- Pustaka Klien Google - To create and update spreadsheets on Google Sheets.
Ekspor Data dari Excel ke Google Sheets dengan Python
Berikut panduan langkah demi langkah cara membaca data dari file Excel XLSX dan menuliskannya ke Google Sheets di aplikasi Python.
Buat aplikasi Python baru.
Instal Aspose.Cells dan pustaka klien Google di proyek.
pip install aspose.cells
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Tempatkan file JSON (yang telah kita unduh setelah membuat kredensial di Google Cloud) ke dalam direktori proyek.
Tulis metode bernama createpreadsheet yang membuat spreadsheet baru di Google Sheets, menyetel nama sheet default, dan mengembalikan ID spreadsheet.
def create_spreadsheet(_service, _title, _sheetName):
# Detail lembar bentang
spreadsheetBody = {
'properties': {
'title': "{0}".format(_title)
},
'sheets': {
'properties': {
'title' : "{0}".format(_sheetName)
}
}
}
# Buat spreadsheet
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')))
# Buka di browser web
webbrowser.open_new_tab("https://docs.google.com/spreadsheets/d/{0}".format(spreadsheet.get('spreadsheetId')))
return spreadsheet.get('spreadsheetId')
- Tulis metode lain bernama addsheet untuk menambahkan sheet baru di spreadsheet Google.
def add_sheet(_service, _spreadsheetID, _sheetName):
data = {'requests': [
{
'addSheet':{
'properties':{'title': '{0}'.format(_sheetName)}
}
}
]}
# Jalankan permintaan
res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()
- Sekarang, inisialisasi layanan Google Sheets menggunakan kredensial (file JSON) dan tentukan cakupan aplikasi. Parameter scopes digunakan untuk menentukan izin akses ke Google Sheets dan propertinya.
# Jika mengubah cakupan ini, hapus file token.json.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = None
# File token.json menyimpan akses pengguna dan menyegarkan token, dan
# dibuat secara otomatis saat alur otorisasi selesai untuk yang pertama
# waktu.
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# Jika tidak ada kredensial (valid) yang tersedia, biarkan pengguna masuk.
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)
# Simpan kredensial untuk proses selanjutnya
with open('token.json', 'w') as token:
token.write(creds.to_json())
service = build('sheets', 'v4', credentials=creds)
- Kemudian, muat file XLS atau XLSX Excel menggunakan Aspose.Cells dan dapatkan nama lembar kerja pertama di buku kerja.
# Muat buku kerja Excel
wb = Workbook(fileName)
# Dapatkan koleksi lembar kerja
collection = wb.getWorksheets()
collectionCount = collection.getCount()
# Dapatkan buku kerja dan nama lembar pertama
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
- Panggil metode createpreadsheet untuk membuat spreadsheet baru di Google Sheets.
# Buat spreadsheet di Google Sheets
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
- Ulangi lembar kerja di file Excel. Di setiap iterasi, baca data dari lembar kerja dan tambahkan ke array.
# Ulangi semua lembar kerja
for worksheetIndex in range(collectionCount):
# Dapatkan lembar kerja menggunakan indeksnya
worksheet = collection.get(worksheetIndex)
# Tetapkan rentang lembar kerja
if(worksheetIndex==0):
sheetRange= "{0}!A:Y".format(firstSheetName)
else:
add_sheet(service, spreadsheetID, worksheet.getName())
sheetRange= "{0}!A:Y".format(worksheet.getName())
# Dapatkan jumlah baris dan kolom
rows = worksheet.getCells().getMaxDataRow()
cols = worksheet.getCells().getMaxDataColumn()
# Daftar untuk menyimpan data lembar kerja
worksheetDatalist = []
# Ulangi baris
for i in range(rows):
# Daftar untuk menyimpan setiap baris di lembar kerja
rowDataList = []
# Ulangi setiap kolom di baris yang dipilih
for j in range(cols):
cellValue = worksheet.getCells().get(i, j).getValue()
if( cellValue is not None):
rowDataList.append(str(cellValue))
else:
rowDataList.append("")
# Tambahkan ke data lembar kerja
worksheetDatalist.append(rowDataList)
- Untuk setiap lembar kerja di file Excel, buat permintaan untuk menulis data ke Google Sheets.
# Tetapkan nilai
body = {
'values': worksheetDatalist
}
# Jalankan permintaan
result = service.spreadsheets().values().update(
spreadsheetId=spreadsheetID, range=sheetRange,
valueInputOption='USER_ENTERED', body=body).execute()
# Cetak jumlah sel yang diperbarui
print('{0} cells updated.'.format(result.get('updatedCells')))
Berikut ini adalah fungsi lengkap untuk mengekspor data dari file Excel ke spreadsheet di Google Sheets.
def export_to_google(fileName):
# Jika mengubah cakupan ini, hapus file token.json.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = None
# File token.json menyimpan akses pengguna dan menyegarkan token, dan
# dibuat secara otomatis saat alur otorisasi selesai untuk yang pertama
# waktu.
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# Jika tidak ada kredensial (valid) yang tersedia, biarkan pengguna masuk.
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)
# Simpan kredensial untuk proses selanjutnya
with open('token.json', 'w') as token:
token.write(creds.to_json())
try:
service = build('sheets', 'v4', credentials=creds)
# Muat buku kerja Excel
wb = Workbook(fileName)
# Dapatkan koleksi lembar kerja
collection = wb.getWorksheets()
collectionCount = collection.getCount()
# Dapatkan buku kerja dan nama lembar pertama
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
# Buat spreadsheet di Google Sheets
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
# Untuk mengatur rentang lembar kerja
sheetRange = None
# Ulangi semua lembar kerja
for worksheetIndex in range(collectionCount):
# Dapatkan lembar kerja menggunakan indeksnya
worksheet = collection.get(worksheetIndex)
# Tetapkan rentang lembar kerja
if(worksheetIndex==0):
sheetRange= "{0}!A:Y".format(firstSheetName)
else:
add_sheet(service, spreadsheetID, worksheet.getName())
sheetRange= "{0}!A:Y".format(worksheet.getName())
# Dapatkan jumlah baris dan kolom
rows = worksheet.getCells().getMaxDataRow()
cols = worksheet.getCells().getMaxDataColumn()
# Daftar untuk menyimpan data lembar kerja
worksheetDatalist = []
# Ulangi baris
for i in range(rows):
# Daftar untuk menyimpan setiap baris di lembar kerja
rowDataList = []
# Ulangi setiap kolom di baris yang dipilih
for j in range(cols):
cellValue = worksheet.getCells().get(i, j).getValue()
if( cellValue is not None):
rowDataList.append(str(cellValue))
else:
rowDataList.append("")
# Tambahkan ke data lembar kerja
worksheetDatalist.append(rowDataList)
# Tetapkan nilai
body = {
'values': worksheetDatalist
}
# Jalankan permintaan
result = service.spreadsheets().values().update(
spreadsheetId=spreadsheetID, range=sheetRange,
valueInputOption='USER_ENTERED', body=body).execute()
# Cetak jumlah sel yang diperbarui
print('{0} cells updated.'.format(result.get('updatedCells')))
except HttpError as err:
print(err)
print("Workbook has been exported to Google Sheets.")
Kode Sumber Lengkap
Berikut ini adalah kode sumber lengkap untuk mengekspor file Excel XLSX ke Google Sheets dengan Python.
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):
# Jika mengubah cakupan ini, hapus file token.json.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = None
# File token.json menyimpan akses pengguna dan menyegarkan token, dan
# dibuat secara otomatis saat alur otorisasi selesai untuk yang pertama
# waktu.
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# Jika tidak ada kredensial (valid) yang tersedia, biarkan pengguna masuk.
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)
# Simpan kredensial untuk proses berikutnya
with open('token.json', 'w') as token:
token.write(creds.to_json())
try:
service = build('sheets', 'v4', credentials=creds)
# Muat buku kerja Excel
wb = Workbook(fileName)
# Dapatkan koleksi lembar kerja
collection = wb.getWorksheets()
collectionCount = collection.getCount()
# Dapatkan buku kerja dan nama lembar pertama
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
# Buat spreadsheet di Google Sheets
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
# Untuk mengatur rentang lembar kerja
sheetRange = None
# Ulangi semua lembar kerja
for worksheetIndex in range(collectionCount):
# Dapatkan lembar kerja menggunakan indeksnya
worksheet = collection.get(worksheetIndex)
# Tetapkan rentang lembar kerja
if(worksheetIndex==0):
sheetRange= "{0}!A:Y".format(firstSheetName)
else:
add_sheet(service, spreadsheetID, worksheet.getName())
sheetRange= "{0}!A:Y".format(worksheet.getName())
# Dapatkan jumlah baris dan kolom
rows = worksheet.getCells().getMaxDataRow()
cols = worksheet.getCells().getMaxDataColumn()
# Daftar untuk menyimpan data lembar kerja
worksheetDatalist = []
# Ulangi baris
for i in range(rows):
# Daftar untuk menyimpan setiap baris di lembar kerja
rowDataList = []
# Ulangi setiap kolom di baris yang dipilih
for j in range(cols):
cellValue = worksheet.getCells().get(i, j).getValue()
if( cellValue is not None):
rowDataList.append(str(cellValue))
else:
rowDataList.append("")
# Tambahkan ke data lembar kerja
worksheetDatalist.append(rowDataList)
# Tetapkan nilai
body = {
'values': worksheetDatalist
}
# Jalankan permintaan
result = service.spreadsheets().values().update(
spreadsheetId=spreadsheetID, range=sheetRange,
valueInputOption='USER_ENTERED', body=body).execute()
# Cetak jumlah sel yang diperbarui
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):
# Detail lembar bentang
spreadsheetBody = {
'properties': {
'title': "{0}".format(_title)
},
'sheets': {
'properties': {
'title' : "{0}".format(_sheetName)
}
}
}
# Buat spreadsheet
spreadsheet = _service.spreadsheets().create(body=spreadsheetBody,
fields='spreadsheetId').execute()
# Buka di browser web
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)}
}
}
]}
# Jalankan permintaan
res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()
# Buat objek icense Aspose.Cells
license = License()
# Tetapkan lisensi Aspose.Cells untuk menghindari batasan evaluasi
license.setLicense("D:\\Licenses\\Conholdate.Total.Product.Family.lic")
export_to_google("Book1.xlsx")
Dapatkan Lisensi Aspose.Cells Gratis
Anda bisa mendapatkan [lisensi sementara] gratis 7 dan menggunakan Aspose.Cells for Python tanpa batasan evaluasi.
Kesimpulan
Pada artikel ini, Anda telah mempelajari cara mengekspor data Excel ke Google Sheets dengan Python. Kami telah membahas cara membuat proyek di Google Cloud, mengaktifkan Google Sheets API, membaca file Excel, dan mengekspor data dari file Excel ke Google Sheets. Untuk mempelajari lebih lanjut tentang Aspose.Cells for Python, Anda dapat mengunjungi dokumentasi. Selain itu, Anda dapat mengajukan pertanyaan melalui forum kami.