none
Excel Namens-Bereich als range RRS feed

  • Frage

  • Hallo!

    Ich hoffe, dass dies der richtige Bereich ist?

    Ich möchte den Zellbereich eines über einen Zell-Namen (in der Excel-Datei definiert) definierten Bereich auslesen.

    upExcel.Goto(zZellName);                    // Zum Zell-Namen springen
    range = upExcel.ActiveWindow.ActiveCell;    // Bereich übernehmen
    

    So erhalte immer nur die erste Zelle des Bereiches. Wie kann ich denn alle auslesen?

    Fred.

    Donnerstag, 31. Januar 2019 16:57

Antworten

  • Hallo Stefan!

    Erst einmal zum Zweck meiner Anfrage.

    Ich habe eine Applikation geschrieben, in der man eine SQL-Abfrage und einen Bericht in ein Excel-Sheet exportieren kann.
    Die Konfiguration (SQL-Server-Name, SQL-Statement, Berichts-Dateiname, Erstellungs-Datum usw.) schreibe ich in ein anderes Excel-Sheet der gleichen Excel-Datei.

    Zum einfacheren Adressieren der einzelnen Konfigurationsparameter beim Wiedereinlesen der Konfiguration, habe ich diesen (beim abspeichern) einfach Excel-Bereichs-Namen gegeben.

    Mein Problem war nun, dass ich mit obiger Methode des Zugriffes auf einen Excel-Bereichs-Namen immer nur die erste Zelle eines Bereiches erhalten habe.

    Nun habe ich gefunden, dass die Excel-Bereichs-Namen in der Names-Eigenschaft des Workbooks gespeichert werden:

    var b = workbook.Names;

    Einen direkten Zugriff auf einen einzelnen Bereichs-Namen ist mir noch nicht gelungen, aber beim Iterieren durch die Names-Auflistung kann ich den Range des Bereichs-Namen über die RefersToRange-Eigenschaft des Name-Objektes abfragen:

    foreach (var item in workbook.Names)
    {
            Excel.Name c = (Excel.Name) item;
            Excel.Range range = c.RefersToRange;
    }
             

    So kann ich mir einen Konfigurations-Parameter (der über mehere Zellen geht) über range.FormulaR1C1 abfragen.

    Trotzdem vielen Dank für deine Antwort!

    Und vielleicht gibt es ja auch noch einen Weg, ein einzelnes Name-Objekt über die Bezeichnung direkt aus der Names-Auflistung anzusprechen. Mit Workbook.Names["Bereichs-Bezeichnung"] ging es nicht.

    Fred. 





    • Als Antwort markiert perlfred Samstag, 2. Februar 2019 09:34
    • Bearbeitet perlfred Samstag, 2. Februar 2019 09:36
    Samstag, 2. Februar 2019 09:30

Alle Antworten

  • Hi,

    willst Du wirklich die auf dem jeweiligen PC installierte Excel Anwendung automatisieren?

    Was willst Du mit dem Range machen, wenn Du ihn ermittelt hast?

    Generell würde ich mal anhand der MSDN sagen, man holt den Range mittels:

    Range range = <Worksheet>.Range( "NameDesRange" );

    und hat dann bspw. über die Cells Eigenschaft Zugriff auf die einzelnen Zellen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Donnerstag, 31. Januar 2019 17:14
    Moderator
  • Hallo Stefan!

    Erst einmal zum Zweck meiner Anfrage.

    Ich habe eine Applikation geschrieben, in der man eine SQL-Abfrage und einen Bericht in ein Excel-Sheet exportieren kann.
    Die Konfiguration (SQL-Server-Name, SQL-Statement, Berichts-Dateiname, Erstellungs-Datum usw.) schreibe ich in ein anderes Excel-Sheet der gleichen Excel-Datei.

    Zum einfacheren Adressieren der einzelnen Konfigurationsparameter beim Wiedereinlesen der Konfiguration, habe ich diesen (beim abspeichern) einfach Excel-Bereichs-Namen gegeben.

    Mein Problem war nun, dass ich mit obiger Methode des Zugriffes auf einen Excel-Bereichs-Namen immer nur die erste Zelle eines Bereiches erhalten habe.

    Nun habe ich gefunden, dass die Excel-Bereichs-Namen in der Names-Eigenschaft des Workbooks gespeichert werden:

    var b = workbook.Names;

    Einen direkten Zugriff auf einen einzelnen Bereichs-Namen ist mir noch nicht gelungen, aber beim Iterieren durch die Names-Auflistung kann ich den Range des Bereichs-Namen über die RefersToRange-Eigenschaft des Name-Objektes abfragen:

    foreach (var item in workbook.Names)
    {
            Excel.Name c = (Excel.Name) item;
            Excel.Range range = c.RefersToRange;
    }
             

    So kann ich mir einen Konfigurations-Parameter (der über mehere Zellen geht) über range.FormulaR1C1 abfragen.

    Trotzdem vielen Dank für deine Antwort!

    Und vielleicht gibt es ja auch noch einen Weg, ein einzelnes Name-Objekt über die Bezeichnung direkt aus der Names-Auflistung anzusprechen. Mit Workbook.Names["Bereichs-Bezeichnung"] ging es nicht.

    Fred. 





    • Als Antwort markiert perlfred Samstag, 2. Februar 2019 09:34
    • Bearbeitet perlfred Samstag, 2. Februar 2019 09:36
    Samstag, 2. Februar 2019 09:30