如何在工作簿中查找所有命名范围

时间:2015-03-23 20:25:11

标签: c# excel office-interop

以下是我目前使用的一些代码:

Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
excelApp.Workbooks.Open(path);
// Make the object visible.
excelApp.Visible = true;

我知道工作簿会打开。

我正在使用Visual Studio 2013。

2 个答案:

答案 0 :(得分:4)

Workbooks.Open()函数返回您需要存储的工作簿对象,它包含更多带有工作簿数据的对象。您应该能够从智能感知中获取所有这些信息,或者您可以在Microsoft.Office.Interop.Excel namespace on MSDN上找到相关信息。

下面是一个示例脚本,它将打开一个消息框,其中包含路径中工作簿中每个命名范围的名称。

using Microsoft.Office.Interop.Excel;
Application excelApp = new Application();
Workbook myWorkbook = excelApp.Workbooks.Open(path);
Names wbNames = myWorkbook.Names;
foreach (Name n in wbNames)
{
    System.Windows.Forms.MessageBox.Show(n.Name);
}

答案 1 :(得分:0)

您还可以获取名称标签的位置(称为值):

Microsoft.Office.Interop.Excel.Names Names = wb.Names;
            foreach(Microsoft.Office.Interop.Excel.Name item in Names)
            {
                if(item.Name.Contains("cellexportcondition"))
                {
                    MessageBox.Show(item.Name.ToString() + " = " + item.Value.ToString());
                }               
            }

或者,您也可以获取单元格值(如果要在workbook.beforeclose事件中执行此操作,则需要重新创建应用程序和工作表)

Microsoft.Office.Interop.Excel.Application tempexcellApp= wb.Application;
            Microsoft.Office.Interop.Excel.Worksheet tws = (Microsoft.Office.Interop.Excel.Worksheet)tempexcellApp.Worksheets[1];

            Microsoft.Office.Interop.Excel.Names Names = wb.Names;
            foreach(Microsoft.Office.Interop.Excel.Name item in Names)
            {
                if(item.Name.Contains("cellexportcondition"))
                {
                    string a = "";
                    if(tws.Range[item.Name].Value2 != null)
                    {
                     a  = item.Name + " " + tws.Range[item.Name].Value2.ToString();
                    }else a = item.Name + " empty cell ";
                    MessageBox.Show(a);
                }               
            }