У цій статті ви дізнаєтесь, як програмно експортувати дані Excel у Google Таблиці на Python.

Експортуйте файли Excel у Google Таблиці на Python

Файли Excel широко використовуються для зберігання даних і виконання над ними різних типів операцій, наприклад створення діаграм, застосування формул. З іншого боку, Google Sheets — це популярна онлайн-програма для створення електронних таблиць і роботи з ними. Google Таблиці також забезпечують спільний доступ до електронних таблиць у режимі реального часу з кількома людьми. У деяких випадках може знадобитися експортувати файли Excel XLS або XLSX у Google Таблиці програмним шляхом. Щоб досягти цього, у цій статті наведено повний посібник із налаштування проекту Google і експорту даних із файлів Excel у Google Таблиці на Python.

Передумови. Експортуйте дані Excel до Google Таблиць на Python

Проект Google Cloud

Щоб спілкуватися з Google Таблицями, нам потрібно буде створити проект у Google Cloud і ввімкнути Google Sheets API. Крім того, нам потрібно створити облікові дані, які використовуються для авторизації дій, які ми збираємося виконувати з нашим кодом. Ви можете прочитати вказівки як створити проект Google Cloud і ввімкнути API Google Таблиць.

Створивши проект Google Cloud і ввімкнувши Google Sheets API, ми можемо продовжити встановлення наступних API у нашій програмі Python.

Бібліотеки Python для експорту файлів Excel у Google Таблиці

Щоб експортувати дані з файлів Excel XLS/XLSX у Google Таблиці, нам знадобляться такі API.

Експортуйте дані з Excel у Google Таблиці на 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. Напишіть метод 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')
  1. Напишіть інший метод під назвою addsheet, щоб додати новий аркуш до електронної таблиці 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 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)
  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. Викличте метод createspreadsheet, щоб створити нову електронну таблицю в Google Sheets.
# Створіть електронну таблицю в 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 for Python без оціночних обмежень.

Висновок

У цій статті ви дізналися, як експортувати дані Excel у Google Таблиці на Python. Ми розповіли, як створити проект у Google Cloud, увімкнути API Google Sheets, читати файли Excel і експортувати дані з файлів Excel у Google Sheets. Щоб дізнатися більше про Aspose.Cells for Python, ви можете відвідати документацію. Ви також можете поставити свої запитання через наш форум.

Дивись також