如何使用c# Excel. interop从Excel工作表中获取现有的区域名称
本文关键字:Excel 区域 域名 获取 何使用 interop 工作 | 更新日期: 2023-09-27 18:08:01
我正在使用一个非常大的工作表,其中有许多命名范围。我预计工作表将来会被修改,所以我不能使用单元格编号与单元格进行交互。
如何从工作表中获得现有名称(或现有名称列表)?或者,我如何告诉我的c#程序某个名称已经存在,并使用它?
您需要使用excel . workbench . names
foreach (Excel.Worksheet sheet in wb.Sheets) {
foreach (Excel.Range range in sheet.Names) {
// this is the named ranges
}
}
如果您要使用EPPlus,您可以这样做(非常简单)
static void Main(string[] args) {
using (FileStream stream = new FileStream(@"C:'Users'bblack'Test'TestWorksheet.xlsx", FileMode.Append)) {
using (ExcelPackage xl = new ExcelPackage(stream)) {
// xl by default contains one workbook;
bool test;
foreach (ExcelWorksheet sheet in xl.Workbook.Worksheets) {
test = NamedRangeExists("NamedRange", sheet);
}
}
}
}
static bool NamedRangeExists(string name, ExcelWorksheet ws) {
return ws.Names.Where(n => n.Name == name).Count() > 0;
}
这将打开指定的文件,遍历工作簿中包含的工作表,并检查其中名为"namerange"的命名范围
你在寻找这样的东西吗?在这个解决方案中,我将它们放入字典
Dictionary<string, Worksheet> dictionary = new Dictionary<string, Worksheet>();
foreach ( Worksheet worksheet in ws.Worksheets )
{
dictionary.Add( worksheet.Name, worksheet );
}
Sheet1.Range("A3:A7")<——get range
wb类型为Workbook
Dictionary<string, Range> dictionary = new Dictionary<string, Range>();
foreach (Worksheet sheet in wb.Sheets) {
foreach (Range range in sheet.Names) {
dictionary.Add( range.Name, Range );
//use here range var
var cells= range.Cells;
}
}
参考这里查看您想要的属性
这个替代Ben Black的答案对我来说很有效:
foreach (Excel.Worksheet sheet in wb.Sheets) {
foreach (Excel.Name name in sheet.Names) {
var value = sheet.get_Range(name.NameLocal).Value;//get value of named range
var formula = sheet.get_Range(name.NameLocal).Formula;//get Formula of named range
}
}
int row = 3;
var wb = Globals.ThisAddIn.Application.ActiveWorkbook;
ws.Range["A6"].Value = wb.Names.Count;
foreach (Name rangeName in wb.Names)
{
Range c = ws.Cells[row++, 3];
c.Value = rangeName.NameLocal;
}
var ws = Globals.ThisAddIn.Application.ActiveSheet;
ws.Range["A7"].Value = ws.Range["MyRangeName"].Value;