目標:計算一列中有多少行有空值。
方法1(有效):
dt = CurrentDataTable();
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
方法2(有效):
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE></CODE></PRE><P> </P><P><U>方法3(無效):</U></P><PRE><CODE class=" language-jsl">Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
偵錯器針對方法 3 回傳的錯誤是「在存取或評估 'Is Missing' 時參數應為數字{1},Is Missing/*###*/(Column( dt, "ColName" ))"
因此,很容易理解透過 dt:ColName 參考列與 dt:Name("ColName") 相同,但我很困惑為什麼 Column(dt, "ColName") 的表現不同。
另外,如果我要執行以下操作:
ref1 = dt:ColName;
ref2 = dt:Name("ColName");
ref3 = Column(dt, "ColName");然後,我得到 ref1 和 ref2 保存單一數值(對應於列中的第一個值),而 ref3 是對適當 Column 物件的引用(正如我期望所有三個聲明都能完成)。
ref1 和 ref2 結果對我來說似乎特別奇怪 - 上面的方法#1和#2返回了列中正確數量的空單元格,所以顯然在引用的實現中,它不僅僅是查看中的第一個值專欄。看來發生的情況是,當 dt:ColName 設定為變數時,使用整個 dt:ColName 是不可接受的,而是選擇將變數設為 dt:ColName[1]。
為什麼會有這種行為呢?當我使用ref = dt:列名,我希望它返回由生成的相同列引用ref = Column(dt, "ColName")或者可能是一個充滿值的矩陣/列表,這些值按照它們出現的順序對應於列的內容。
本質上,我的問題歸結為(1)為什麼這些行為不同,(2)是否有一種簡單的方法來確定何時需要使用 dt:ColName 以及何時需要使用 Column(dt, "ColName"),和( 3)為什麼ref1 = dt:CFU傳回對列中第一個值的引用,而不是對列本身的引用或與列中所有值相對應的完全填充的矩陣/列表?
謝謝!
需要 [] 的原因是因為 Get RowsWhere 依賴目前行。 使用 Column("X")[] 引用列「X」的目前行,相當於 Column("X")[Row()]。
作為@pmroz也就是說,AsColumn("X") 會起作用,因為它會傳回對目前行的列的參考。
除了 For Each Row 迴圈和列公式之外,「取得行位置」和「選擇位置」等訊息也取決於目前行。
它還將與作為柱:
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
更新:剛剛意識到如果使用方法#3將會起作用
Print(NRows(dt<<GETROWSWHERE></GETROWSWHERE>
對我來說仍然感覺很奇怪。 如果ref = Column(dt, "ColName")返回列引用,為什麼這裡需要 [] ?
我預期情況恰恰相反——因為ref = dt:列名稱只傳回列中的第一個值,我希望需要在GetRowsWhere(IsMissing(dt:ColName[]))語句,並且由於 Column(dt, "ColName") 已經傳回整列,為什麼需要 [] ?