回复 11楼qd98zhq的帖子
感谢您发送的 Demo,下面是自定义名称随行列变化自动更改的代码,看是否符合你的需求:
- spread.SetCustomName("range1", sheet, 0, 0, "Sheet1!$D$10"); // 添加名称
- spread.SetCustomName("range2", sheet, 0, 0, "Sheet1!$C$8:$D$9"); // 添加名称
- // --------------------
- // 需要有一个公式引用名称, 这个名称才会自动刷新,所以这里我们添加一个隐藏的 WorkSheet,并在这个 WorkSheet 里面引用上面定义的名称
- Worksheet invisibleSheet = new Worksheet("_invisibleSheet");
- invisibleSheet.Visible = false;
- spread.Sheets.Add(invisibleSheet);
- invisibleSheet.SetFormula(1, 0, "range1");
- invisibleSheet.SetFormula(1, 1, "range2");
- // --------------------
- sheet.AddRows(1, 2); // 比如在这里给 sheet 添加行
- CellRange newRange1 = getRangeByName(spread, "range1"); // 获取 range1 引用的区域
- CellRange newRange2 = getRangeByName(spread, "range2"); // 获取 range2 引用的区域
- CellRange getRangeByName(GcSpreadSheet spread, string name)
- {
- NameInfo info = spread.GetCustomName(name); // 获取名称
- if (info != null && info.Expression != null) // 获取名称对应的引用
- {
- GrapeCity.CalcEngine.Expressions.CalcExternalCellExpression cellExpr = info.Expression as GrapeCity.CalcEngine.Expressions.CalcExternalCellExpression;
- GrapeCity.CalcEngine.Expressions.CalcExternalRangeExpression rangeExpr = info.Expression as GrapeCity.CalcEngine.Expressions.CalcExternalRangeExpression;
- if (cellExpr != null)// 如果引用的是单个Cell
- {
- int row = cellExpr.Row;
- int column = cellExpr.Column;
- return new CellRange(row, column, 1, 1);
- }
- else if (rangeExpr != null)// 如果引用的是一个区域
- {
- int row = rangeExpr.StartRow;
- int column = rangeExpr.StartColumn;
- int rowCount = rangeExpr.EndRow - rangeExpr.StartRow + 1;
- int columnCount = rangeExpr.EndColumn - rangeExpr.StartColumn + 1;
- return new CellRange(row, column, rowCount, columnCount);
- }
- }
- return null;
- }
复制代码 |