Google Sheets API返回旧值而非最新值的问题求助
解决Google Sheets API获取
=now()旧值的问题 问题描述
表格第一个单元格使用公式=now(),设置为每分钟自动重算,UI端能正常实时更新时间,但通过API获取数据时,返回的是20分钟前的旧值,而非最新计算结果。
原代码示例:
var request = sheetsService.Spreadsheets.Get("1ldtIl7h75_OIvK8iRadvhMBI7-NUPLWTuuzOjzuxtcs"); request.IncludeGridData = true; var spreadsheet = request.Execute(); Console.WriteLine(spreadsheet.Sheets[0].Data[0].RowData[0].Values[0].FormattedValue); // 输出旧值
解决方案
方法1:改用Spreadsheets.Values.Get接口
这个接口会直接触发实时计算,返回最新的公式结果,适合单独获取特定单元格/范围的数据:
var request = sheetsService.Spreadsheets.Values.Get("1ldtIl7h75_OIvK8iRadvhMBI7-NUPLWTuuzOjzuxtcs", "Sheet1!A1"); request.ValueRenderOption = ValuesResource.GetRequest.ValueRenderOptionEnum.FormattedValue; var response = request.Execute(); Console.WriteLine(response.Values[0][0]); // 输出最新时间
方法2:在原请求中指定ValueRenderOption
如果需要保留Spreadsheets.Get的调用方式,显式设置ValueRenderOption参数,强制获取实时计算后的格式化值:
var request = sheetsService.Spreadsheets.Get("1ldtIl7h75_OIvK8iRadvhMBI7-NUPLWTuuzOjzuxtcs"); request.IncludeGridData = true; request.ValueRenderOption = SpreadsheetsResource.GetRequest.ValueRenderOptionEnum.FormattedValue; var spreadsheet = request.Execute(); Console.WriteLine(spreadsheet.Sheets[0].Data[0].RowData[0].Values[0].FormattedValue);
原因说明
Google Sheets API的Spreadsheets.Get接口默认会缓存网格数据,对于=now()这类动态时间公式,缓存有效期较长,导致返回旧值。而显式指定ValueRenderOption=FORMATTED_VALUE或改用Values.Get接口,会绕过缓存,触发实时计算,从而得到最新的结果。
内容的提问来源于stack exchange,提问作者subject-q
相关产品推荐
相关产品推荐

