簡體   English   中英

如何使用c#Excel.Interop從Excel工作表中獲取現有范圍名稱?

[英]How to get an existing range name from an Excel worksheet using c# Excel.Interop?

我正在使用一個很大的工作表,其中包含許多命名范圍。 我希望工作表將來會被修改,因此我無法使用其單元格編號與單元格進行交互。

如何從工作表中獲取現有名稱(或現有名稱列表)? 或者,如何告訴我的C#程序某個名稱已經存在,並加以利用?

您將要使用Excel.Worksheet.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;
    }

這將打開指定的文件,遍歷工作簿中包含的工作表,並檢查其中的名為“ NamedRange”的命名范圍。

您在尋找這樣的東西嗎? 在此解決方案中,我將它們放入字典中

Dictionary<string, Worksheet> dictionary = new Dictionary<string, Worksheet>();
foreach ( Worksheet worksheet in ws.Worksheets )
{
   dictionary.Add( worksheet.Name, worksheet );
}

更新

Sheet1.Range(“ A3:A7”)<-獲取范圍

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM