في هذه المقالة ، ستتعلم كيفية تصدير بيانات Excel إلى جداول بيانات Google برمجيًا في Python.

تصدير ملفات Excel إلى جداول بيانات Google في Python

تُستخدم ملفات Excel على نطاق واسع لتخزين البيانات وتنفيذ أنواع مختلفة من العمليات عليها ، مثل إنشاء المخططات وتطبيق الصيغ. من ناحية أخرى ، يعد Google Sheets تطبيقًا شائعًا عبر الإنترنت لإنشاء جداول البيانات ومعالجتها. توفر جداول بيانات Google أيضًا مشاركة جداول البيانات في الوقت الفعلي مع عدة أشخاص. في بعض الحالات ، قد تحتاج إلى تصدير ملفات Excel XLS أو XLSX إلى جداول بيانات Google برمجيًا. لتحقيق ذلك ، توفر هذه المقالة دليلاً كاملاً حول كيفية إعداد مشروع Google وتصدير البيانات من ملفات Excel إلى جداول بيانات Google في Python.

المتطلبات الأساسية - تصدير بيانات Excel إلى جداول بيانات Google في Python

مشروع جوجل كلاود

للتواصل مع Google Sheets ، سيتعين علينا إنشاء مشروع على Google Cloud وتمكين Google Sheets API. أيضًا ، نحتاج إلى إنشاء بيانات اعتماد تُستخدم لتفويض الإجراءات التي سنقوم بتنفيذها باستخدام التعليمات البرمجية الخاصة بنا. يمكنك قراءة الإرشادات حول كيفية إنشاء مشروع Google Cloud وتمكين Google Sheets API.

بعد إنشاء مشروع Google Cloud وتمكين Google Sheets API ، يمكننا المتابعة لتثبيت واجهات برمجة التطبيقات التالية في تطبيق Python الخاص بنا.

مكتبات Python لتصدير ملفات Excel إلى جداول بيانات Google

لتصدير البيانات من ملفات Excel XLS / XLSX إلى جداول بيانات Google ، سنحتاج إلى واجهات برمجة التطبيقات التالية.

تصدير البيانات من Excel إلى Google Sheets في Python

فيما يلي دليل تفصيلي حول كيفية قراءة البيانات من ملف Excel XLSX وكتابتها على جداول بيانات Google في تطبيق Python.

  1. أنشئ تطبيق Python جديدًا.

  2. قم بتثبيت Aspose.Cells ومكتبات عملاء Google في المشروع.

pip install aspose.cells
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
  1. ضع ملف JSON (تم تنزيله بعد إنشاء بيانات الاعتماد في Google Cloud) في دليل المشروع.

  2. اكتب طريقة باسم إنشاء جدول بيانات تقوم بإنشاء جدول بيانات جديد على جداول بيانات Google ، وتعيين اسم الورقة الافتراضية ، وإرجاع معرف جدول البيانات.

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')
  1. اكتب طريقة أخرى باسم addheet لإضافة ورقة جديدة في جدول بيانات Google.
def add_sheet(_service, _spreadsheetID, _sheetName):
    data = {'requests': [
        {
            'addSheet':{
                'properties':{'title': '{0}'.format(_sheetName)}
            }
        }
    ]}

    # تنفيذ الطلب
    res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()
  1. الآن ، قم بتهيئة خدمة جداول بيانات Google باستخدام بيانات الاعتماد (ملف JSON) وحدد نطاقات التطبيق. يتم استخدام معلمة النطاقات لتحديد أذونات الوصول إلى جداول بيانات 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)
  1. بعد ذلك ، قم بتحميل ملف Excel XLS أو XLSX باستخدام Aspose.Cells واحصل على اسم ورقة العمل الأولى في المصنف.
# تحميل مصنف Excel
wb = Workbook(fileName)

# احصل على مجموعة أوراق العمل
collection = wb.getWorksheets()
collectionCount = collection.getCount()

# احصل على المصنف واسم الورقة الأولى
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
  1. قم باستدعاء طريقة إنشاء جدول البيانات لإنشاء جدول بيانات جديد على جداول بيانات Google.
# قم بإنشاء جدول بيانات على جداول بيانات Google
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
  1. قم بالتكرار خلال أوراق العمل في ملف Excel. في كل تكرار ، اقرأ البيانات من ورقة العمل وأضفها إلى صفيف.
# حلقة من خلال جميع أوراق العمل
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)
  1. لكل ورقة عمل في ملف Excel ، قم بإنشاء طلب لكتابة البيانات إلى جداول بيانات Google.
# قم بتعيين القيم
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')))

فيما يلي الوظيفة الكاملة لتصدير البيانات من ملف Excel إلى جدول بيانات في جداول بيانات Google.

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)
        
        # تحميل مصنف Excel
        wb = Workbook(fileName)

        # احصل على مجموعة أوراق العمل
        collection = wb.getWorksheets()
        collectionCount = collection.getCount()

        # احصل على المصنف واسم الورقة الأولى
        spreadsheetName = wb.getFileName()
        firstSheetName = collection.get(0).getName()

        # قم بإنشاء جدول بيانات على جداول بيانات Google
        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.")

أكمل كود المصدر

فيما يلي الكود المصدري الكامل لتصدير ملف Excel XLSX إلى جداول بيانات Google في 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):
    # في حالة تعديل هذه النطاقات ، احذف الملف 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)
        
        # تحميل مصنف Excel
        wb = Workbook(fileName)

        # احصل على مجموعة أوراق العمل
        collection = wb.getWorksheets()
        collectionCount = collection.getCount()

        # احصل على المصنف واسم الورقة الأولى
        spreadsheetName = wb.getFileName()
        firstSheetName = collection.get(0).getName()

        # قم بإنشاء جدول بيانات على جداول بيانات Google
        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 لـ Python بدون قيود تقييم.

استنتاج

في هذه المقالة ، تعلمت كيفية تصدير بيانات Excel إلى جداول بيانات Google في Python. لقد غطينا كيفية إنشاء مشروع على Google Cloud ، وتمكين Google Sheets API ، وقراءة ملفات Excel ، وتصدير البيانات من ملفات Excel إلى جداول بيانات Google. لاستكشاف المزيد حول Aspose.Cells for Python ، يمكنك زيارة التوثيق. أيضًا ، يمكنك طرح أسئلتك عبر المنتدى.

أنظر أيضا