이 기사에서는 Python에서 프로그래밍 방식으로 Excel 데이터를 Google 스프레드시트로 내보내는 방법을 배웁니다.

Python에서 Excel 파일을 Google 스프레드시트로 내보내기

Excel 파일은 데이터를 저장하고 차트 생성, 수식 적용과 같은 다양한 유형의 작업을 수행하는 데 널리 사용됩니다. 반면에 Google Sheets는 스프레드시트를 만들고 조작하기 위한 인기 있는 온라인 응용 프로그램입니다. Google 스프레드시트는 여러 사람과 스프레드시트를 실시간으로 공유할 수도 있습니다. 경우에 따라 프로그래밍 방식으로 Excel XLS 또는 XLSX 파일을 Google 스프레드시트로 내보내야 할 수 있습니다. 이를 달성하기 위해 이 기사에서는 Google 프로젝트를 설정하고 Excel 파일의 데이터를 Python의 Google 스프레드시트로 내보내는 방법에 대한 완전한 가이드를 제공합니다.

전제 조건 - Python에서 Excel 데이터를 Google 스프레드시트로 내보내기

구글 클라우드 프로젝트

Google Sheets와 통신하려면 Google Cloud에서 프로젝트를 만들고 Google Sheets API를 활성화해야 합니다. 또한 코드로 수행할 작업을 승인하는 데 사용되는 자격 증명을 만들어야 합니다. Google Cloud 프로젝트를 만들고 Google Sheets API를 활성화하는 방법에 대한 지침을 읽을 수 있습니다.

Google Cloud 프로젝트를 만들고 Google Sheets API를 활성화한 후 Python 애플리케이션에 다음 API 설치를 진행할 수 있습니다.

Excel 파일을 Google 스프레드시트로 내보내는 Python 라이브러리

Excel XLS/XLSX 파일에서 Google 스프레드시트로 데이터를 내보내려면 다음 API가 필요합니다.

Python의 Excel에서 Google 스프레드시트로 데이터 내보내기

다음은 Excel XLSX 파일에서 데이터를 읽고 Python 애플리케이션에서 Google 스프레드시트에 쓰는 방법에 대한 단계별 가이드입니다.

  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 스프레드시트에 새 스프레드시트를 만들고 기본 시트의 이름을 설정하고 스프레드시트의 ID를 반환하는 createpreadsheet라는 메서드를 작성합니다.

def create_spreadsheet(_service, _title, _sheetName):   
    # Spreadsheet details
    spreadsheetBody = {
        'properties': {
            'title': "{0}".format(_title)
        },
        'sheets': {
            'properties': {
                'title' : "{0}".format(_sheetName)
            }
        }
    }

    # Create 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')))
    
    # Open in web browser
    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)}
            }
        }
    ]}

    # Execute request
    res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()
  1. 이제 자격 증명(JSON 파일)을 사용하여 Google 스프레드시트 서비스를 초기화하고 애플리케이션의 범위를 정의합니다. 범위 매개변수는 Google 스프레드시트 및 해당 속성에 대한 액세스 권한을 지정하는 데 사용됩니다.
# If modifying these scopes, delete the file token.json.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

creds = None
# The file token.json stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
if os.path.exists('token.json'):
    creds = Credentials.from_authorized_user_file('token.json', SCOPES)

# If there are no (valid) credentials available, let the user log in.
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)
    # Save the credentials for the next run
    with open('token.json', 'w') as token:
        token.write(creds.to_json())

    service = build('sheets', 'v4', credentials=creds)
  1. 그런 다음 Aspose.Cells를 사용하여 Excel XLS 또는 XLSX 파일을 로드하고 통합 문서의 첫 번째 워크시트 이름을 가져옵니다.
# Load Excel workbook
wb = Workbook(fileName)

# Get worksheets collection
collection = wb.getWorksheets()
collectionCount = collection.getCount()

# Get workbook and first sheet's name
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
  1. createspreadsheet 메서드를 호출하여 Google 스프레드시트에서 새 스프레드시트를 만듭니다.
# Create spreadsheet on Google Sheets
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
  1. Excel 파일에서 워크시트를 반복합니다. 각 반복에서 워크시트에서 데이터를 읽고 배열에 추가합니다.
# Loop through all the worksheets
for worksheetIndex in range(collectionCount):

    # Get worksheet using its index
    worksheet = collection.get(worksheetIndex)

    # Set worksheet range
    if(worksheetIndex==0):
        sheetRange= "{0}!A:Y".format(firstSheetName)
    else:
        add_sheet(service, spreadsheetID, worksheet.getName())
        sheetRange= "{0}!A:Y".format(worksheet.getName())

    # Get number of rows and columns
    rows = worksheet.getCells().getMaxDataRow()
    cols = worksheet.getCells().getMaxDataColumn()

    # List to store worksheet's data
    worksheetDatalist = []

    # Loop through rows
    for i in range(rows):
        # List to store each row in worksheet 
        rowDataList = []

        # Loop through each column in selected row
        for j in range(cols):
            cellValue = worksheet.getCells().get(i, j).getValue()
            if( cellValue is not None):
                rowDataList.append(str(cellValue))
            else:
                rowDataList.append("")

        # Add to worksheet data
        worksheetDatalist.append(rowDataList)
  1. Excel 파일의 각 워크시트에 대해 Google 스프레드시트에 데이터 쓰기 요청을 만듭니다.
# Set values
body = {
    'values': worksheetDatalist
}

# Execute request
result = service.spreadsheets().values().update(
    spreadsheetId=spreadsheetID, range=sheetRange,
    valueInputOption='USER_ENTERED', body=body).execute()

# Print number of updated cells    
print('{0} cells updated.'.format(result.get('updatedCells')))

다음은 Excel 파일의 데이터를 Google 스프레드시트의 스프레드시트로 내보내는 전체 기능입니다.

def export_to_google(fileName):
    # If modifying these scopes, delete the file token.json.
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

    creds = None
    # The file token.json stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
    # If there are no (valid) credentials available, let the user log in.
    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)
        # Save the credentials for the next run
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('sheets', 'v4', credentials=creds)
        
        # Load Excel workbook
        wb = Workbook(fileName)

        # Get worksheets collection
        collection = wb.getWorksheets()
        collectionCount = collection.getCount()

        # Get workbook and first sheet's name
        spreadsheetName = wb.getFileName()
        firstSheetName = collection.get(0).getName()

        # Create spreadsheet on Google Sheets
        spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)

        # To set worksheet range
        sheetRange = None

        # Loop through all the worksheets
        for worksheetIndex in range(collectionCount):

            # Get worksheet using its index
            worksheet = collection.get(worksheetIndex)

            # Set worksheet range
            if(worksheetIndex==0):
                sheetRange= "{0}!A:Y".format(firstSheetName)
            else:
                add_sheet(service, spreadsheetID, worksheet.getName())
                sheetRange= "{0}!A:Y".format(worksheet.getName())

            # Get number of rows and columns
            rows = worksheet.getCells().getMaxDataRow()
            cols = worksheet.getCells().getMaxDataColumn()

            # List to store worksheet's data
            worksheetDatalist = []

            # Loop through rows
            for i in range(rows):
                # List to store each row in worksheet 
                rowDataList = []

                # Loop through each column in selected row
                for j in range(cols):
                    cellValue = worksheet.getCells().get(i, j).getValue()
                    if( cellValue is not None):
                        rowDataList.append(str(cellValue))
                    else:
                        rowDataList.append("")

                # Add to worksheet data
                worksheetDatalist.append(rowDataList)

            # Set values
            body = {
                'values': worksheetDatalist
            }
            
            # Execute request
            result = service.spreadsheets().values().update(
                spreadsheetId=spreadsheetID, range=sheetRange,
                valueInputOption='USER_ENTERED', body=body).execute()

            # Print number of updated cells    
            print('{0} cells updated.'.format(result.get('updatedCells')))
    except HttpError as err:
        print(err)

    print("Workbook has been exported to Google Sheets.")

완전한 소스 코드

다음은 Python에서 Excel XLSX 파일을 Google 스프레드시트로 내보내는 전체 소스 코드입니다.

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):
    # If modifying these scopes, delete the file token.json.
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

    creds = None
    # The file token.json stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
    # If there are no (valid) credentials available, let the user log in.
    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)
        # Save the credentials for the next run
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('sheets', 'v4', credentials=creds)
        
        # Load Excel workbook
        wb = Workbook(fileName)

        # Get worksheets collection
        collection = wb.getWorksheets()
        collectionCount = collection.getCount()

        # Get workbook and first sheet's name
        spreadsheetName = wb.getFileName()
        firstSheetName = collection.get(0).getName()

        # Create spreadsheet on Google Sheets
        spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)

        # To set worksheet range
        sheetRange = None

        # Loop through all the worksheets
        for worksheetIndex in range(collectionCount):

            # Get worksheet using its index
            worksheet = collection.get(worksheetIndex)

            # Set worksheet range
            if(worksheetIndex==0):
                sheetRange= "{0}!A:Y".format(firstSheetName)
            else:
                add_sheet(service, spreadsheetID, worksheet.getName())
                sheetRange= "{0}!A:Y".format(worksheet.getName())

            # Get number of rows and columns
            rows = worksheet.getCells().getMaxDataRow()
            cols = worksheet.getCells().getMaxDataColumn()

            # List to store worksheet's data
            worksheetDatalist = []

            # Loop through rows
            for i in range(rows):
                # List to store each row in worksheet 
                rowDataList = []

                # Loop through each column in selected row
                for j in range(cols):
                    cellValue = worksheet.getCells().get(i, j).getValue()
                    if( cellValue is not None):
                        rowDataList.append(str(cellValue))
                    else:
                        rowDataList.append("")

                # Add to worksheet data
                worksheetDatalist.append(rowDataList)

            # Set values
            body = {
                'values': worksheetDatalist
            }
            
            # Execute request
            result = service.spreadsheets().values().update(
                spreadsheetId=spreadsheetID, range=sheetRange,
                valueInputOption='USER_ENTERED', body=body).execute()

            # Print number of updated cells    
            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):   
    # Spreadsheet details
    spreadsheetBody = {
        'properties': {
            'title': "{0}".format(_title)
        },
        'sheets': {
            'properties': {
                'title' : "{0}".format(_sheetName)
            }
        }
    }

    # Create spreadsheet
    spreadsheet = _service.spreadsheets().create(body=spreadsheetBody,
                                                fields='spreadsheetId').execute()
    
    # Open in web browser
    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)}
            }
        }
    ]}

    # Execute request
    res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()

 # Create a Aspose.Cells icense object
license = License()

# Set the license of Aspose.Cells to avoid the evaluation limitations
license.setLicense("D:\\Licenses\\Conholdate.Total.Product.Family.lic")

export_to_google("Book1.xlsx")

무료 Aspose.Cells 라이선스 받기

무료 임시 라이선스를 얻고 평가 제한 없이 Python용 Aspose.Cells를 사용할 수 있습니다.

결론

이 기사에서는 Python에서 Excel 데이터를 Google 스프레드시트로 내보내는 방법을 배웠습니다. Google Cloud에서 프로젝트를 만들고, Google Sheets API를 활성화하고, Excel 파일을 읽고, Excel 파일에서 Google Sheets로 데이터를 내보내는 방법을 다루었습니다. Python용 Aspose.Cells에 대해 자세히 알아보려면 문서를 방문하세요. 또한 포럼을 통해 질문할 수 있습니다.

또한보십시오