找回密码
 立即注册

QQ登录

只需一步,快速开始

viperous_devil
金牌服务用户   /  发表于:2019-4-17 10:46  /   查看:6618  /  回复:12
遇到需求,一列数据要只展示两位小数,也要在数据小于0的谁会变红,并且是分开来定义的。在官方文档中未找到对应的解决办法

12 个回复

倒序浏览
viperous_devil
金牌服务用户   /  发表于:2019-4-17 12:54:46
沙发
再加一个问题, 图片.png760415649.png ,导出文件之后分组的在执行工作表保护的时候一定无法打开。但是需求要求有单元格保护,同时分组能打开,有解决办法吗?
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-4-17 16:57:01
板凳
您好,

第一个问题:

只展示两位小数,可以用单元格格式实现,参考:

https://demo.grapecity.com.cn/Sp ... emos/basicFormatter

数据小于0变红,可以用条件格式做,参考:

https://demo.grapecity.com.cn/Sp ... icConditionalFormat
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-4-17 17:04:27
地板
第二个问题,

很抱歉,Excel的策略不支持在工作表保护的情况下进行分组操作,这是Excel的逻辑限制,SpreadJS无法改变这一点。
回复 使用道具 举报
viperous_devil
金牌服务用户   /  发表于:2019-4-18 11:11:58
5#
KevinChen 发表于 2019-4-17 16:57
您好,

第一个问题:

二者可以共存吗
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-4-18 14:23:23
6#
您好,这两者是可以共存的,如图:

image.png189431456.png

如图所示,我设置了这部分数字保留2位小数,

同时设置了单元格值处于2~10之间的样式。

如果单元格设置无效,请检查是否设置了自定义CellType,

如果设置了自定义Celltype,那么可以在paint方法中自己定义小数位和样式。
回复 使用道具 举报
viperous_devil
金牌服务用户   /  发表于:2019-4-19 11:16:31
7#
新的问题:两列有关联关系,两列的每行两个值进行比较,比如A列1行要求小于B列1行的值,如果大于则变为红色,B列是参考列,也是可以进行修改的。目前发现,使用上文说到的条件格式进行处理的时候。B列的值发生变化,A列的值无法同步进行格式变化。这种情况有什么好的解决办法吗?
回复 使用道具 举报
viperous_devil
金牌服务用户   /  发表于:2019-4-19 11:21:13
8#
A列,B列是同一行的数据进行比较的
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-4-19 13:59:06
9#
您好,这种情况下,可以使用公式条件格式来实现,具体示例请参考下列代码:


  1.     window.onload = function () {
  2.         var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 2 });
  3.         initSpread(spread);
  4.     };

  5.     function initSpread(spread) {
  6.         var activeSheet = spread.getActiveSheet();
  7.         // 创建Style,设置红色样式
  8.         var style = new GC.Spread.Sheets.Style();
  9.         style.backColor = "red";
  10.         // 创建生效区域
  11.         var ranges = [new GC.Spread.Sheets.Range(-1, 5, -1, 1)];
  12.         // 设置条件格式
  13.         activeSheet.conditionalFormats.addFormulaRule('=IF(F1<A1,TRUE,FALSE)', style, ranges);

  14.         // 设置值:
  15.         activeSheet.suspendPaint();
  16.         for(let i=0; i<activeSheet.getRowCount(); i++){
  17.             activeSheet.setValue(i, 0, activeSheet.getRowCount()-i);
  18.             activeSheet.setValue(i, 5, i);
  19.         }
  20.         activeSheet.resumePaint();
  21.     }
复制代码
回复 使用道具 举报
viperous_devil
金牌服务用户   /  发表于:2019-4-19 15:13:54
10#
KevinChen 发表于 2019-4-19 13:59
您好,这种情况下,可以使用公式条件格式来实现,具体示例请参考下列代码:

非常感谢回答。看到这种方法的实现,我有了新的问题,你这个公式只是比较F1A1 的两个单元格的大小,然后根据判断的结果进行渲染选定的生效区域内的样式。那要比较两列的所有行的数据,比如有200行,难道要F1到F200 添加200条这样类似的条件格式吗?有什么简便的办法吗?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部