提示:本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如使用功能不一致,或多个宏代码冲突等),需根据实际需求开发代码。
需求描述
数据库字段数据存储着一些超链接,想利用电子表格将超链接展现,并且实现点击超链接在新窗口打开超链接内容,如下图,点击对应的超链接直接在新窗口中打开连接内容:
解决方案
在电子表格中右键 编辑宏 ,新建一个服务端宏模块,宏对象及事件如下:
类型 | 对象 | 事件 |
---|---|---|
ServerSide | spreadsheetReport | onBeforeOutput |
将以下代码贴到宏代码编辑区:
function main(spreadsheetReport) { spreadsheetReport.printExpandedPositions(); }
再新建一个客户端宏模块,宏对象及事件如下:
类型 | 对象 | 事件 |
---|---|---|
ClientSide | spreadsheetReport | onRender |
将以下代码贴到宏代码编辑区:
function main(spreadsheetReport, isAjaxRefreshCallback) { var C3list = spreadsheetReport.getExpandedPositions("C3");//超链接字段所在单元格 for(var i=0;i<C3list.length;i++ ){ if(spreadsheetReport.getCell(C3list[i])){ var href = spreadsheetReport.getCell(C3list[i]).innerText; spreadsheetReport.getCell(C3list[i]).innerHTML = "<a href="+ href +" target='_blank'>"+ href + "</a>" ; } } }
如需在8.5的APP中打开外部链接需将app更新为2018-12-20后的版本并添加参数:outSideResTitle='外部资源标题':
function main(spreadsheetReport, isAjaxRefreshCallback) { var D3list = spreadsheetReport.getExpandedPositions("D3");//超链接字段所在单元格 for(var i=0;i<D3list.length;i++ ){ if(spreadsheetReport.getCell(D3list[i])){ var href = spreadsheetReport.getCell(D3list[i]).innerText; var text = href; href += href.indexOf("?") > 0 ? '&' : '?'; href += "outSideResTitle=外部资源" //打开外部资源时的标题 spreadsheetReport.getCell(D3list[i]).innerHTML = "<a href="+ href +" target='_blank' >"+ text + "</a>" ; } } }