2017-11-10 6 views
4

Ich versuchte Bereich von benanntes Element in der Arbeitsmappe zu lesen, aber einen Fehler bekommen:Warum konnte der Namensbereich den benannten Artikelbereich nicht erreichen?

This operation is not permitted for the current object.

Zunächst einmal Bereich erstellt Namen (mit add() Methode auf Objektnamen).

Excel.run(function (ctx) { 
    var sheet = ctx.workbook.names.add("MyRange", "Sheet1!A1B2"); 
    return ctx.sync().then(function() { 
     console.log("range name added"); 
    }).catch(function (e) {   
     console.log("Error Message is -> " + e.message); 
    }) 
}); 

Bis jetzt funktioniert Code sehr gut. Jetzt möchte ich einen Bereich für einen bestehenden benannten Bereich lesen. So habe ich einige Änderungen an meinem Code vorgenommen:

Wenn ich versuche, diesen Code ausführen, bekomme ich den Fehler oben. Ich habe die gleiche Methode wie in Office.js API erwähnt.

Antwort

2

Scheint, als ob die Syntax, die Sie verwenden, um das benannte Element zu erstellen (dh, eine Zeichenfolge als zweiten Parameter statt Übergabe eines Range -Objekt übergeben) macht es so, dass das benannte Element nicht erstellt wird eigentlich ein Range-Objekt. Wenn Sie anschließend versuchen, das benannte Element wie ein Range-Objekt zu behandeln, erhalten Sie einen Fehler.

Hier ist ein Code-Schnipsel, die ein benanntes Element für einen Bereich schafft und erhält dann das benanntes Element (ein Bereich) und schreibt seine Adresse an die Konsole:

Excel.run(function (ctx) { 

    // Create named item "MyRange" for the specified range. 
    var sheet = ctx.workbook.worksheets.getItem("Sample"); 
    var myRange = sheet.getRange("A1:E1"); 
    sheet.names.add("MyRange", myRange); 

    return ctx.sync() 
     .then(function() { 

      // Get the range for the named item "MyRange" and load its address property. 
      var myNamedItem = sheet.names.getItem("MyRange"); 
      var range = myNamedItem.getRange(); 
      range.load("address"); 

      return ctx.sync() 
       .then(function() { 
        console.log("Address of range: " + range.address); 
       }); 
     }); 
}); 

Sie schnell und einfach den Code-Schnipsel versuchen Sie sich in Excel mithilfe von Script Lab (https://aka.ms/getscriptlab). Installieren Sie einfach das Script Lab-Add-In (kostenlos), wählen Sie dann "Import" im Navigationsmenü und verwenden Sie die folgende GIST-URL: https://gist.github.com/kbrandl/89706cb9808bd7815eb0c89930ce526c.

+0

Dank Kim es jetzt funktioniert. Aber kannst du mir bitte erklären, wie sich dein Code von meinem Code unterscheidet, weil ich keinen Namen für den Bereich hinzufüge, sondern einen Namen für den Bereichsstring hinzufüge. bitte kannst du es erklären. –

+1

Wenn Sie ein benanntes Element für einen Bereich erstellen möchten, müssen Sie ein ** Bereichsobjekt ** als zweiten Parameter angeben, wenn Sie die 'NameItemCollection.add (...)' Methode aufrufen. Wenn Sie anstelle eines Range-Objekts eine Zeichenfolge angeben, interpretiert Office JS diese Zeichenfolge nicht als Range-Objekt. Wenn Sie anschließend die Methode 'getRange()' für dieses benannte Element aufrufen, wird ein Fehler ausgelöst. (Weil die 'getRange()' Methode für Strings nicht gültig ist.) –

Verwandte Themen