Google Таблицы SortSpecs

Я пытаюсь создать запрос для Google Таблиц, но у меня проблемы с методом sortSpecs.

var test = new Request()
        {
            SortRange = new SortRangeRequest()
            {
                Range = new GridRange()
                {
                    SheetId = 0,
                    StartRowIndex = 1                        
                },
                SortSpecs = new SortSpec()
                {
                    SortOrder = "ASCENDING",
                    DimensionIndex = 0
                }
            }
        };

При его использовании все работает правильно, кроме SortSpec. Visual Studio выдает ошибку:

Невозможно неявно преобразовать тип 'Google.Apis.Sheets.v4.Data.SortSpec' в System.Collections.Generic.IList 'Существует явное преобразование

ОБНОВЛЕНИЕ:

Ошибок сборки больше нет, но теперь у меня другая ошибка при выполнении кода.

        List<Data.Request> requests = new List<Data.Request>();  // TODO: Update placeholder value.

        Data.SortSpec so = new Data.SortSpec();
        so.SortOrder = "ASCENDING";

        Data.SortSpec di = new Data.SortSpec();
        di.DimensionIndex = 0;

        List<Data.SortSpec> ss = new List<Data.SortSpec>();
        ss.Add(so);
        ss.Add(di);

        var test = new Request()
        {
            SortRange = new SortRangeRequest()
            {
                Range = new GridRange()
                {
                    SheetId = 0,
                    StartRowIndex = 1
                },
                SortSpecs = ss
            }

        };

        requests.Add(test);

Данное исключение

Сообщение [Недействительные запросы [0] .sortRange: порядок сортировки не указан.] Местоположение [-] Причина [badRequest] Домен [глобальный]


person Seth    schedule 27.07.2017    source источник


Ответы (2)


Согласно справочной документации, SortSpecs является список предметов, а не единичный предмет. В сообщении об ошибке также говорится об этом (он не может преобразовать SortSpec в IList). Если вы хотите использовать один SortSpec для своих спецификаций сортировки, создайте список, поместите в него этот единственный элемент и назначьте SortSpecs этому списку.

person Sam Berlin    schedule 27.07.2017
comment
Итак, я попробовал сделать это: Data.SortSpec so = new Data.SortSpec (); so.SortOrder = по возрастанию; Data.SortSpec di = новый Data.SortSpec (); di.DimensionIndex = 0; Список ‹Data.SortSpec› ss = new List ‹Data.SortSpec› (); ss.Add (так); ss.Add (di); С SortSpecs = ss под sortRange в запросе. Ошибок сборки нет, но при запуске я получаю сообщение об ошибке Недопустимые запросы [0] .sortRange: порядок сортировки не указан. [400] - person Seth; 27.07.2017

Похоже, вы создаете экземпляры 2 новых объектов SortSpec, но вам просто нужно создать экземпляр 1 объекта и присвоить значения 2 из его полей «SortOrder» и «DimentionIndex». У меня было такое же требование сортировки листов, и я смог решить его следующим образом:

        BatchUpdateSpreadsheetRequest reqbody = new BatchUpdateSpreadsheetRequest();
        SortSpec ss = new SortSpec();
        ss.DimensionIndex = 1;
        ss.SortOrder = "ASCENDING";

        GridRange rangetosort = new GridRange();
        rangetosort.StartColumnIndex = 0;
        rangetosort.EndColumnIndex = 12;
        rangetosort.StartRowIndex = 2;
        rangetosort.EndRowIndex = totalrows;
        rangetosort.SheetId = sheetgid;

        SortRangeRequest srr = new SortRangeRequest();
        srr.Range = rangetosort;
        IList<SortSpec> sortspecs = new List<SortSpec>();
        sortspecs.Add(ss);
        srr.SortSpecs = sortspecs;
        Request req1 = new Request();
        req1.SortRange = srr;
        IList<Request> req2 = new List<Request>();
        req2.Add(req1);
        reqbody.Requests = req2;

        SpreadsheetsResource.BatchUpdateRequest sortreq = sheetsrv1.Spreadsheets.BatchUpdate(reqbody, spid);
        try
        {
            sortreq.Execute();
            Console.WriteLine("Sorting Operation successfull");
        }
        catch(Exception ex6)
        {
            Console.WriteLine(ex6.Message);
        }
person Nemo    schedule 21.11.2018