...
需求场景:电子表格单元格中使用计算公式获取计算结果,希望导出成静态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;
}
}
}
}
}
} |