首先,
打开电子表格编辑页面得知,
条件字段的坐标:产品颜色的坐标是F9。
需要禁止回写的单元格:C:N列,即第3到第14列,由于代码中的序号是从0开始,其在代码中范围为2-13
服务端宏代码:
function main(spreadsheetReport) {
//获取F9单元格中的产品颜色做判断,如果是红色,则保存到禁止修改的行列表中。
var posList = spreadsheetReport.sheets[0].getExpandedPositions("F9");
var cells = spreadsheetReport.workbook.worksheets.get(0).cells;
var row_list = [];
for (var i = 0; i < posList.length; i++) {
var pos = posList[i];
var value = cells.get(pos.row, pos.column).value;
if (!value) {
break;
}
if (value == 'Red') row_list.push(pos.row) //如果值为红色,则加入列表。
};
spreadsheetReport.customProperties.put("row_list", row_list);
}
客户端宏代码:
function main(spreadsheetReport, isAjaxRefreshCallback) {
var row_list = spreadsheetReport.customProperties["row_list"] //服务端创建变量的值。
var cells = spreadsheetReport.elemSheetFrame.contentWindow;
for (let rowid of row_list) {
for (let columnid = 2; columnid <= 13; columnid++) {
/**
rowid 是行号,行号由服务器端的宏生成的row_list中获取,
columnid 是列号,列号范围根据实际表格列数修改,比如我要禁止修改当前行第C列到N列,那么列号范围就是2-13.(对应第3到14列)
**/
var c1 = rowid + ':' + columnid; //禁止回写单元格的坐标。初始位置[0,0]
if (cells.writableMap[c1]) {
cells.writableMap["bak.c1"] = cells.writableMap[c1];
delete cells.writableMap[c1];
}
}
};
}
注意事项:
该宏由于是服务端在数据输出之前就确定好哪些行需要被禁止回写的,所以不适用条件字段是在页面人工选择的情况。 |