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

C# 如何在工作簿中查找所有命名范围,c#,excel,office-interop,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。工作簿。Open函数返回

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

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。

工作簿。Open函数返回需要存储的工作簿对象,其中包含更多包含工作簿数据的对象。您应该能够从intellisense获取所有这些信息,或者您可以在上找到这些信息

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

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);
}
Workbooks.Open函数返回一个需要存储的工作簿对象,其中包含更多包含工作簿数据的对象。您应该能够从intellisense获取所有这些信息,或者您可以在上找到这些信息

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

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);
}

您还可以获取名为value的nametag的位置:

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());
                }               
            }
如果您想在工作簿中执行此操作,也可以获取单元格值。在关闭事件之前,您需要重新初始化应用程序和工作表

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);
                }               
            }

您还可以获取名为value的nametag的位置:

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());
                }               
            }
如果您想在工作簿中执行此操作,也可以获取单元格值。在关闭事件之前,您需要重新初始化应用程序和工作表

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);
                }               
            }

非常感谢。这给了我很大的支持。然而,我认为你在第一行遗漏了一些文字。我也不知道表单是否正确。谢谢,我在第一行修复了缺少的对象初始化。还请注意,您可以摆脱所有重复的Microsoft.Office.Interop.Excel。通过在文件顶部使用Microsoft.Office.Interop.Excel添加零件。谢谢@SMStroble,解决方案按预期工作!:非常感谢。这给了我很大的支持。然而,我认为你在第一行遗漏了一些文字。我也不知道表单是否正确。谢谢,我在第一行修复了缺少的对象初始化。还请注意,您可以摆脱所有重复的Microsoft.Office.Interop.Excel。通过在文件顶部使用Microsoft.Office.Interop.Excel添加零件。谢谢@SMStroble,解决方案按预期工作!: