簡體   English   中英

使用 Microsoft Graph API 更新 Excel 命名范圍中的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM