Trong bài viết này, bạn sẽ học cách xuất dữ liệu Excel sang Google Trang tính theo lập trình bằng Python.

Xuất tệp Excel sang Google Trang tính bằng Python

Tệp Excel được sử dụng rộng rãi để lưu trữ dữ liệu và thực hiện nhiều loại hoạt động khác nhau trên đó, chẳng hạn như tạo biểu đồ, áp dụng công thức. Mặt khác, Google Sheets là một ứng dụng trực tuyến phổ biến để tạo và thao tác các bảng tính. Google Trang tính cũng cung cấp tính năng chia sẻ bảng tính trong thời gian thực với nhiều người. Trong một số trường hợp nhất định, bạn có thể cần xuất tệp Excel XLS hoặc XLSX sang Google Trang tính theo lập trình. Để đạt được điều đó, bài viết này cung cấp hướng dẫn đầy đủ về cách thiết lập dự án Google và xuất dữ liệu từ tệp Excel sang Google Trang tính bằng Python.

Điều kiện tiên quyết - Xuất Dữ liệu Excel sang Google Trang tính bằng Python

Dự án đám mây của Google

Để giao tiếp với Google Trang tính, chúng tôi sẽ phải tạo một dự án trên Google Cloud và bật API Google Trang tính. Ngoài ra, chúng ta cần tạo thông tin xác thực được sử dụng để cho phép các hành động mà chúng ta sẽ thực hiện với mã của mình. Bạn có thể đọc hướng dẫn về cách tạo dự án Google Cloud và bật API Google Trang tính.

Sau khi tạo dự án Google Cloud và bật API Google Trang tính, chúng tôi có thể tiến hành cài đặt các API sau trong ứng dụng Python của mình.

Thư viện Python để xuất tệp Excel sang Google Trang tính

Để xuất dữ liệu từ tệp Excel XLS / XLSX sang Google Trang tính, chúng tôi sẽ cần các API sau.

Xuất dữ liệu từ Excel sang Google Trang tính bằng Python

Sau đây là hướng dẫn từng bước về cách đọc dữ liệu từ tệp Excel XLSX và ghi dữ liệu đó vào Google Trang tính trong ứng dụng Python.

  1. Tạo một ứng dụng Python mới.

  2. Cài đặt Aspose.Cells và thư viện ứng dụng khách Google trong dự án.

pip install aspose.cells
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
  1. Đặt tệp JSON (chúng tôi đã tải xuống sau khi tạo thông tin đăng nhập trong Google Cloud) vào thư mục của dự án.

  2. Viết một phương thức có tên là tạo bảng tính để tạo một bảng tính mới trên Google Trang tính, đặt tên cho trang tính mặc định và trả về ID của bảng tính.

def create_spreadsheet(_service, _title, _sheetName):   
    # Chi tiết bảng tính
    spreadsheetBody = {
        'properties': {
            'title': "{0}".format(_title)
        },
        'sheets': {
            'properties': {
                'title' : "{0}".format(_sheetName)
            }
        }
    }

    # Tạo bảng tính
    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')))
    
    # Mở trong trình duyệt web
    webbrowser.open_new_tab("https://docs.google.com/spreadsheets/d/{0}".format(spreadsheet.get('spreadsheetId')))

    return spreadsheet.get('spreadsheetId')
  1. Viết một phương thức khác có tên là bảng bổ sung để thêm một trang tính mới trong bảng tính Google.
def add_sheet(_service, _spreadsheetID, _sheetName):
    data = {'requests': [
        {
            'addSheet':{
                'properties':{'title': '{0}'.format(_sheetName)}
            }
        }
    ]}

    # Thực hiện yêu cầu
    res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()
  1. Bây giờ, khởi tạo dịch vụ Google Trang tính bằng thông tin đăng nhập (tệp JSON) và xác định phạm vi của ứng dụng. Tham số phạm vi được sử dụng để chỉ định quyền truy cập vào Google Trang tính và các thuộc tính của chúng.
# Nếu sửa đổi các phạm vi này, hãy xóa tệp token.json.
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

creds = None
# Tệp token.json lưu trữ mã thông báo truy cập và làm mới của người dùng và
# được tạo tự động khi quy trình ủy quyền hoàn tất cho lần đầu tiên
# thời gian.
if os.path.exists('token.json'):
    creds = Credentials.from_authorized_user_file('token.json', SCOPES)

# Nếu không có thông tin xác thực (hợp lệ) nào khả dụng, hãy để người dùng đăng nhập.
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)
    # Lưu thông tin đăng nhập cho lần chạy tiếp theo
    with open('token.json', 'w') as token:
        token.write(creds.to_json())

    service = build('sheets', 'v4', credentials=creds)
  1. Sau đó, tải tệp Excel XLS hoặc XLSX bằng Aspose.Cells và lấy tên của trang tính đầu tiên trong sổ làm việc.
# Tải sổ làm việc Excel
wb = Workbook(fileName)

# Nhận bộ sưu tập trang tính
collection = wb.getWorksheets()
collectionCount = collection.getCount()

# Nhận bảng tính và tên trang tính đầu tiên
spreadsheetName = wb.getFileName()
firstSheetName = collection.get(0).getName()
  1. Gọi phương thức tạo bảng tính để tạo bảng tính mới trên Google Trang tính.
# Tạo bảng tính trên Google Trang tính
spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)
  1. Lặp qua các trang tính trong tệp Excel. Trong mỗi lần lặp, hãy đọc dữ liệu từ trang tính và thêm nó vào một mảng.
# Lặp lại tất cả các trang tính
for worksheetIndex in range(collectionCount):

    # Nhận trang tính bằng cách sử dụng chỉ mục của nó
    worksheet = collection.get(worksheetIndex)

    # Đặt phạm vi trang tính
    if(worksheetIndex==0):
        sheetRange= "{0}!A:Y".format(firstSheetName)
    else:
        add_sheet(service, spreadsheetID, worksheet.getName())
        sheetRange= "{0}!A:Y".format(worksheet.getName())

    # Nhận số hàng và cột
    rows = worksheet.getCells().getMaxDataRow()
    cols = worksheet.getCells().getMaxDataColumn()

    # Danh sách để lưu trữ dữ liệu của trang tính
    worksheetDatalist = []

    # Lặp qua các hàng
   for i in range(rows):
        # Danh sách để lưu trữ từng hàng trong trang tính 
        rowDataList = []

        # Lặp qua từng cột trong hàng đã chọn
       for j in range(cols):
            cellValue = worksheet.getCells().get(i, j).getValue()
            if( cellValue is not None):
                rowDataList.append(str(cellValue))
            else:
                rowDataList.append("")

        # Thêm vào dữ liệu trang tính
        worksheetDatalist.append(rowDataList)
  1. Đối với mỗi trang tính trong tệp Excel, hãy tạo yêu cầu ghi dữ liệu vào Google Trang tính.
# Đặt giá trị
body = {
    'values': worksheetDatalist
}

# Thực hiện yêu cầu
result = service.spreadsheets().values().update(
    spreadsheetId=spreadsheetID, range=sheetRange,
    valueInputOption='USER_ENTERED', body=body).execute()

# In số lượng ô đã cập nhật    
print('{0} cells updated.'.format(result.get('updatedCells')))

Sau đây là toàn bộ hàm xuất dữ liệu từ tệp Excel sang bảng tính trong Google Trang tính.

def export_to_google(fileName):
    # Nếu sửa đổi các phạm vi này, hãy xóa tệp token.json.
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

    creds = None
    # Tệp token.json lưu trữ các mã thông báo truy cập và làm mới của người dùng, đồng thời
    # được tạo tự động khi quy trình ủy quyền hoàn tất cho lần đầu tiên
    # thời gian.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
    # Nếu không có thông tin xác thực (hợp lệ) nào khả dụng, hãy để người dùng đăng nhập.
    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)
        # Lưu thông tin đăng nhập cho lần chạy tiếp theo
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('sheets', 'v4', credentials=creds)
        
        # Tải sổ làm việc Excel
        wb = Workbook(fileName)

        # Nhận bộ sưu tập trang tính
        collection = wb.getWorksheets()
        collectionCount = collection.getCount()

        # Nhận bảng tính và tên trang tính đầu tiên
        spreadsheetName = wb.getFileName()
        firstSheetName = collection.get(0).getName()

        # Tạo bảng tính trên Google Trang tính
        spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)

        # Để đặt phạm vi trang tính
        sheetRange = None

        # Lặp lại tất cả các trang tính
       for worksheetIndex in range(collectionCount):

            # Nhận trang tính bằng cách sử dụng chỉ mục của nó
            worksheet = collection.get(worksheetIndex)

            # Đặt phạm vi trang tính
            if(worksheetIndex==0):
                sheetRange= "{0}!A:Y".format(firstSheetName)
            else:
                add_sheet(service, spreadsheetID, worksheet.getName())
                sheetRange= "{0}!A:Y".format(worksheet.getName())

            # Nhận số hàng và cột
            rows = worksheet.getCells().getMaxDataRow()
            cols = worksheet.getCells().getMaxDataColumn()

            # Danh sách lưu trữ dữ liệu của trang tính
            worksheetDatalist = []

            # Lặp qua các hàng
           for i in range(rows):
                # Danh sách để lưu trữ từng hàng trong trang tính 
                rowDataList = []

                # Lặp qua từng cột trong hàng đã chọn
               for j in range(cols):
                    cellValue = worksheet.getCells().get(i, j).getValue()
                    if( cellValue is not None):
                        rowDataList.append(str(cellValue))
                    else:
                        rowDataList.append("")

                # Thêm vào dữ liệu trang tính
                worksheetDatalist.append(rowDataList)

            # Đặt giá trị
            body = {
                'values': worksheetDatalist
            }
            
            # Thực hiện yêu cầu
            result = service.spreadsheets().values().update(
                spreadsheetId=spreadsheetID, range=sheetRange,
                valueInputOption='USER_ENTERED', body=body).execute()

            # In số lượng ô đã cập nhật    
            print('{0} cells updated.'.format(result.get('updatedCells')))
    except HttpError as err:
        print(err)

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

Hoàn thành mã nguồn

Sau đây là mã nguồn hoàn chỉnh để xuất tệp Excel XLSX sang Google Trang tính bằng 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):
    # Nếu sửa đổi các phạm vi này, hãy xóa tệp token.json.
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

    creds = None
    # Tệp token.json lưu trữ mã thông báo truy cập và làm mới của người dùng và
    # được tạo tự động khi quy trình ủy quyền hoàn tất cho lần đầu tiên
    # thời gian.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
    # Nếu không có thông tin xác thực (hợp lệ) nào khả dụng, hãy để người dùng đăng nhập.
    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)
        # Lưu thông tin đăng nhập cho lần chạy tiếp theo
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('sheets', 'v4', credentials=creds)
        
        # Tải sổ làm việc Excel
        wb = Workbook(fileName)

        # Nhận bộ sưu tập trang tính
        collection = wb.getWorksheets()
        collectionCount = collection.getCount()

        # Nhận bảng tính và tên trang tính đầu tiên
        spreadsheetName = wb.getFileName()
        firstSheetName = collection.get(0).getName()

        # Tạo bảng tính trên Google Trang tính
        spreadsheetID = create_spreadsheet(service, spreadsheetName, firstSheetName)

        # Để đặt phạm vi trang tính
        sheetRange = None

        # Lặp lại tất cả các trang tính
       for worksheetIndex in range(collectionCount):

            # Nhận trang tính bằng cách sử dụng chỉ mục của nó
            worksheet = collection.get(worksheetIndex)

            # Đặt phạm vi trang tính
            if(worksheetIndex==0):
                sheetRange= "{0}!A:Y".format(firstSheetName)
            else:
                add_sheet(service, spreadsheetID, worksheet.getName())
                sheetRange= "{0}!A:Y".format(worksheet.getName())

            # Nhận số hàng và cột
            rows = worksheet.getCells().getMaxDataRow()
            cols = worksheet.getCells().getMaxDataColumn()

            # Danh sách lưu trữ dữ liệu của trang tính
            worksheetDatalist = []

            # Lặp qua các hàng
           for i in range(rows):
                # Danh sách để lưu trữ từng hàng trong trang tính 
                rowDataList = []

                # Lặp qua từng cột trong hàng đã chọn
               for j in range(cols):
                    cellValue = worksheet.getCells().get(i, j).getValue()
                    if( cellValue is not None):
                        rowDataList.append(str(cellValue))
                    else:
                        rowDataList.append("")

                # Thêm vào dữ liệu trang tính
                worksheetDatalist.append(rowDataList)

            # Đặt giá trị
            body = {
                'values': worksheetDatalist
            }
            
            # Thực hiện yêu cầu
            result = service.spreadsheets().values().update(
                spreadsheetId=spreadsheetID, range=sheetRange,
                valueInputOption='USER_ENTERED', body=body).execute()

            # In số lượng ô đã cập nhật    
            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):   
    # Chi tiết bảng tính
    spreadsheetBody = {
        'properties': {
            'title': "{0}".format(_title)
        },
        'sheets': {
            'properties': {
                'title' : "{0}".format(_sheetName)
            }
        }
    }

    # Tạo bảng tính
    spreadsheet = _service.spreadsheets().create(body=spreadsheetBody,
                                                fields='spreadsheetId').execute()
    
    # Mở trong trình duyệt web
    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)}
            }
        }
    ]}

    # Thực hiện yêu cầu
    res = _service.spreadsheets().batchUpdate(spreadsheetId=_spreadsheetID, body=data).execute()

 # Tạo một đối tượng Aspose.Cells icense
license = License()

# Đặt giấy phép của Aspose.Cells để tránh các giới hạn đánh giá
license.setLicense("D:\\Licenses\\Conholdate.Total.Product.Family.lic")

export_to_google("Book1.xlsx")

Nhận giấy phép Aspose.Cells miễn phí

Bạn có thể nhận giấy phép tạm thời miễn phí và sử dụng Aspose.Cells for Python mà không có giới hạn đánh giá.

Sự kết luận

Trong bài viết này, bạn đã học cách xuất dữ liệu Excel sang Google Trang tính bằng Python. Chúng tôi đã trình bày cách tạo dự án trên Google Cloud, bật API Google Trang tính, đọc tệp Excel và xuất dữ liệu từ tệp Excel sang Google Trang tính. Để khám phá thêm về Aspose.Cells for Python, bạn có thể truy cập tài liệu. Ngoài ra, bạn có thể đặt câu hỏi của mình qua diễn đàn của chúng tôi.

Xem thêm