Обновление значений в именованных диапазонах 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);