找回密码
 立即注册

QQ登录

只需一步,快速开始

[已处理] 自定义名称

qd98zhq
论坛元老   /  发表于:2015-4-16 15:10:00
11#
谢谢 支持
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-4-16 15:30:00
12#
回复 11楼qd98zhq的帖子

Demo 已经查收我这边调查后反馈给您,谢谢

为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢        

评分

参与人数 1满意度 +5 收起 理由
qd98zhq + 5 支持不错

查看全部评分

回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-4-17 13:43:00
13#
回复 11楼qd98zhq的帖子

感谢您发送的 Demo,下面是自定义名称随行列变化自动更改的代码,看是否符合你的需求:
  1.    spread.SetCustomName("range1", sheet, 0, 0, "Sheet1!$D$10"); // 添加名称
  2.             spread.SetCustomName("range2", sheet, 0, 0, "Sheet1!$C$8:$D$9"); // 添加名称

  3.            // --------------------
  4.             // 需要有一个公式引用名称, 这个名称才会自动刷新,所以这里我们添加一个隐藏的 WorkSheet,并在这个 WorkSheet 里面引用上面定义的名称
  5.             Worksheet invisibleSheet = new Worksheet("_invisibleSheet");
  6.             invisibleSheet.Visible = false;
  7.             spread.Sheets.Add(invisibleSheet);
  8.             invisibleSheet.SetFormula(1, 0, "range1");
  9.             invisibleSheet.SetFormula(1, 1, "range2");
  10.             // --------------------

  11.             sheet.AddRows(1, 2); // 比如在这里给 sheet 添加行

  12.             CellRange newRange1 = getRangeByName(spread, "range1"); // 获取 range1 引用的区域
  13.             CellRange newRange2 = getRangeByName(spread, "range2"); // 获取 range2 引用的区域



  14.         CellRange getRangeByName(GcSpreadSheet spread, string name)
  15.         {
  16.            NameInfo info = spread.GetCustomName(name); // 获取名称
  17.             if (info != null && info.Expression != null) // 获取名称对应的引用
  18.             {
  19.                 GrapeCity.CalcEngine.Expressions.CalcExternalCellExpression cellExpr = info.Expression as GrapeCity.CalcEngine.Expressions.CalcExternalCellExpression;
  20.                 GrapeCity.CalcEngine.Expressions.CalcExternalRangeExpression rangeExpr = info.Expression as GrapeCity.CalcEngine.Expressions.CalcExternalRangeExpression;
  21.                 if (cellExpr != null)// 如果引用的是单个Cell
  22.                 {
  23.                     int row = cellExpr.Row;
  24.                     int column = cellExpr.Column;
  25.                     return new CellRange(row, column, 1, 1);
  26.                 }
  27.                 else if (rangeExpr != null)// 如果引用的是一个区域
  28.                 {
  29.                     int row = rangeExpr.StartRow;
  30.                     int column = rangeExpr.StartColumn;
  31.                     int rowCount = rangeExpr.EndRow - rangeExpr.StartRow + 1;
  32.                     int columnCount = rangeExpr.EndColumn - rangeExpr.StartColumn + 1;
  33.                     return new CellRange(row, column, rowCount, columnCount);
  34.                 }
  35.             }
  36.             return null;
  37.         }
复制代码

评分

参与人数 1满意度 +5 收起 理由
qd98zhq + 5 不错,辛苦了

查看全部评分

回复 使用道具 举报
qd98zhq
论坛元老   /  发表于:2015-4-17 15:21:00
14#
恩 好的,看到了,我会去测试一下,看是否能满足要求,非常的感谢。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-4-17 17:13:00
15#
回复 14楼qd98zhq的帖子

不客气,期待你的结果。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部