Как вы копируете значения из одной электронной таблицы в другую, используя gspread или другим способом? - PullRequest
3 голосов
/ 19 марта 2020

(новичок) Я пытаюсь скопировать значения из одной электронной таблицы в другую, используя python. Я использую gspread, но не могу понять, как скопировать значения из моей первой таблицы в другую. Как я могу скопировать значения из первой электронной таблицы и вставить ее в другую, используя python?

Вот обновленный код: import gspread

from oauth2client.service_account import ServiceAccountCredentials


scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/spreadsheets','https://www.googleapis.com/auth/drive.file','https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('sheetproject-956vg2854670.json',scope)
client = gspread.authorize(creds)






spreadsheetId= "1CkeZ8Xw4Xmho-mrFP9teHWVT-unkApzMSUFql5KkrGI"
sourceSheetName = "python test"
destinationSheetName = "python csv"

client = gspread.authorize(creds)
spreadsheet = client.open_by_key(spreadsheetId)
sourceSheetId = spreadsheet.worksheet("python test")._properties['0']. #gid value in the url
destinationSheetId = spreadsheet.worksheet("python csv")._properties['575313690'] #gid value in the url
body = {
    "requests":  [
        {
            "copypaste": {
                "source": {
                    "sheetId": 0,

                    "startRowIndex": 0,
                    "endRowIndex": 20,
                    "startColumnIndex": 0,
                    "endcolumnIndex": 1
                },
                "destination": {
                    "sheetId": 575313690,
                    "startRowIndex": 0,
                    "endRowIndex": 20,
                    "startColumnIndex": 0,
                    "endcolumnIndex": 1
                },
                "pasteType": "Paste_Normal"
            }
        }
    ]
}
res = spreadsheet.batch_update(body)
print(res)

Ответы [ 2 ]

1 голос
/ 21 марта 2020
  • Вы хотите скопировать значения из листа на другой лист в электронной таблице Google.
  • Вы хотите добиться этого с помощью gspread с python.
  • У вас уже есть удалось получить и разместить значения для таблицы Google с помощью API Google Sheets.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

В этом ответе я хотел бы предложить использовать batch_update для копирования значений из листа на другой лист в электронной таблице. В этом случае ваша цель может быть достигнута одним вызовом API.

Пример сценария:

В этом примере сценария сценарий авторизации удален. Пример сценария для копирования значений из листа на другой лист в электронной таблице. Поэтому, когда вы используете этот скрипт, пожалуйста, добавьте скрипт авторизации и запустите скрипт.

spreadsheetId = "###"  # Please set the Spreadsheet ID.
sourceSheetName = "Sheet1"  # Please set the sheet name of source sheet.
destinationSheetName = "Sheet2"  # Please set the sheet name of destination sheet.

client = gspread.authorize(credentials)
spreadsheet = client.open_by_key(spreadsheetId)
sourceSheetId = spreadsheet.worksheet(sourceSheetName)._properties['sheetId']
destinationSheetId = spreadsheet.worksheet(destinationSheetName)._properties['sheetId']
body = {
    "requests": [
        {
            "copyPaste": {
                "source": {
                    "sheetId": sourceSheetId,
                    "startRowIndex": 0,
                    "endRowIndex": 5,
                    "startColumnIndex": 0,
                    "endColumnIndex": 5
                },
                "destination": {
                    "sheetId": destinationSheetId,
                    "startRowIndex": 0,
                    "endRowIndex": 5,
                    "startColumnIndex": 0,
                    "endColumnIndex": 5
                },
                "pasteType": "PASTE_VALUES"
            }
        }
    ]
}
res = spreadsheet.batch_update(body)
print(res)

Примечание:

  • В этом примере скрипта значения ячеек A1:E5 в листе "Лист1" копируются в ячейки A1:E5 в листе "Лист2".
  • В этом случае диапазон задается GridRange .
  • Это простой пример сценария. Поэтому, пожалуйста, измените это для вашей реальной ситуации.

Ссылки:

Если я неправильно понял ваш вопрос, и вы не указали хочу, извиняюсь.

0 голосов
/ 19 марта 2020

1) Импорт библиотеки openpyxl в формате xl.

2) Откройте исходный файл excel, используя путь к нему.

Примечание. Путь должен быть строкой и иметь двойное значение обратная косая черта (\) вместо одиночной обратной косой черты sh (). Например: Путь должен быть C: \ Users \ Desktop \ source.xlsx Вместо C: \ Users \ Admin \ Desktop \ source.xlsx

3) Открыть необходимый лист для копирования с использованием индекса этого Индекс рабочего листа 'n' равен 'n-1'. Например, индекс рабочего листа 1 равен 0.

4) Откройте целевой файл Excel и активный рабочий лист в нем.

5) Рассчитайте общее количество строк и столбцов в исходном Excel file.

6) Используйте два цикла for (один для итерации по строкам и другой для итерации по столбцам файла Excel), чтобы прочитать значение ячейки в исходном файле в переменную и затем записать его в ячейку в файл назначения из этой переменной.

7) Сохраните файл назначения.

Вот пример кода только для py из Как скопировать лист Excel в другую книгу в Python :

    import openpyxl as xl

path1 = 'C:\\Users\\Xukrao\\Desktop\\workbook1.xlsx'
path2 = 'C:\\Users\\Xukrao\\Desktop\\workbook2.xlsx'

wb1 = xl.load_workbook(filename=path1)
ws1 = wb1.worksheets[0]

wb2 = xl.load_workbook(filename=path2)
ws2 = wb2.create_sheet(ws1.title)

for row in ws1:
    for cell in row:
        ws2[cell.coordinate].value = cell.value

wb2.save(path2)
...