(此文档仅供参考)
问题说明
需求场景:电子表格单元格中使用计算公式获取计算结果,希望导出成静态excel文件后鼠标点击单元格不显示公式。
解决方案
可以通过写服务端宏实现
类型 | 对象 | 事件 |
---|---|---|
ServerSide | spreadsheetReport | onBoforeOutput |
function main(spreadsheetReport) { var sheetIndex = 0; var posList = spreadsheetReport.sheets[sheetIndex].getExpandedPositions("E1"); //获取E1扩展后的单元格列表 var cells = spreadsheetReport.workbook.worksheets.get(sheetIndex).cells; for (var i = 0; i < posList.length; i++) { var cell = cells.get(posList[i].row, posList[i].column); var value = cell.getValue(); //获取单元格值 cell.setFormula(""); //清除公式 cell.setValue(value); //重新设置单元格值 } }
或者使用以下代码,则不需要指定单元格,又由于是直接扫所有单元格,数据量大了可能会慢
function main(spreadsheetReport) { var type = spreadsheetReport.outputType; //导出类型 if (type == "EXCEL2007" || type == "LIST_EXCEL") { spreadsheetReport.cacheable = false; var workbook = spreadsheetReport.workbook; //获取电子表格工作簿 var worksheets = workbook.worksheets; for (var i = 0; i < worksheets.count; i++) { var worksheet = worksheets.get(i); //sheet1 var cells = worksheet.cells; var maxDisplayRange = cells.maxDisplayRange; //表格最大范围 //对表格中的值进行循环判断 for (var x = 0; x < maxDisplayRange.rowCount; x++) { for (var y = 0; y < maxDisplayRange.columnCount; y++) { var cell = cells.get(x, y); if (cell.isFormula()) { cell.value = cell.value; } } } } } }