none
Powershell и Google Drive API (Добавить запись в эл. таблицу на гугл диске) RRS feed

  • Вопрос

  • Есть заранее созданный файл на гугл диске - электронная таблица.

    Необходимо в неё добавить строку с данными (которые сгенерирует powershell скрипт).

    С гугл драйвом взаимодействие идёт через его API для платформы .NET

    Есть официальный пример на .NET: https://developers.google.com/google-apps/spreadsheets/#adding_a_list_row

    Но необходимо сделать тоже самое на Powershell.

    Если есть знатоки интеграции Powershell и .NET, прощу помощи по данному вопросу.

    Для примера, есть рабочий код на powershell по получению списка электронных таблиц с гугл диска:

    http://poshcode.org/890

    15 июля 2013 г. 12:29

Ответы

  • PS >  $feed.Entries | ft row,column,value -auto
    
    Row Column Value
    --- ------ -----
      1      1 Имя
      1      2 Возраст
      2      1 Паша
      2      2 20
      3      1 Маша
      3      2 18


    Добавим запись:

    $service = New-Object Google.GData.Spreadsheets.SpreadsheetsService("exampleRuRus-exampleApp-2")
    $service.setUserCredentials($username, $password)
    $query = New-Object Google.GData.Spreadsheets.CellQuery($keyid, "od6", "private", "full")
    $feed = $service.Query($query)
    
    $lastrow= ($feed.Entries | Measure-Object Row -Maximum).Maximum + 1
    
    $cellEntry = New-Object Google.GData.Spreadsheets.CellEntry($lastrow, 1, "Игорь")
    $feed.Insert($cellEntry)
    $cellEntry = New-Object Google.GData.Spreadsheets.CellEntry($lastrow, 2, "25")
    $feed.Insert($cellEntry)

    Вывод:

    • Помечено в качестве ответа MoxFulder 16 июля 2013 г. 5:40
    15 июля 2013 г. 17:13
    Отвечающий

Все ответы

  • PS >  $feed.Entries | ft row,column,value -auto
    
    Row Column Value
    --- ------ -----
      1      1 Имя
      1      2 Возраст
      2      1 Паша
      2      2 20
      3      1 Маша
      3      2 18


    Добавим запись:

    $service = New-Object Google.GData.Spreadsheets.SpreadsheetsService("exampleRuRus-exampleApp-2")
    $service.setUserCredentials($username, $password)
    $query = New-Object Google.GData.Spreadsheets.CellQuery($keyid, "od6", "private", "full")
    $feed = $service.Query($query)
    
    $lastrow= ($feed.Entries | Measure-Object Row -Maximum).Maximum + 1
    
    $cellEntry = New-Object Google.GData.Spreadsheets.CellEntry($lastrow, 1, "Игорь")
    $feed.Insert($cellEntry)
    $cellEntry = New-Object Google.GData.Spreadsheets.CellEntry($lastrow, 2, "25")
    $feed.Insert($cellEntry)

    Вывод:

    • Помечено в качестве ответа MoxFulder 16 июля 2013 г. 5:40
    15 июля 2013 г. 17:13
    Отвечающий
  • Спасибо! Всё работает =)

    Если кому-то ещё понадобится данная вещь:

    $keyid= ID файла эл. таблицы (берём из ссылки на файл на гугл диске, выделено жирным) https://docs.google.com/a/somedomen.ru/spreadsheet/ccc?key=0AgJ6NH53ZTb93Bd9eVWhvb1E5VGlJLUc3RlZJQ2c#gid=0

    $username= логин аккаунта гугла

    $password= пароль от аккаунта

    И соответственно скачиваем\устанавливаем Google Data API: https://code.google.com/p/google-gdata/downloads/list

    + в скрипте прописываем путь к API:

    Add-Type -Path "C:\Program Files (x86)\Google\Google Data API SDK\Redist\Google.GData.Spreadsheets.dll"

    16 июля 2013 г. 5:55
  • Есть ещё возможность: добавлять данные сразу построчно. Всё как и выше, только используем следующий фрагмент кода:

    $service = New-Object Google.GData.Spreadsheets.SpreadsheetsService("exampleRuRus-exampleApp-2")
    $service.setUserCredentials($username, $password)
    $Listquery = New-Object Google.GData.Spreadsheets.ListQuery($keyid, "od6", "private", "full")
    $listfeed = $service.Query($Listquery)
    $listEntry = New-Object Google.GData.Spreadsheets.ListEntry
    $listEntry.Elements.Add((New-Object Google.GData.Spreadsheets.ListEntry+Custom -Property @{ LocalName = "имяотчество"; Value = "Сергей Иванович" }))
    $listEntry.Elements.Add((New-Object Google.GData.Spreadsheets.ListEntry+Custom -Property @{ LocalName = "фамилия"; Value = "Иванов" }))
    $listfeed.Insert($listEntry)

    Соответственно: 

    LocalName = "имяотчество"

    Это название столбца - обычно соответствует данным в первой строке. НО! Если в ячейке таблицы A1 будет название "Имя отчество", название столбца для запросов будет скорее всего: "имяотчество" - ни каких заглавных букв и пробелов.

    Точно узнать названия столбцов можно , например, таким запросом: 

    $listfeed.Entries[0].Elements.LocalName



    • Изменено MoxFulder 23 сентября 2013 г. 7:42
    23 сентября 2013 г. 7:41