Ich habe eine Numbers-Tabelle, die Daten im Wert von Jahren enthält. Ich möchte bestimmte Zeilen in der Tabelle aufrufen und nur diese Zeilen in ein neues Blatt in derselben Datei kopieren, in der die Daten gesammelt werden sollen. Die Zeilen, die ich aufrufen möchte, enthalten alle zwei bestimmte Wörter in derselben Spalte.
Idealerweise hätte ich also gerne eine Funktion, mit der ich eine Suche nach "John Doe" in Blatt 1-Tabelle 1-Spalte G abgleichen, die gesamte Datenzeile auswählen, kopieren und in Blatt 2 einfügen kann.
Welche Funktion oder mehrere Funktionen können verwendet werden, um dies zu erreichen?
Ich weiß nicht, ob es möglich ist, dies mit Funktionen zu tun, aber es könnte sein. Es gibt eine aufgerufene Funktion VLOOKUP
, die so aussieht, als würde sie das tun, was Sie wollen, aber ich konnte sie beim Experimentieren nicht richtig zum Laufen bringen - eine Funktion, die in einer Zelle existiert, hat es schwer, mehrere Werte für mehrere Zellen zurückzugeben.
Was meiner Meinung nach funktioniert, wenn auch vielleicht nicht so bequem, wie Sie vielleicht möchten, ist die Filteransicht. Wenn Sie auf der rechten Seite des Fensters die Ansicht „Sortieren und filtern“ und die Registerkarte „Filter“ auswählen, können Sie „einen Filter hinzufügen“, der mit einem Wert in einer bestimmten Spalte übereinstimmt. Wenn Sie diesen Filter mithilfe des Kontrollkästchens in der Ecke des Felds dieses Filters umschalten, werden alle Zeilen ausgeblendet, die diesen Kriterien nicht entsprechen. Anschließend müssen Sie nur noch alle Zellen markieren, kopieren und in ein anderes Blatt einfügen.
Leider werden dadurch keine weiteren Zeilen hinzugefügt, wenn Sie Zeilen im ersten Blatt hinzufügen. Wenn Sie also diese Funktionalität benötigen, wird Ihre Frage dadurch nicht beantwortet. Wenn Sie jedoch nur eine einmalige Kopie benötigen, denke ich, dass dies die einfachste Option ist (und die einzige, die ich kenne, aber ich bin nicht sehr vertraut mit Numbers).
Offensichtlich ist dies eine alte Frage, aber sie ist mir aufgetaucht und es ist etwas, das ich gelegentlich tun wollte, also dachte ich, ich würde eine verspätete Antwort posten.
Es geht davon aus, dass Dokument 1 zwei Tabellen auf Blatt 1 haben wird und dass die Größe von Tabelle 2 die kopierten Daten umfassen kann. Wenn die Schlüsselspalte ein spezielles Format hat (z. B. Datum), funktioniert sie nicht, da Datumsangaben eine besondere Behandlung erfordern, also ändern Sie ihr Format in Text. Und offensichtlich hat es keine Fehlerbehandlung.
tell application "Numbers"
tell table 1 of sheet 1 of document 1
-- because of the indecent and desperate need for Numbers to wrap text
set text wrap of cell range to false
set kc to column "C" -- key column
set rp to (cells of kc whose value contains "September") -- matching rows
set hr to {} -- Get headings to copy to table 2
copy value of cells of row 1 to hr
set db to {} -- get cell values from matching rows
repeat with rs in rp
copy value of cells of row of rs to end of db
end repeat
-- each row's data will appear like this: {3.0, "Sun", "September 24", "W", "Denver Broncos"}
end tell
-- set db to rest of db -- If heading row contains match then uncomment
tell table 2 of sheet 1 of document 1
clear cell range
set rc to count of db -- row count
set cc to count of item 1 of db -- column count
repeat with y4 from 1 to rc -- for every row
repeat with x8 from 1 to cc -- for every column
set value of cell x8 of row (y4 + 1) to item x8 of item y4 of db
end repeat
end repeat
tell row 1 -- Set table headings to match table 1
repeat with j from 1 to count of columns
set value of cell j to item j of hr
end repeat
end tell
set text wrap of cell range to false -- see above
end tell
end tell
Dies ist nicht Teil der Antwort, sondern lädt Beispieldaten in Tabelle 1 (min 5x5)
tell application "Numbers"
tell table 1 of sheet 1 of document 1
set column count to 5
set row count to 5
set ev to {{"Week", "Day", "Date", "WL", "Opponent"}, {2.0, "Sun", "September 17", "L", "Carolina Panthers"}, {3.0, "Sun", "September 24", "W", "Denver Broncos"}, {4.0, "Sun", "October 1", "W", "Atlanta Falcons"}, {5.0, "Sun", "October 8", "L", "Cincinnati Bengals"}}
set evy to count of ev
set evx to count of item evy of ev
repeat with y from 1 to (evy)
repeat with x from 1 to evx
set value of cell x of row y to item x of item (y) of ev
end repeat
end repeat
set format of column "C" to text -- date format requires special handling
set text wrap of cell range to false
end tell
end tell
Hinweis zum Datumsformat: Sie können einen String nicht mit dem Monat eines Datumsobjekts vergleichen. Sie könnten wahrscheinlich eine Methode herstellen, indem Sie die Datumszellen aufschlüsseln: set x to value of cell "C2"
, set y to month of x
, set z to x as text
aber es sollte einfacher sein, sie in Text umzuwandeln, das Skript normal auszuführen und bei Bedarf wieder in das Datum umzuwandeln.
krs013
Josch