Обновление значений в именованных диапазонах 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")) вместо использования ИМЯ, и я получаю тот же результат.

ОБНОВЛЕНИЕ 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 (адрес ='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.

1 ответ

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

JArray jsonValueArray = JArray.FromObject(strValueArray);
Другие вопросы по тегам