2017-10-25 3 views
1

Ich kann den Tabellennamen im aktiven Arbeitsblatt nicht abrufen. Ich habe ein Dropdown-Feld, das mit Arbeitsblättern in der Arbeitsmappe gefüllt wird. Ich habe eine andere Dropdown-Liste, die alle Spaltennamen (Header) in ausgewählten Arbeitsblättern erhalten soll. Irgendwie hat range.address "sheet1! 2: 2".Zeile aus Bereich im aktuellen Arbeitsblatt abrufen?

Hier ist der Code, den ich verwendet:

function getRow(worksheetName) { 
    Excel.run(function (ctx) { 
      // Queue a command to write the sample data to the worksheet 
      // at moment i have only one worksheet named "Sheet1" 

      var range = ctx.workbook.worksheets.getItem(worksheetName).getRange().getRow(1); 
      range.load('address'); 
      // Run the queued-up commands, and return a promise to indicate task 
      //completion 
      return ctx.sync().then(function() { 
       console.log(range.address); // prints Sheet1!2:2 
      }) 
     }) 
     .catch(errorHandler); 
} 

Hier ist ein link to spreadsheet, die ich zum Testen verwendet.

Jede Ahnung, was ich hier falsch mache?

+2

Sind Sie sicher, dass auf dem Arbeitsblatt gibt es Tabellen? In Ihrem Screenshot sieht es so aus, als hätten Sie einen aufgefüllten Bereich, aber es ist nicht möglich zu sagen, ob Sie eine Tabelle für diesen Bereich erstellt haben. Nicht jeder Bereich, einschließlich Bereiche mit Daten, sind Tabellen. Eine Tabelle muss entweder vom Benutzer über die Benutzeroberfläche oder programmgesteuert erstellt werden. –

+0

@RickKirkham Entschuldigung, Sie haben absolut Recht, ich habe gerade verwirrt Ich dachte, Tabellenkalkulation sollte standardmäßig eine Tabelle haben, aber anscheinend Benutzer muss diese Tabelle erstellen. Ich habe die Frage aktualisiert. Vielen Dank noch einmal – kero

+1

@kero - Ich merke, dass Sie diese Frage so bearbeitet haben, dass es jetzt eine ganz andere Frage ist als die, die Sie ursprünglich gestellt haben (und die ich unten beantwortet habe). Geben Sie in Zukunft bitte eine * neue * Frage in diesem Szenario ein (d. H. Wenn Ihre ursprüngliche Frage bereits beantwortet wurde und Ihre neue Frage sich völlig von der ursprünglich gestellten Frage unterscheidet). Dadurch wird verhindert, dass andere Personen verwirrt werden (wenn die Antwort nicht mit der Frage übereinstimmt), wenn Sie diesen Q/A-Thread in Zukunft durchlesen. –

Antwort

1

Ich würde vorschlagen, dass Sie getRange() mit getUsedRange() statt ersetzen, wie hier gezeigt:

function getRow(worksheetName) { 
    Excel.run(function (ctx) { 
      var range = ctx.workbook.worksheets.getItem(worksheetName).getUsedRange().getRow(1); 
      range.load('address'); 

      return ctx.sync().then(function() { 
       console.log(range.address); 
      }) 
     }) 
     .catch(errorHandler); 
} 
0

Rick Kirkham Kommentar oben ist richtig. In der Datei, die Sie verknüpft haben, gibt es keine Tabelle Objekt - obwohl das Arbeitsblatt mehrere Zeilen/Spalten von Daten enthält, werden diese Daten nicht explizit in einem enthaltenen Tabelle.

Sind Sie in der Lage diese Datei manuell zu manipulieren? Wenn ja, dann können Sie ein Tabellenobjekt für die Daten erstellen, indem Sie folgendermaßen vorgehen:

  1. die Daten Wählen Sie in der Tabelle sein wollen.
  2. Wählen Sie bei ausgewählten Daten die Schaltfläche (auf der Registerkarte Insert).
  3. Eingaben im überprüfen Erstellen Sie die Tabelle und wählen Sie OK.

Wenn Sie nicht in der Lage diese Datei manuell bearbeiten, dann können Sie die Tabelle erstellen (aus dem Bereich von Daten in Ihrem Arbeitsblatt) mit dem Office-JavaScript-API, wie hier beschrieben: https://dev.office.com/docs/add-ins/excel/excel-add-ins-tables#convert-a-range-to-a-table.

+0

Ich aktualisierte Frage leid Verwirrung, dachte ich, Tabelle hat ein Riesen-Tabelle halten Daten standardmäßig sollte, aber anscheinend nicht – kero

+0

Bitte beachten Sie meine weitere Antwort unten (die Ihre neue/aktualisierte Frage befaßt). –

Verwandte Themen