C# 创建、更改Excel命名区域(NamedRange)

创建命名区域是指给选定的某个单元格或多个单元格区域设置名称,目的是方便我们在文件中的其他地方对该单元格区域进行引用能够简化公式引用或者方便数据管理。下面记录了具体的C#示例代码。这里创建命名区域分为了2种情况,分别对应不同的添加方法以及命名区域的引用范围,即:

1. 全局命名区域(方法:workbook.NameRanges.Add() )

2. 局部命名区域(方法:sheet.Names.Add () )

同时,对于Excel表格中已有的命名区域,可通过方法进行修改或者删除,包括

  • 更改区域名称
  • 隐藏指定命名区域名称
  • 删除指定命名区域

使用工具Free Spire.XLS for .NET(免费版)

注:下载Free Spire.XLS后解压安装,在编辑代码时,注意在程序中添加引用Spire.Xls.dll(如下图),dll文件在安装路径下的Bin文件夹中获取。

代码示例

【示例1】创建Excel命名区域

步骤 1:加载文档,获取工作表

//创建Workbook类的实例,加载文档
Workbook workbook = new Workbook();
workbook.LoadFromFile("test.xlsx");

//获取第1张工作表
Worksheet sheet = workbook.Worksheets[0];

步骤 2:创建命名区域

//定义第一个全局命名区域
INamedRange NamedRange1 = workbook.NameRanges.Add("第1批次入库量");//此方法定义的命名区域,引用时可适用于整个工作簿
//INamedRange NamedRange1 = sheet.Names.Add("第1批次入库量");//此方法定义的命名区域,引用时仅适用于命名区域所在工作表
NamedRange1.RefersToRange = sheet.Range["G3:G7"];

//定义第二个全局命名区域
INamedRange NamedRange2 = workbook.NameRanges.Add("第2批次入库量");
//INamedRange NamedRange2 = sheet.Names.Add("第2批次入库量");
NamedRange2.RefersToRange = sheet.Range["G8:G12"];

步骤 3: 在公式中引用命名区域

//指定单元格写入文本
sheet.Range["A14"].Text = "入库量合计";

//在公式中引用命名区域
sheet.Range["B14"].Formula = "=SUM(第1批次入库量,第2批次入库量)";

步骤 4:保存文档

 workbook.SaveToFile("result.xlsx", ExcelVersion.Version2013);

创建效果:

全部代码:

using Spire.Xls;
using Spire.Xls.Core;

namespace CreateNamedRange_XLS
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建Workbook实例
            Workbook workbook = new Workbook();
            //加载Excel文件
            workbook.LoadFromFile("test.xlsx");

            //获取第1张工作表
            Worksheet sheet = workbook.Worksheets[0];

            //定义第一个全局命名区域
            INamedRange NamedRange1 = workbook.NameRanges.Add("第1批次入库量");//此方法定义的命名区域,引用时可适用于整个工作簿
            //INamedRange NamedRange1 = sheet.Names.Add("第1批次入库量");//此方法定义的命名区域,引用时仅适用于命名区域所在工作表
            NamedRange1.RefersToRange = sheet.Range["G3:G7"];

            //定义第二个全局命名区域
            INamedRange NamedRange2 = workbook.NameRanges.Add("第2批次入库量");
            //INamedRange NamedRange2 = sheet.Names.Add("第2批次入库量");
            NamedRange2.RefersToRange = sheet.Range["G8:G12"];

            //指定单元格写入文本
            sheet.Range["A14"].Text = "入库量合计";

            //在公式中引用命名区域
            sheet.Range["B14"].Formula = "=SUM(第1批次入库量,第2批次入库量)";

            //保存文档
            workbook.SaveToFile("result.xlsx", ExcelVersion.Version2013);
            System.Diagnostics.Process.Start("result.xlsx");
        }
    }
}
View Code

 

【示例2】更改Excel命名区域

步骤 1:加载文档,获取工作表

//创建文档,加载测试文件
Workbook wb = new Workbook();
wb.LoadFromFile("sample.xlsx");

//获取第一张工作表
Worksheet sheet = wb.Worksheets[0];

步骤 2:修改命名区域名称

//获取表格中的指定命名区域
INamedRange namedRange = wb.NameRanges.GetByName("第1批次入库量");//适用于全局命名区域(整个工作簿)
//INamedRange namedRange = sheet.Names.GetByName("第2批次入库量");//适用于局部命名区域(指定工作表)

//修改指定命名区域的名称
namedRange.Name = "newrange";
namedRange.RefersToRange = wb.Worksheets[0].Range["G3:G7"];
//namedRange.RefersToRange = sheet.Range["G3:G7"];

步骤 3 :设置命名区域名称隐藏/显示

namedRange = wb.NameRanges.GetByName("第2批次入库量");
namedRange.Visible = false;

步骤 4 :删除命名区域

wb.NameRanges.Remove("RangeName");
//sheet.Names.Remove("RangeName");

步骤 5:保存文档

wb.SaveToFile("newresult.xlsx", FileFormat.Version2010);

测试文档:

 

修改结果:

全部代码:

using Spire.Xls;
using Spire.Xls.Core;

namespace ModifyNameRange_XLS
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建文档,加载测试文件
            Workbook wb = new Workbook();
            wb.LoadFromFile("sample.xlsx");

            //获取第一张工作表
            Worksheet sheet = wb.Worksheets[0];

            //获取表格中的指定命名区域
            INamedRange namedRange = wb.NameRanges.GetByName("第1批次入库量");//适用于全局命名区域(整个工作簿)
            //INamedRange namedRange = sheet.Names.GetByName("第2批次入库量");//适用于局部命名区域(指定工作表)

            //修改指定命名区域的名称
            namedRange.Name = "newrange";
            namedRange.RefersToRange = wb.Worksheets[0].Range["G3:G7"];
            //namedRange.RefersToRange = sheet.Range["G3:G7"];

            //获取指定命名区域,并设置区域名称隐藏
            namedRange = wb.NameRanges.GetByName("第2批次入库量");
            namedRange.Visible = false;

            //删除文档中的指定命名区域的名称
            wb.NameRanges.Remove("RangeName");
            //sheet.Names.Remove("RangeName");

            //保存文档
            wb.SaveToFile("newresult.xlsx", FileFormat.Version2010);
            System.Diagnostics.Process.Start("newresult.xlsx");
        }
    }
}
View Code

 

(本文完)

如需转载,请注明出处!

posted @ 2018-12-11 14:52  E-iceblue  阅读(3042)  评论(2编辑  收藏  举报