Как я могу получить доступ ко всем моим идентификаторам электронных таблиц Google? - PullRequest
0 голосов
/ 15 февраля 2019

Я довольно плохо знаком с кодированием и c #.Я создаю приложение, которое обращается к электронным таблицам Google через API, я превращаю эти данные в XML, архивирую их и записываю в поток.Это работает нормально, но вместо добавления каждого идентификатора электронной таблицы вручную в мой список, я хочу сделать еще один вызов API, который будет извлекать каждый идентификатор в моей учетной записи Google Pages, чтобы я мог сохранить их в списке и обновлять каждый раз, когда я запускаю приложение,

Я бьюсь головой об стену в поисках ответов, но я думаю, что это не доступно через API листов, но, возможно, через API накопителя ??, любая помощь будет принята с благодарностью, я не смотрючтобы кто-нибудь мог написать мой код, но, пожалуйста, укажите мне правильное направление, или я пытаюсь сделать что-то, что невозможно сделать?

public class GoogleSheetsReader
{

  private string apiKey;
  public Stream OutStream { get; set; }
  List<string> SpreadSheetIdList { get; set; }

  public GoogleSheetsReader(string apiKey)
  {
     this.apiKey = apiKey;

  }

  public Stream Main()
  {
     SheetsService sheetsService = new SheetsService(new BaseClientService.Initializer
     {
        HttpClientInitializer = GetCredential(),
        ApplicationName = "My Project To XML",
        ApiKey = apiKey,
     });


     using (MemoryStream memory = new MemoryStream())
     {
        using (ZipArchive zip = new ZipArchive(memory, ZipArchiveMode.Create))
        {
           SpreadSheetIdList = new List<string>(); // not the best place for the list, just testing funtionality
           SpreadSheetIdList.Add("1oZlfj6XZOrPs9Qti9K9iKL6itZChM8dlwwJFSvBNzUc");
           SpreadSheetIdList.Add("1oU3sjd7QoOgQ2PvmC7NxciyM1MRXns6-Z9vMayFgOjU");

           foreach (var spreadSheetId in SpreadSheetIdList)
           {
              var ssRequest = sheetsService.Spreadsheets.Get(spreadSheetId);
              Data.Spreadsheet service = ssRequest.Execute();

              foreach (var sheet in service.Sheets)
              {
                 var sheetName = sheet.Properties.Title;
                 SpreadsheetsResource.ValuesResource.GetRequest request = sheetsService.Spreadsheets.Values.Get(spreadSheetId, sheetName);

                 SpreadsheetsResource.GetRequest requestForSpreadSheet = sheetsService.Spreadsheets.Get(spreadSheetId);
                 requestForSpreadSheet.Ranges = sheetName;

                 Data.Spreadsheet response1 = requestForSpreadSheet.Execute();
                 var spreadSheetName = response1.Properties.Title;

                 Data.ValueRange response = request.Execute();
                 ZipArchiveEntry entry = zip.CreateEntry($"{spreadSheetName}\\{sheetName}.xml");

                 using (Stream ZipFile = entry.Open())
                 {
                    byte[] data = Encoding.ASCII.GetBytes(SchemaMaker(response)); // SchemaMaker converts my sheet data to required xml format
                    ZipFile.Write(data, 0, data.Length);
                 }
              }
           }
        }
        OutStream = new MemoryStream(memory.ToArray());
     }
     return OutStream;
  }

  public string SchemaMaker(ValueRange _param)
  {
     var result = "<TABLE>";
     var headers = _param.Values[0];

     for (int i = 1; i < _param.Values.Count; i++)
     {
        result = result + "<ROW>";
        for (int j = 0; j < _param.Values[i].Count; j++)
        {
           result = result + $"<{headers[j]}>{_param.Values[i][j]}</{headers[j]}>";
        }
        result = result + "</ROW>";
     }
     result = result + "</TABLE>";

     var element = XElement.Parse(result);
     var settings = new System.Xml.XmlWriterSettings();
     settings.OmitXmlDeclaration = true;
     settings.Indent = true;
     settings.NewLineOnAttributes = true;
     var xmlFormat = element.ToString();

     return xmlFormat;
  }

  public static UserCredential GetCredential()
  {
     string[] Scopes = { SheetsService.Scope.SpreadsheetsReadonly };
     return null;
  }
 }
...