.Net Core中使用Google.Apis.Sheets.v4获取Google表格单元格超链接
解决方案
完全可以通过Google.Apis.Sheets.v4官方SDK实现该需求,不需要手动拼接HTTP请求,根据超链接的存储形式选择对应方案即可:
场景1:超链接以HYPERLINK公式存储(单元格内容为=HYPERLINK("链接地址","展示文本")格式)
仅需要在原有代码的请求中添加ValueRenderOption参数配置即可,修改后的代码如下:
SheetsService service = new SheetsService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = appName, }); string spreadSheetName = config.AppSettings.Settings["SpreadSheet"].Value; string spreadsheetId = config.AppSettings.Settings["ListSpreadSheetId"].Value; string range = spreadSheetName + myRange; // API call SpreadsheetsResource.ValuesResource.GetRequest request = service.Spreadsheets.Values.Get(spreadsheetId, range); // 新增配置:返回单元格原始公式而非渲染后的文本 request.ValueRenderOption = SpreadsheetsResource.ValuesResource.GetRequest.ValueRenderOptionEnum.FORMULA; ValueRange response = request.Execute(); IList<IList<Object>> values = response.Values;
返回的values集合中对应单元格会返回完整的HYPERLINK公式,自行解析即可提取超链接地址。
场景2:超链接为单元格内嵌属性(通过右键菜单「插入链接」添加,无公式)
Values接口无法读取该类超链接,需要改用Spreadsheets.Get接口拉取网格数据实现,示例代码如下:
SheetsService service = new SheetsService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = appName, }); string spreadSheetName = config.AppSettings.Settings["SpreadSheet"].Value; string spreadsheetId = config.AppSettings.Settings["ListSpreadSheetId"].Value; string range = spreadSheetName + myRange; // 改用Spreadsheets.Get请求 SpreadsheetsResource.GetRequest request = service.Spreadsheets.Get(spreadsheetId); // 配置查询范围 request.Ranges = range; // 开启返回网格数据 request.IncludeGridData = true; // 配置返回字段,仅取需要的内容减少响应体积 request.Fields = "sheets(data(rowData(values(hyperlink,formattedValue))))"; var response = request.Execute(); // 遍历提取数据 var sheetData = response.Sheets.FirstOrDefault()?.Data.FirstOrDefault(); if (sheetData != null) { foreach (var row in sheetData.RowData) { foreach (var cell in row.Values) { string displayText = cell.FormattedValue; // 单元格展示文本 string hyperlink = cell.Hyperlink; // 单元格内嵌超链接,无超链接时为null // 处理业务逻辑 } } }
内容的提问来源于stack exchange,提问作者Maksym Khomiak
相关产品推荐
相关产品推荐

