c# - 使用带有 Microsoft Graph API 的 Sharepoint 文档库处理 Excel 文件

标签 c# office365 microsoft-graph-api sharepoint-online

我下载并定制了这个项目asp mvc todo sample .这工作正常,onedrive excel 文件/项目没有任何问题。但我必须只在线使用 Office 365 Sharepoint 来做到这一点。 我可以使用服务点获取文件 ID,如下所示:

var serviceEndpoint = "https://graph.microsoft.com/beta/sites/mydomain.sharepoint.com:/foa/bd:/lists/Budget/items";

但我不确定如何使用 Sharepoint 定义工作簿端点 URL 以更新/操作相同的 excel 文件数据。当前工作簿端点 URL 如下(不起作用):

var workbookEndpoint = "https://graph.microsoft.com/beta/sites/mydomain.sharepoint.com:/foa/bd:/lists/Budget/items/" + fileId + "/workbook";

我在 Sharepoint 上更新 excel 文件中单元格值的完整方法如下:

public static async Task UpdateExcelCellValue_Sharepoint(string accessToken, string cellAddress, string val)
    {
        string worksheetName = "Parameters";
        var serviceEndpoint = "https://graph.microsoft.com/beta/sites/mydomain.sharepoint.com:/foa/bd:/lists/Budget/items";
        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
        var filesResponse = await client.GetAsync(serviceEndpoint + "?$select=name,id");
        if (filesResponse.IsSuccessStatusCode)
        {
            var filesContent = await filesResponse.Content.ReadAsStringAsync();
            JObject parsedResult = JObject.Parse(filesContent);
            foreach (JObject file in parsedResult["value"])
            {
                var name = (string)file["id"];
                if (name.Contains("173"))
                {
                    fileId = (string)file["id"];
                    break;
                }
            }
        }
        else
        {
            //Handle failed response
        }
        //Set up workbook and worksheet endpoints
        var workbookEndpoint = "https://graph.microsoft.com/beta/sites/mydomain.sharepoint.com:/foa/bd:/lists/Budget/items/" + fileId + "/workbook";
        var worksheetsEndpoint = workbookEndpoint + "/worksheets";
        var patchMethod = new HttpMethod("PATCH");
        var summaryTableRowJson = "{" +
                "'values': '" + val + ".csv'" +
            "}";
        var colNamePatchBody = new StringContent(summaryTableRowJson);
        colNamePatchBody.Headers.Clear();
        colNamePatchBody.Headers.Add("Content-Type", "application/json");
        var colNameRequestMessage = new HttpRequestMessage(patchMethod, worksheetsEndpoint +
            "('" + worksheetName + "')/range(address='Parameters!B2')")
        { Content = colNamePatchBody };
        var colNameResponseMessage = await client.SendAsync(colNameRequestMessage);
    }

最佳答案

现在应该可以了。例如,这是一条有效的路径:

https://graph.microsoft.com/beta/sites/{tenant-name}.sharepoint.com/lists/{id}/drive/root:/Book.xlsx:/workbook。这是其中一种可能。

您始终可以尝试用 ID 替换路径,看看是否有效(两者都应该有效)。

关于c# - 使用带有 Microsoft Graph API 的 Sharepoint 文档库处理 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45715200/

相关文章:

c# - 将命令参数传递给 WPF 中 ViewModel 中的方法?

c# - 欧拉计划的问题问题 12

c# - 如何使 WCF 服务服务器-客户端时差独立?

node.js - 我想在 Microsoft Teams 中垂直显示按钮

azure - MSGraph 单点登录的最佳身份验证流程

c# - ASP.NET - 在页面加载时从 QueryString 值设置 SqlDataSource 参数值的最佳实践?

python - Office 365 授权代码请求

c# - 在 Android (Xamarin) 上实现 Office 365 API 的问题

azure - 如何从 Microsoft Graph API 解析 "Transient error"?

azure - 非管理员的 Microsoft Graph API 权限?