Microsoft graph api Microsoft Graph API何时在Excel中完成计算?
我可以在这里看到如何使用Microsoft Graph API触发电子表格的计算。。。 但是,当我从计算中提取结果时,它们似乎没有更新。然而,我拉了第二次或第三次,它通常是更新 我假设这意味着计算并没有完成文件大小或计算复杂性的b/c 然而,由于是异步的,我没有找到任何方法来检查计算何时完成 你知道怎么做吗 更新1: 这是我(现在)用来创建会话的代码(per) 这会给我一个像这样的“id”值Microsoft graph api Microsoft Graph API何时在Excel中完成计算?,microsoft-graph-api,microsoft-graph-excel,Microsoft Graph Api,Microsoft Graph Excel,我可以在这里看到如何使用Microsoft Graph API触发电子表格的计算。。。 但是,当我从计算中提取结果时,它们似乎没有更新。然而,我拉了第二次或第三次,它通常是更新 我假设这意味着计算并没有完成文件大小或计算复杂性的b/c 然而,由于是异步的,我没有找到任何方法来检查计算何时完成 你知道怎么做吗 更新1: 这是我(现在)用来创建会话的代码(per) 这会给我一个像这样的“id”值 cluster=US5&session=15.SN3PEPF000074ED1.A82.1.V
cluster=US5&session=15.SN3PEPF000074ED1.A82.1.V24.7737Nwad4oPuVafaO%2fpAkiay14.5.en-US5.en-US26.10037ffe965d2cf2-Unlimited1.A1.N16.16.0.12904.3505114.5.en-US5.en-US1.V1.N0.1.A&usid=1b230e8f-3bd0-cdaa-2da6-47db74154075
using Microsoft.Graph;
// strItemId = the id from the microsoft graph api of the item
// strUserId = the id of the user from the microsoft graph api (note: must have permissions set correctly)
public static async Task<WorkbookSessionInfo> GetWorkbookSessionId(string strItemId, string strUserId)
{
// true = you can see changes in the workbook
// false = don't update the workbook, just do calculations
var persistChanges = true;
try
{
var wrkbk = await graphClient.Users[strUserId].Drive.Items[strItemId].Workbook
.CreateSession(persistChanges)
.Request()
.PostAsync();
var result = wrkbk;
return result;
}
catch (Exception ex)
{
Console.WriteLine($"Error getting items: {ex.Message}");
return null;
}
}
我不确定如何/在何处使用它,或者我是否使用整个东西(它看起来像一个查询字符串),或者我是否应该解析并提取其中一个值
cluster=US5
session=15.SN3PEPF000074ED1.A82.1.V24.xxxxxxxxxxxxxxxxx%2fpAkiay14.5.en-US5.en-US26.10037ffe965d2cf2-Unlimited1.A1.N16.16.0.12904.3505114.5.en-US5.en-US1.V1.N0.1.A
usid=1b230e8f-3bd0-cdaa-2da6-xxxxxxxxxxxx
这是我用来触发计算的代码,但不知道如何连接这两个
var calculationType = "FullRebuild";
await graphClient.Me.Drive.Items[strItemId].Workbook.Application
.Calculate(calculationType)
.Request()
.PostAsync();
另外,我发现可以创建、刷新和关闭会话,但不能完全确定如何检查会话中的特定异步进程
下面是我用来检查特定范围内某个值的代码,也不确定在哪里传递会话id
var result = await graphClient.Me.Drive.Items[strItemId].Workbook.Worksheets[strSheetName]
.Range(strRangeName)
.Request()
.GetAsync();
更新2:
通过传递工作簿会话id
(上面显示的整个字符串),我可以在同一会话中成功运行API调用(可能),并得到预期的204无内容
响应。但是,从Microsoft Graph Explorer中的c#代码片段不清楚如何在请求中传递工作簿会话id
下面是它提供的代码
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
await graphClient.Me.Drive.Items["{item-id}"].Workbook.Application
.Calculate(null)
.Request()
.PostAsync();
因此问题仍然存在,我如何执行PostAsync
或GetAsync
并引用工作簿会话id
这个代码没有给我一个错误
await graphClient.Me.Drive.Items[strItemId].Workbook.Application
.Calculate(calculationType)
.Request()
.Header("workbook-session-id",wrkbk.Id)
.PostAsync();
现在的问题是,我什么时候才能获得
工作簿会话id
?当我最初打开工作簿,然后将其传递给每个呼叫时,我是否得到了它?您应该创建一个会话,并在每个请求中传递会话Id。出现
请求中的会话Id确保您以最高效的方式使用Excel API
这是可能的
在这里查看,经过大量测试后,我找到了答案 答案是使用
CreateSession
方法()获取工作簿信息,然后设置persistChanges
设置,然后返回有关工作簿会话的信息
像这样
cluster=US5&session=15.SN3PEPF000074ED1.A82.1.V24.7737Nwad4oPuVafaO%2fpAkiay14.5.en-US5.en-US26.10037ffe965d2cf2-Unlimited1.A1.N16.16.0.12904.3505114.5.en-US5.en-US1.V1.N0.1.A&usid=1b230e8f-3bd0-cdaa-2da6-47db74154075
using Microsoft.Graph;
// strItemId = the id from the microsoft graph api of the item
// strUserId = the id of the user from the microsoft graph api (note: must have permissions set correctly)
public static async Task<WorkbookSessionInfo> GetWorkbookSessionId(string strItemId, string strUserId)
{
// true = you can see changes in the workbook
// false = don't update the workbook, just do calculations
var persistChanges = true;
try
{
var wrkbk = await graphClient.Users[strUserId].Drive.Items[strItemId].Workbook
.CreateSession(persistChanges)
.Request()
.PostAsync();
var result = wrkbk;
return result;
}
catch (Exception ex)
{
Console.WriteLine($"Error getting items: {ex.Message}");
return null;
}
}
使用Microsoft.Graph;
//strItemId=项目的microsoft graph api中的id
//strUserId=来自microsoft graph api的用户id(注意:必须正确设置权限)
公共静态异步任务GetWorkbooksSessionId(字符串strItemId、字符串strUserId)
{
//true=您可以在工作簿中看到更改
//false=不更新工作簿,只进行计算
var=true;
尝试
{
var wrkbk=await-graphClient.Users[strUserId].Drive.Items[strItemId].工作簿
.CreateSession(持久化更改)
.Request()
.PostAsync();
var结果=wrkbk;
返回结果;
}
捕获(例外情况除外)
{
WriteLine($“获取项时出错:{ex.Message}”);
返回null;
}
}
然后返回一个WorkbookSessionInfo
对象,其中包括SessionId
,供后续调用使用。这样,它可以使您的所有呼叫保持在同一会话中
啊,好吧,开始有意义了。但是如何使用calculate函数传递会话id(在c中)?会话似乎处于
工作簿
级别,没有看到任何关于如何在工作簿.应用程序
级别使用会话id的文档。@gotmike,感谢您的回复。为什么不试试这是图形浏览器一次,在请求头中传递会话id并检查它是否工作。这可能是api的问题。这个异步应该可以在这里工作。好的,我在图形浏览器中尝试了一下,得到了一个会话id(上面提到的更新),但不确定在触发计算的步骤中如何使用它。而且,我不知道如何知道它何时完成。