使用图形 API 更新 Excel 命名区域中Microsoft值



我有一个加载到 Office 365 中的 Excel 文件,该文件可通过 Microsoft 图形 API 访问,其中包含许多命名范围,有些是单个值,有些是单元格块。

我可以使用 API 成功更新单个值,但是当我尝试同时更新多个单元格时,我遇到了问题。

对于此示例,请考虑来自F10:F12

我想填充如下:

F10=A

F11=B

F12=C

因此,我创建了最终看起来像这样的字符串列表...[ ["A"], ["B"], ["C"] ]

我使用以下代码将其传递给图形 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"] ]

而不是图形 API 将第一个值放在第一个单元格中,第二个值放在第二个单元格中,依此类推......它将整个数据数组放在每个单元格中。

我认为这是某种格式错误,也许我的 JSON 格式不正确,或者我使用错误的图形 API 端点或其他东西提交它。

任何帮助将不胜感激...

更新 1:

我也尝试使用 RANGE(即 -.Range("F10:F12")(而不是使用 NAME,我得到了相同的结果。

更新 2:

交叉发布在 GitHub 上,以防这是一个错误,而不仅仅是用户错误。 https://github.com/microsoftgraph/msgraph-sdk-dotnet/issues/695

更新 3:

我可以通过图形 API 资源管理器成功修补到以下 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:

我能够使用邮递员让它正常工作,并且生成的 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 调用的方式存在问题。

这可能不是 SDK 问题。更新范围时,rangeUpdate.Values 应该是 JToken 类型而不是字符串。 尝试使用:

JArray jsonValueArray = JArray.FromObject(strValueArray);

最新更新