Обновление значений в именованных диапазонах Excel с помощью Microsoft Graph API

У меня есть файл Excel, загруженный в Office 365, который доступен через Microsoft Graph API с множеством именованных диапазонов, некоторые из которых являются отдельными значениями, некоторые - блоками ячеек.

Я могу успешно обновить отдельные значения с помощью API, но когда я пытаюсь обновить несколько ячеек одновременно, я сталкиваюсь с проблемами.

В этом примере рассмотрим один массив из 3 ячеек из F10:F12

Я хотел бы заполнить следующим образом:

F10 = A

F11 = B

F12 = C

Итак, я создаю список строк, который в итоге выглядит так ... [ ["A"], ["B"], ["C"] ]

и я передаю его в Graph API, используя следующий код ...

public static async Task<WorkbookRange> UpdateRangeArray(string strItemId, string strSheetName, string strRangeName, List<string> strRangeValues, string strSessionId)
{
    string[][] strValueArray = new string[strRangeValues.Count][];
    try
    {
        int i = 0;
        foreach (var val in strRangeValues)
        {
            strValueArray[i] = new string[1] { val };
            i++;
        }
    }

    var jsonValueArray = JsonConvert.SerializeObject(strValueArray);

    var rangeUpdate = new Microsoft.Graph.WorkbookRange();
    rangeUpdate.Values = jsonValueArray;

    var result = await graphClient.Users[_strUserId].Drive.Items[strItemId].Workbook.Worksheets[strSheetName]
        .Range(strRangeName)
        .Request()
        .Header("workbook-session-id", strSessionId)
        .PatchAsync(rangeUpdate).ConfigureAwait(false);

    return result;

 }

Итак, я могу обновить значения в диапазоне, КРОМЕ вместо ожидаемых значений, я получаю следующее ...

F10 = [ ["A"],["B"],["C"] ]

F11 = [ ["A"],["B"],["C"] ]

F12 = [ ["A"],["B"],["C"] ]

Вместо того, чтобы Graph API помещал первое значение в первую ячейку, второе значение во вторую ячейку и так далее ... Он помещает весь массив данных в каждую ячейку.

Я предполагаю, что это какая-то ошибка форматирования, возможно, мой JSON искажен, или, возможно, я отправляю его, используя неправильную конечную точку Graph API или что-то в этом роде.

Любая помощь будет принята с благодарностью ...

ОБНОВЛЕНИЕ 1:

Я также попытался сделать это с помощью RANGE (т.е. - .Range("F10:F12")) вместо использования NAME, и я получил тот же результат.

ОБНОВЛЕНИЕ 2:

Размещено на GitHub на случай, если это ошибка, а не ошибка пользователя. https://github.com/microsoftgraph/msgraph-sdk-dotnet/issues/695

ОБНОВЛЕНИЕ 3:

Я могу успешно выполнить ПАТЧ через Graph API Explorer по следующему URL-адресу ... https://graph.microsoft.com/v1.0/me/drive/items/ {item-id} / workbook / worksheets / INPUTS / range (address = 'F10: F12')

с этим телом ... {"values":[["Hello"],["How"],["Are You?"]]}

... и это работает.

но по-прежнему не могу заставить его работать через MSGraph-SDK-dotnet

ОБНОВЛЕНИЕ 4:

Я могу заставить его работать правильно, используя Postman, и результирующий код RestSharp, который работает, выглядит так ...

    public static async Task TestUpdatePostman()
    {
        var client = new RestClient("https://graph.microsoft.com/v1.0/users/{USER-ID}/drive/items/{ITEM-ID}/workbook/worksheets/INPUTS/range(address='F10:F12')");
        client.Timeout = -1;
        var request = new RestRequest(Method.PATCH);
        request.AddHeader("Authorization", "Bearer {INSERT-TOKEN}");
        request.AddHeader("Content-Type", "application/json");
        request.AddParameter("application/json", "{\"values\":[[\"Hello\"],[\"How\"],[\"Are You?\"]]}", ParameterType.RequestBody);
        IRestResponse response = client.Execute(request);
        Console.WriteLine(response.Content);
    }

Это снова заставляет меня думать, что существует проблема с тем, как оболочка SDK реализует вызов API.


person gotmike    schedule 19.05.2020    source источник


Ответы (1)


Возможно, это не проблема SDK. При обновлении диапазона rangeUpdate.Values ​​должен иметь тип JToken, а не строку. Попробуйте использовать:

JArray jsonValueArray = JArray.FromObject(strValueArray);
person Phoebe Yuan    schedule 12.08.2020
comment
в этом и была проблема! Благодарность! - person gotmike; 08.12.2020