我有一个加载到 Office 365 中的 Excel 文件,可以通过 Microsoft Graph API 访问该文件,其中包含许多命名范围,有些是单独的值,有些是单元格块。
我可以使用 API 成功更新单个值,但是当我尝试同时更新多个单元格时,我遇到了问题。
对于此示例,请考虑从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(地址='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 调用的方式存在问题。