![](/img/trans.png)
[英]Work with Excel file using Sharepoint document library with Microsoft Graph API
[英]Update Values in Excel Named Ranges using Microsoft Graph API
我有一個 Excel 文件加載到 Office 365 中,該文件可通過 Microsoft Graph API 訪問,其中包含許多命名范圍,有些是單獨的值,有些是單元格塊。
我可以使用 API 成功更新單個值,但是當我嘗試同時更新多個單元格時,我遇到了問題。
對於此示例,請考慮F10:F12
中的單個 3 單元數組
我想填充如下:
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"] ]
而不是 Graph API 將第一個值放在第一個單元格中,第二個值放在第二個單元格中,依此類推......它將整個數據數組放在每個單元格中。
我認為這是某種格式錯誤,也許我的 JSON 格式錯誤,或者我使用錯誤的 Graph API 端點或其他東西提交它。
任何幫助將不勝感激...
更新 1:
我也嘗試使用 RANGE(即 - .Range("F10:F12")
)而不是使用 NAME 來執行此操作,我得到了相同的結果。
更新 2:
交叉發布在 GitHub 上,以防這是一個錯誤,而不僅僅是用戶錯誤。 https://github.com/microsoftgraph/msgraph-sdk-dotnet/issues/695
更新 3:
I can successfully PATCH via the Graph API Explorer to the following 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 調用的方式存在問題。
它可能不是 SDK 問題。 更新范圍時,rangeUpdate.Values 應該是 JToken 類型而不是字符串。 嘗試使用:
JArray jsonValueArray = JArray.FromObject(strValueArray);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.