در این مقاله یاد می گیرید که چگونه داده های اکسل را به صورت برنامه نویسی در پایتون به Google Sheets صادر کنید.
فایلهای Excel بهطور گسترده برای ذخیره دادهها و انجام انواع عملیات روی آنها، مانند تولید نمودارها، اعمال فرمولها، استفاده میشوند. از سوی دیگر، Google Sheets یک برنامه آنلاین محبوب برای ایجاد و دستکاری صفحات گسترده است. Google Sheets همچنین اشتراکگذاری بلادرنگ صفحات گسترده را با چندین نفر فراهم میکند. در موارد خاص، ممکن است لازم باشد فایلهای اکسل XLS یا XLSX را به صورت برنامهنویسی به Google Sheets صادر کنید. برای دستیابی به آن، این مقاله راهنمای کاملی در مورد چگونگی راه اندازی یک پروژه گوگل و صادرات داده ها از فایل های اکسل به صفحات گوگل در پایتون ارائه می دهد.
پیش نیازها - داده های اکسل را به Google Sheets در پایتون صادر کنید
پروژه Google Cloud
برای برقراری ارتباط با Google Sheets، باید یک پروژه در Google Cloud ایجاد کنیم و Google Sheets API را فعال کنیم. همچنین، باید اعتبارنامه هایی ایجاد کنیم که برای مجوز دادن به اقداماتی که قرار است با کد خود انجام دهیم، استفاده می شود. میتوانید دستورالعملهای [نحوه ایجاد یک پروژه Google Cloud و فعال کردن Google Sheets API] را بخوانید.
پس از ایجاد پروژه Google Cloud و فعال کردن Google Sheets API، می توانیم API های زیر را در برنامه پایتون خود نصب کنیم.
کتابخانههای پایتون برای صادرات فایلهای اکسل به Google Sheets
برای صادر کردن دادهها از فایلهای Excel XLS/XLSX به Google Sheets، به APIهای زیر نیاز داریم.
- Aspose.Cells برای پایتون - To read the data from Excel files.
- کتابخانه های مشتری گوگل - To create and update spreadsheets on Google Sheets.
داده ها را از اکسل به Google Sheets در پایتون صادر کنید
در زیر راهنمای گام به گام نحوه خواندن داده ها از یک فایل اکسل XLSX و نوشتن آن در Google Sheets در برنامه پایتون است.
یک برنامه پایتون جدید ایجاد کنید.
Aspose.Cells و کتابخانه های سرویس گیرنده Google را در پروژه نصب کنید.
pip install aspose.cells
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
فایل JSON (ما پس از ایجاد اعتبارنامه در Google Cloud دانلود کرده ایم) را در دایرکتوری پروژه قرار دهید.
روشی به نام createspreadsheet بنویسید که یک صفحه گسترده جدید در Google Sheets ایجاد می کند، نام صفحه پیش فرض را تنظیم می کند و شناسه صفحه گسترده را برمی گرداند.
def create_spreadsheet(_service, _title, _sheetName):
# جزئیات صفحه گسترده
spreadsheetBody = {
'properties': {
'title': "{0}".format(_title)
},
'sheets': {
'properties': {
'title' : "{0}".format(_sheetName)
}
}
}
# صفحه گسترده ایجاد کنید
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')))
# در مرورگر وب باز کنید
webbrowser.open_new_tab("https://docs.google.com/spreadsheets/d/{0}".format(spreadsheet.get('spreadsheetId')))
return spreadsheet.get('spreadsheetId')
- روش دیگری به نام addsheet بنویسید تا یک صفحه جدید در صفحه گسترده گوگل اضافه کنید.
def add_sheet(_service, _spreadsheetID, _sheetName):
data = {'requests': [
{
'addSheet':{
'properties':{'title': '{0}'.format(_sheetName)}
}
}
]}
# درخواست را اجرا کنید
res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()
- اکنون سرویس Google Sheets را با استفاده از اعتبارنامه (فایل JSON) مقداردهی اولیه کنید و محدوده برنامه را تعریف کنید. پارامتر scopes برای تعیین مجوزهای دسترسی به کاربرگنگار Google و ویژگیهای آنها استفاده میشود.
# اگر این محدوده ها را تغییر می دهید، فایل token.json را حذف کنید.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = None
# فایل token.json توکن های دسترسی و رفرش کاربر را ذخیره می کند و هست
# هنگامی که جریان مجوز برای اولین بار کامل می شود، به طور خودکار ایجاد می شود
# زمان.
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# اگر اعتبارنامه (معتبر) موجود نیست، به کاربر اجازه ورود به سیستم را بدهید.
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)
# اعتبارنامه ها را برای اجرای بعدی ذخیره کنید
with open('token.json', 'w') as token:
token.write(creds.to_json())
service = build('sheets', 'v4', credentials=creds)
- سپس، فایل اکسل XLS یا XLSX را با استفاده از Aspose.Cells بارگذاری کنید و نام اولین کاربرگ را در کتاب کار دریافت کنید.
# کتاب کار اکسل را بارگیری کنید
wb = Workbook(fileName)
# دریافت مجموعه کاربرگ ها
collection = wb.getWorksheets()
collectionCount = collection.getCount()
# کتاب کار و نام برگه را دریافت کنید
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
- برای ایجاد یک صفحه گسترده جدید در Google Sheets، متد createspreadsheet را فراخوانی کنید.
# صفحه گسترده در Google Sheets ایجاد کنید
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
- کاربرگ های موجود در فایل اکسل را حلقه بزنید. در هر تکرار، داده ها را از کاربرگ بخوانید و به یک آرایه اضافه کنید.
# تمام کاربرگ ها را حلقه بزنید
for worksheetIndex in range(collectionCount):
# کاربرگ را با استفاده از نمایه آن دریافت کنید
worksheet = collection.get(worksheetIndex)
# محدوده کاربرگ را تنظیم کنید
if(worksheetIndex==0):
sheetRange= "{0}!A:Y".format(firstSheetName)
else:
add_sheet(service, spreadsheetID, worksheet.getName())
sheetRange= "{0}!A:Y".format(worksheet.getName())
# تعداد سطرها و ستون ها را دریافت کنید
rows = worksheet.getCells().getMaxDataRow()
cols = worksheet.getCells().getMaxDataColumn()
# فهرستی برای ذخیره داده های کاربرگ
worksheetDatalist = []
# از میان ردیف ها حلقه بزنید
for i in range(rows):
# فهرستی برای ذخیره هر ردیف در کاربرگ
rowDataList = []
# از طریق هر ستون در ردیف انتخاب شده حلقه بزنید
for j in range(cols):
cellValue = worksheet.getCells().get(i, j).getValue()
if( cellValue is not None):
rowDataList.append(str(cellValue))
else:
rowDataList.append("")
# به داده های کاربرگ اضافه کنید
worksheetDatalist.append(rowDataList)
- برای هر کاربرگ در فایل اکسل، درخواستی برای نوشتن داده ها در Google Sheets ایجاد کنید.
# مقادیر را تنظیم کنید
body = {
'values': worksheetDatalist
}
# درخواست را اجرا کنید
result = service.spreadsheets().values().update(
spreadsheetId=spreadsheetID, range=sheetRange,
valueInputOption='USER_ENTERED', body=body).execute()
# چاپ تعداد سلول های به روز شده
print('{0} cells updated.'.format(result.get('updatedCells')))
در زیر تابع کامل برای صادر کردن داده ها از یک فایل اکسل به یک صفحه گسترده در Google Sheets است.
def export_to_google(fileName):
# اگر این محدوده ها را تغییر می دهید، فایل token.json را حذف کنید.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = None
# فایل token.json توکن های دسترسی و رفرش کاربر را ذخیره می کند و هست
# هنگامی که جریان مجوز برای اولین بار کامل می شود، به طور خودکار ایجاد می شود
# زمان.
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# اگر اعتبارنامه (معتبر) موجود نیست، به کاربر اجازه ورود به سیستم را بدهید.
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)
# اعتبارنامه ها را برای اجرای بعدی ذخیره کنید
with open('token.json', 'w') as token:
token.write(creds.to_json())
try:
service = build('sheets', 'v4', credentials=creds)
# کتاب کار اکسل را بارگیری کنید
wb = Workbook(fileName)
# دریافت مجموعه کاربرگ ها
collection = wb.getWorksheets()
collectionCount = collection.getCount()
# کتاب کار و نام برگه اول را دریافت کنید
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
# صفحه گسترده در Google Sheets ایجاد کنید
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
# برای تنظیم محدوده کاربرگ
sheetRange = None
# تمام کاربرگ ها را حلقه بزنید
for worksheetIndex in range(collectionCount):
# کاربرگ را با استفاده از نمایه آن دریافت کنید
worksheet = collection.get(worksheetIndex)
# محدوده کاربرگ را تنظیم کنید
if(worksheetIndex==0):
sheetRange= "{0}!A:Y".format(firstSheetName)
else:
add_sheet(service, spreadsheetID, worksheet.getName())
sheetRange= "{0}!A:Y".format(worksheet.getName())
# تعداد سطرها و ستون ها را دریافت کنید
rows = worksheet.getCells().getMaxDataRow()
cols = worksheet.getCells().getMaxDataColumn()
# فهرستی برای ذخیره داده های کاربرگ
worksheetDatalist = []
# از میان ردیف ها حلقه بزنید
for i in range(rows):
# فهرستی برای ذخیره هر ردیف در کاربرگ
rowDataList = []
# از طریق هر ستون در ردیف انتخاب شده حلقه بزنید
for j in range(cols):
cellValue = worksheet.getCells().get(i, j).getValue()
if( cellValue is not None):
rowDataList.append(str(cellValue))
else:
rowDataList.append("")
# به داده های کاربرگ اضافه کنید
worksheetDatalist.append(rowDataList)
# مقادیر را تنظیم کنید
body = {
'values': worksheetDatalist
}
# درخواست را اجرا کنید
result = service.spreadsheets().values().update(
spreadsheetId=spreadsheetID, range=sheetRange,
valueInputOption='USER_ENTERED', body=body).execute()
# چاپ تعداد سلول های به روز شده
print('{0} cells updated.'.format(result.get('updatedCells')))
except HttpError as err:
print(err)
print("Workbook has been exported to Google Sheets.")
کد منبع کامل
در زیر کد منبع کامل برای صادر کردن یک فایل اکسل XLSX به Google Sheets در پایتون آمده است.
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):
# اگر این محدوده ها را تغییر می دهید، فایل token.json را حذف کنید.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = None
# فایل token.json توکن های دسترسی و رفرش کاربر را ذخیره می کند و هست
# هنگامی که جریان مجوز برای اولین بار کامل می شود، به طور خودکار ایجاد می شود
# زمان.
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# اگر اعتبارنامه (معتبر) موجود نیست، به کاربر اجازه ورود به سیستم را بدهید.
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)
# اعتبارنامه ها را برای اجرای بعدی ذخیره کنید
with open('token.json', 'w') as token:
token.write(creds.to_json())
try:
service = build('sheets', 'v4', credentials=creds)
# کتاب کار اکسل را بارگیری کنید
wb = Workbook(fileName)
# دریافت مجموعه کاربرگ ها
collection = wb.getWorksheets()
collectionCount = collection.getCount()
# کتاب کار و نام برگه اول را دریافت کنید
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
# صفحه گسترده در Google Sheets ایجاد کنید
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
# برای تنظیم محدوده کاربرگ
sheetRange = None
# تمام کاربرگ ها را حلقه بزنید
for worksheetIndex in range(collectionCount):
# کاربرگ را با استفاده از نمایه آن دریافت کنید
worksheet = collection.get(worksheetIndex)
# محدوده کاربرگ را تنظیم کنید
if(worksheetIndex==0):
sheetRange= "{0}!A:Y".format(firstSheetName)
else:
add_sheet(service, spreadsheetID, worksheet.getName())
sheetRange= "{0}!A:Y".format(worksheet.getName())
# تعداد سطرها و ستون ها را دریافت کنید
rows = worksheet.getCells().getMaxDataRow()
cols = worksheet.getCells().getMaxDataColumn()
# فهرستی برای ذخیره داده های کاربرگ
worksheetDatalist = []
# از میان ردیف ها حلقه بزنید
for i in range(rows):
# فهرستی برای ذخیره هر ردیف در کاربرگ
rowDataList = []
# از طریق هر ستون در ردیف انتخاب شده حلقه بزنید
for j in range(cols):
cellValue = worksheet.getCells().get(i, j).getValue()
if( cellValue is not None):
rowDataList.append(str(cellValue))
else:
rowDataList.append("")
# به داده های کاربرگ اضافه کنید
worksheetDatalist.append(rowDataList)
# مقادیر را تنظیم کنید
body = {
'values': worksheetDatalist
}
# درخواست را اجرا کنید
result = service.spreadsheets().values().update(
spreadsheetId=spreadsheetID, range=sheetRange,
valueInputOption='USER_ENTERED', body=body).execute()
# چاپ تعداد سلول های به روز شده
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):
# جزئیات صفحه گسترده
spreadsheetBody = {
'properties': {
'title': "{0}".format(_title)
},
'sheets': {
'properties': {
'title' : "{0}".format(_sheetName)
}
}
}
# صفحه گسترده ایجاد کنید
spreadsheet = _service.spreadsheets().create(body=spreadsheetBody,
fields='spreadsheetId').execute()
# در مرورگر وب باز کنید
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)}
}
}
]}
# درخواست را اجرا کنید
res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()
# یک آبجکت Aspose.Cells ایجاد کنید
license = License()
# مجوز Aspose.Cells را برای جلوگیری از محدودیت های ارزیابی تنظیم کنید
license.setLicense("D:\\Licenses\\Conholdate.Total.Product.Family.lic")
export_to_google("Book1.xlsx")
مجوز Aspose.Cells رایگان دریافت کنید
می توانید یک [مجوز موقت] رایگان دریافت کنید و از Aspose.Cells برای پایتون بدون محدودیت ارزیابی استفاده کنید.
نتیجه
در این مقاله یاد گرفتید که چگونه داده های اکسل را به Google Sheets در پایتون صادر کنید. ما نحوه ایجاد یک پروژه در Google Cloud، فعال کردن Google Sheets API، خواندن فایلهای Excel و صادرات دادهها از فایلهای Excel به Google Sheets را پوشش دادهایم. برای کاوش بیشتر در مورد Aspose.Cells برای پایتون، می توانید از مستندات دیدن کنید. همچنین، می توانید سوالات خود را از طریق [تالار گفتمان] ما بپرسید.