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,解决方案按预期工作!: