이 기사에서는 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가 필요합니다.
- Aspose.Cells for Python - To read the data from Excel files.
- Google 클라이언트 라이브러리 - To create and update spreadsheets on Google Sheets.
Python의 Excel에서 Google 스프레드시트로 데이터 내보내기
다음은 Excel XLSX 파일에서 데이터를 읽고 Python 애플리케이션에서 Google 스프레드시트에 쓰는 방법에 대한 단계별 가이드입니다.
새 Python 응용 프로그램을 만듭니다.
프로젝트에 Aspose.Cells 및 Google 클라이언트 라이브러리를 설치합니다.
pip install aspose.cells
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
JSON 파일(Google Cloud에서 자격 증명을 생성한 후 다운로드)을 프로젝트 디렉터리에 넣습니다.
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')
- 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()
- 이제 자격 증명(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)
- 그런 다음 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()
- createspreadsheet 메서드를 호출하여 Google 스프레드시트에서 새 스프레드시트를 만듭니다.
# Create spreadsheet on Google Sheets
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
- 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)
- 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에 대해 자세히 알아보려면 문서를 방문하세요. 또한 포럼을 통해 질문할 수 있습니다.