是这样的,paint方法中给style设置背景色,这时候没有给单元格的Style中改变相关属性,只是在画法的层面让单元格显示了红色,用这个方法来改变单元格背景色:
options.sheet.getCell(options.row,options.col).backColor("red");
改变单元格背景色会导致页面重绘,所以在paint方法中加了判断:
if(options.sheet.getCell(options.row,options.col).backColor()!="red")
参考代码:
NegativeValidator.prototype.paint = function (ctx, value, x, y, w, h, style, options) {
if(options.sheet.getCell(options.row,options.col).backColor()!="red"){
if (this._type === 'negative') {
if (value > 0) {
this._isError = true
options.sheet.getCell(options.row,options.col).backColor("red");
} else {
this._isError = false
}
} else if (this._type === 'positive') {
if (value < 0) {
this._isError = true
options.sheet.getCell(options.row,options.col).backColor("red");
} else {
this._isError = false
}
} else if (this._type === 'letterType') {
const reg = /((?=[\x21-\x7e]+)[^A-Za-z0-9])|([0-9]+)/g
if (!reg.test(value)) {
// 正确的值
this._isError = false
} else {
this._isError = true
options.sheet.getCell(options.row,options.col).backColor("red");
}
} else if (this._type === 'musty') {
if (!this._result) {
this._isError = true
options.sheet.getCell(options.row,options.col).backColor("red");
} else {
this._isError = false
}
}
}
spreadNS.CellTypes.Base.prototype.paint.apply(this, [ctx, value, x, y, w, h, style, options])
} |