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

  • Вопрос

  • Продолжение вопроса: http://social.technet.microsoft.com/Forums/ru-RU/f252f77c-bf6d-40ee-ba74-17caef35e9bf/powershell-google-drive-api-

    Исходные данные те же: (только теперь нужно удалить строку)

    -Есть таблица на гугл диске

    -Необходимо удалить определённую строку на определённом листе таблицы

    - Пример на .Net: https://developers.google.com/google-apps/spreadsheets/#deleting_a_list_row

    Должно быть что-то вроде:

    $username=**** #логин от гугл диска
    $password=**** #пароль
    $keyid=**** #id документа
    $tabid="od6" #id листа (od6 всегда для 1-го листа)
    
    $service = New-Object Google.GData.Spreadsheets.SpreadsheetsService("exampleRuRus-exampleApp-2")
    $service.setUserCredentials($username, $password)
    $query = New-Object Google.GData.Spreadsheets.CellQuery($keyid, $tabid, "private", "full")
    $feed = $service.Query($query)
    
    $ListEntry = New-Object Google.GData.Spreadsheets.ListEntry(???) #вместо ??? аргументы с номером строки
    $feed.delete($ListEntry)

    но мне так и не удалось "подсунуть" нужные аргументы...,либо это необходимо сделать совсем по другому )

    Кто знает или разбирался уже, прошу подсказать ;)

    4 сентября 2013 г. 17:14

Ответы

  • $username="*" #логин от гугл диска
    $password="*" #пароль
    $ss = "Number1" #Название таблицы
    
    #Получим все таблицы
    $service = New-Object Google.GData.Spreadsheets.SpreadsheetsService("exampleRuRus-exampleApp-2")
    $service.setUserCredentials($username, $password)
    $query = New-Object Google.GData.Spreadsheets.SpreadsheetQuery
    $feed = $service.Query($query)
    
    #Отфильтруем по имени таблицы
    $entry = $feed.Entries | Where {$_.Title.Text -eq $ss}
    #Получаем ссылку на таблицу
    $link = $entry.Links.FindService([Google.GData.Spreadsheets.GDataSpreadsheetsNameTable]::WorksheetRel, $null)
    #Делаем запрос на получение рабочих листов
    $wquery = New-Object Google.GData.Spreadsheets.WorksheetQuery($link.HRef.ToString())
    
    $wfeed = $service.Query($wquery)
    #Выбираем первый рабочий лист
    $ws = $wfeed.Entries[0]
    $list = $ws.Links.FindService([Google.GData.Spreadsheets.GDataSpreadsheetsNameTable]::ListRel, $null)
    
    $lquery = New-Object Google.GData.Spreadsheets.ListQuery($list.HRef.ToString())
    $lfeed = $service.Query($lquery)
    #Выбираем первую строку и удаляем
    $lfeed.Entries[0].Delete()

    • Изменено KazunEditor 4 сентября 2013 г. 18:49 Обновление условия
    • Помечено в качестве ответа MoxFulder 5 сентября 2013 г. 5:44
    4 сентября 2013 г. 17:47
    Отвечающий

Все ответы

  • $username="*" #логин от гугл диска
    $password="*" #пароль
    $ss = "Number1" #Название таблицы
    
    #Получим все таблицы
    $service = New-Object Google.GData.Spreadsheets.SpreadsheetsService("exampleRuRus-exampleApp-2")
    $service.setUserCredentials($username, $password)
    $query = New-Object Google.GData.Spreadsheets.SpreadsheetQuery
    $feed = $service.Query($query)
    
    #Отфильтруем по имени таблицы
    $entry = $feed.Entries | Where {$_.Title.Text -eq $ss}
    #Получаем ссылку на таблицу
    $link = $entry.Links.FindService([Google.GData.Spreadsheets.GDataSpreadsheetsNameTable]::WorksheetRel, $null)
    #Делаем запрос на получение рабочих листов
    $wquery = New-Object Google.GData.Spreadsheets.WorksheetQuery($link.HRef.ToString())
    
    $wfeed = $service.Query($wquery)
    #Выбираем первый рабочий лист
    $ws = $wfeed.Entries[0]
    $list = $ws.Links.FindService([Google.GData.Spreadsheets.GDataSpreadsheetsNameTable]::ListRel, $null)
    
    $lquery = New-Object Google.GData.Spreadsheets.ListQuery($list.HRef.ToString())
    $lfeed = $service.Query($lquery)
    #Выбираем первую строку и удаляем
    $lfeed.Entries[0].Delete()

    • Изменено KazunEditor 4 сентября 2013 г. 18:49 Обновление условия
    • Помечено в качестве ответа MoxFulder 5 сентября 2013 г. 5:44
    4 сентября 2013 г. 17:47
    Отвечающий
  • Спасибо за развёрнутый ответ, стал более понятен принцип работы Drive API.

    Можно "укоротить" код, если заранее известны (они не меняются, если только не удалять и заново не создавать таблицу\лист в ней):

    • id таблицы (если открыть в браузере нужную таблицу, в адресной строке id таблицы будет (то, что я выделил жирным): https://......./spreadsheet/ccc?key=0AgJ6TD12ZQpadDhhazY4YmZPMzlqNXZycWtMb1hJWXc#gid=0)
    • id листа (опять открываем браузер, вставляем в адресную строку: https://spreadsheets.google.com/feeds/worksheets/YOUR_SPREADSHEET_ID/private/full и заменяем YOUR_SPREADSHEET_ID на id таблицы, переходим по полученной ссылке. В полученном xml, ищем все теги <id></id> - будет по одному такому тегу на каждый лист в таблице. То, что я выделил жирным, будет id листа: <id>https://spreadsheets.google.com/feeds/worksheets/0AgJ6TD12ZQpadDhhazY4YmZPMzlqNXZycWtMb1hJWXc/private/full/od6</id> Для первого листа в таблице id всегда будет od6 )
    $username=**** #логин от гугл диска
    $password=**** #пароль
    $keyid=**** #id документа
    $tabid="od6" #id листа (od6 всегда для 1-го листа)
    
    $service = New-Object Google.GData.Spreadsheets.SpreadsheetsService("exampleRuRus-exampleApp-2")
    $service.setUserCredentials($username, $password)
    $query = New-Object Google.GData.Spreadsheets.ListQuery($keyid, $tabid, "private", "full")
    $feed = $service.Query($query)
    $feed.Entries[0].Delete() #удаляем первую строку из таблицы

    5 сентября 2013 г. 6:15