iLogic 提供用於讀取和寫入 Microsoft® Excel 工作表文件的規則函數。若要存取 Excel 資料連結函數,請展開「片段」區域中的「系統」頁籤下的「Excel 資料連結」節點。
提供了兩種類型的 Excel 資料連結函數:
若要對其他格式的檔案進行讀取和寫入,請在規則中加入自訂 VB.NET 程式碼。
使用專用函數 ThisBOM.Export 可將組合材料表匯出為 Microsoft® Excel 和其他格式。
您可以將 Microsoft® Excel 資料嵌入或連結至 Autodesk Inventor 文件,也可以將其保留為外部檔案。這些函數需要連結或嵌入的 Excel 檔案的檔名或規格。
對於檔名,您既可以指定相對路徑,也可以指定絕對路徑。但是,使用絕對路徑會使得將模型傳送給其他電腦上的其他使用者變得很困難。如果未指定路徑,iLogic 會假設 Excel 文件與目前的 Inventor 文件在同一個資料夾中。相對路徑將被解釋為相對於包含 Inventor 文件的資料夾的路徑。
iLogic 還會在專案工作區路徑下搜尋該檔案。您可以使用專案工作區路徑下的相對路徑。
支援的副檔名包括 .xls、.xlsx、.xlsm 和 .xlsb。
您也可以指定連結或嵌入的工作表代替檔名。對於嵌入的工作表,請使用語法 3rd Party:Embedding#。
對於連結的工作表,請使用語法 3rd Party:LinkedName.xls。指定顯示在 Autodesk Inventor 的「模型」樹中「協力廠商」下面的名稱。
如果使用嵌入的表格,請使用「參數」對話方塊上的「連結」將其嵌入。請勿變更由 Autodesk Inventor 指定給嵌入表格的預設名稱 (例如,Embedding 1)。GoExcel 需要使用原始名稱。
若要連結檔案,請按一下 「管理」頁籤 「插入」面板 「插入物件」 ,或使用「參數」對話方塊上的「連結」。
根據一個或多個欄值準則搜尋列。
語法
GoExcel.FindRow("filename", "sheetname", "first column title", "operator", value to look for, "second column title", "operator", value to look for, "third column title",...)
"filename"
指定資料檔。
"sheetname"
Excel 文件中包含要搜尋的表格的工作表。該工作表可以為任何既有工作表。
"first column title"
要搜尋的表格中的第一欄的標題。欄標題通常放在第 1 列中,從欄 A 開始。
"operator"
可能的值包括:
尋找欄值小於或等於指定值的列。
尋找欄值大於或等於指定值的列。
尋找欄文字值或數值等於指定值的列。
value to look for
可以使用明確值、參數或本端變數指定的文字值或數值。
"second column title"
要搜尋的表格中的第二欄的標題。
"operator"
<=、>= 或 =
value to look for
"third column title"
根據多個準則尋找列。
傳回的結果
與搜尋準則相符的列號碼 (為整數)。如果沒有找到相符列,則該值為 -1。
可能的錯誤
Excel 表格要求
範例
這些範例將參數變數 i 的值設定為表格中的列號碼。Dia 等於 0.2,Len 大於或等於 4.1。第一個範例參考外部工作表,第二個範例參考嵌入的工作表。
i = GoExcel.FindRow("mytable.xls", "Sheet1", "Dia", "=", 0.2, "len", ">=",4.1)
i = GoExcel.FindRow("3rd Party:Embedding 1", "Sheet1", "Dia", "=", 0.2, "len",">=", 4.1)
在這些範例中,列 5、6 和 7 符合第一個條件:Dia = 0.2。但是,只有列 7 符合兩個條件:Dia = 0.2 和 len >= 4.1。
使用 GoExcel.FindRow 函數從找到的列中讀取值。
語法
GoExcel.CurrentRowValue("column name")
"column name"
要從目前列中擷取的儲存格值的欄標題名稱。
傳回的結果
目前列 (先前透過 GoExcel.FindRow 函數找到) 的欄中的儲存格值。
錯誤
如果沒有找到欄,則傳回錯誤訊息。
範例
i = GoExcel.FindRow("iLogic_SCHS.xls", "Sheet1", "thread_diameter", "=", Screw_Size, "screw-length", ">=", screw_length_required) thread_diameter = GoExcel.CurrentRowValue("thread_diameter") screw_length = GoExcel.CurrentRowValue("screw_length") head_diameter = GoExcel.CurrentRowValue("head_diameter") head_thickness = GoExcel.CurrentRowValue("head_thickness") socket_size = GoExcel.CurrentRowValue("socket_size") thread_pitch = GoExcel.CurrentRowValue("thread_pitch")
從工作表儲存格中讀取值,或將值寫入到工作表儲存格中。
語法
GoExcel.CellValue("filename", "sheetname", "cellnumber")
"filename"
請參閱〈指定 Excel 檔案〉。
"sheetname"
Excel 文件中包含目標儲存格的工作表的名稱。該工作表可以為任何既有工作表。
"cell number"
要從中讀取值或向其中寫入值的儲存格地址 (例如「A7」)。也可以指定工作表範圍中的具名範圍。
傳回的結果
錯誤
Excel 表格格式要求
儲存格值可以為數值或文字。
範例
讀取嵌入工作表:
head_rad = GoExcel.CellValue("3rd Party:Embedding 4", "Sheet1","A1")
寫入至嵌入工作表:
GoExcel.CellValue("3rd Party:Embedding 4", "Sheet1", "A1")= head_rad
讀取外部工作表:
head_rad = GoExcel.CellValue("Spreadsheet.xlsx", "Sheet1", "A5") message =GoExcel.CellValue("Spreadsheet.xlsx", "Sheet1", "B5")
寫入至外部工作表:
GoExcel.CellValue("Spreadsheet.xls", "Sheet1", "A6") = "Hello World" GoExcel.Save
在使用 GoExcel.CellValue 或 GoExcel.Open 函數之後,從工作表中的特定儲存格地址讀取值或向其中寫入值。此函數使用之前開啟的檔案和工作表。
語法
GoExcel.CurrentCellValue("cellnumber")
GoExcel.CellValue("cellnumber") (不指定檔名和圖紙名稱)
"cellnumber"
要從目前工作表中讀取或向其中寫入儲存格值的儲存格地址或具名範圍。
傳回的結果
指定儲存格中的儲存格值。
錯誤
範例
從單個工作表中讀取一組儲存格的值:
head_rad = GoExcel.CellValue("Spreadsheet.xlsx","Sheet1","A1") head_thick = GoExcel.CellValue("B1") pin_length = GoExcel.CellValue("C1") shaft_rad = GoExcel.CellValue("D1")
在工作表文件中的一組儲存格中寫入值:
GoExcel.CellValue("Spreadsheet.xlsx","Sheet1","A1") = head_rad GoExcel.CellValue("B1") = head_thick GoExcel.CellValue("C1") = pin_length GoExcel.CellValue("D1") = shaft_rad GoExcel.Save
與 CellValue 函數的運作方式相似。但 GoExcel.NameRangeValue 不是指定一個儲存格地址,而是指定 Excel 工作簿中定義的具名範圍。名稱必須是工作簿內的名稱,範圍必須限定到單個儲存格。使用標準 CellValue 語法,使用名稱取代儲存格地址,您可以存取工作表範圍的具名範圍。
請先使用 GoExcel.CellValue 或 GoExcel.Open 開啟 Excel 檔案,然後再在規則中使用 NamedRangeValue。
語法
GoExcel.NamedRangeValue("PinLength")
開啟指定的 Excel 工作表,並啟用具名工作表 (可選)。然後,您便可以使用諸如 GoExcel.FindRow 和 GoExcel.CellValue 等函數,從工作表中萃取資訊或修改工作表。
語法
GoExcel.Open("filename", “sheetname”)
"filename"
請參閱〈指定 Excel 檔案〉。
"sheetname"
Excel 文件中要啟用的工作表的名稱。該工作表可以為任何既有工作表。
傳回的結果
不適用
錯誤
找不到 Excel 檔案。
範例
如果沒有指定任何工作表名稱,則將假設為「Sheet1」。
GoExcel.Open("Spreadsheet.xls")
也可以指定其他工作表。
GoExcel.Open("Spreadsheet.xls", "MyOtherSheet")
儲存目前 Excel 文件。如果您使用 GoExcel.CellValue 或 GoExcel.CurrentCellValue 函數修改了儲存格,請使用此函數。
傳回的結果
不適用
錯誤
不適用
範例
GoExcel.CellValue("Spreadsheet.xls", "Sheet1", "A1") = "Hello, World!" GoExcel.CellValue("A2") = 5.42 GoExcel.Save
此函數可以實現兩個目標:
從 Excel 工作表中讀取
您可以從垂直方向範圍內的儲存格中讀取值。該函數從第一個儲存格開始讀取值,然後繼續向下直至到達函數中指定的第二個儲存格:
Multivalue.List("parameter") = GoExcel.CellValues("filename.xls", "Sheet1", "A1", "A10")
如果用空字串 ("") 取代第二個儲存格地址,則函數將從第一個儲存格地址開始讀取,然後繼續向下直至遇到空儲存格:
Multivalue.List("parameter") = GoExcel.CellValues("filename.xls", "Sheet1", "A1", "")
您可以從水平方向範圍內的儲存格中讀取值:
Multivalue.List("parameter") = GoExcel.CellValues("filename.xls", "Sheet1", "A1", "J1")
如果先前在規則中參考了工作表,則您也可以忽略檔名和工作表名稱:
Multivalue.List("parameter") = GoExcel.CellValues("B2", "G2")
寫入至 Excel 工作表
您可以將值寫入至垂直方向範圍內的儲存格。該函數從第一個儲存格開始寫入值,然後繼續向下寫入值,直至到達函數中指定的第二個儲存格:
GoExcel.CellValues("filename.xls", "Sheet1", "A2", "A10") = Multivalue.List("parameter")
您可以將值寫入至垂直方向範圍內的儲存格。如果用空字串 ("") 取代第二個儲存格地址,iLogic 會使用與多值清單中的成員數目相同的儲存格來包含清單中的所有成員:
GoExcel.CellValues("filename.xls", "Sheet1", "A2", "") = Multivalue.List("parameter")
您可以將值寫入至水平方向範圍內的儲存格。
GoExcel.CellValues("filename.xls", "Sheet1", "A1", "J1") = Multivalue.List("parameter")
如果先前在規則中參考了工作表,則您也可以忽略檔名和工作表名稱:
GoExcel.CellValues("B2", "G2") = Multivalue.List("parameter")
關閉目前 Excel 工作表。
在 GoExcel.FindRow 之前使用,用於指定工作表中包含欄名稱的列號碼。預設列號碼為 1。如果在欄名稱列上方還有其他列,請變更該值。
範例
GoExcel.TitleRow = 2
在 GoExcel.FindRow 函數之前使用,用於指定工作表中包含資料的第一列的號碼。預設列號碼為 2。
語法
GoExcel.FindRowStart = <row>
<row>
資料開始的列。
範例
預設值 2 表示資料從第 2 列開始,緊隨一個標題列之後:
GoExcel.FindRowStart = 2
如果您有兩個標題列,請在規則中包含 GoExcel.FindRow 的陳述式之前加入以下陳述式:
GoExcel.FindRowStart = 3
透過該函數,可以從 iLogic 規則存取「變更來源」作業。
此函數會使用其他工作表取代目前驅動模型的 Excel 工作表。然後,新工作表中包含的值將驅動模型的標註。
語法
changeOK = GoExcel.ChangeSourceOfLinked(partialOldName, newName)
partialOldName
要取代的工作表名稱部分。
partialOldName 可以為空字串 "",以與第一個連結的 Excel 檔案相符。通常,零件或組合只有一個 Excel 檔案。
newName
完整的新工作表名稱,可以為絕對或相對檔名。
範例
If size = "small" Then changeOK = GoExcel.ChangeSourceOfLinked("pipe"," smallpipe.xlsx") ElseIf size = "medium" Then changeOK = GoExcel.ChangeSourceOfLinked("pipe", "mediumpipe.xlsx") ElseIf size = "large" Then changeOK = GoExcel.ChangeSourceOfLinked("pipe", "largepipe.xlsx") End If
與 GoExcel.FindRow 函數配合使用,以搜尋某個範圍內的值,而非搜尋精確值。預設公差為 0.0000001,與文件單位無關。
語法
GoExcel.Tolerance = <tolerance>
設定更高的公差可擴大可接受值的範圍。
範例
使用陳述式,透過以下方式進行搜尋:
GoExcel.Tolerance = 0.001 i = GoExcel.FindRow("Table1.xlsx", "Sheet1", "length", "=", 2.3)
陳述式變得等同於以下不帶公差的搜尋:
i = GoExcel.FindRow("Table1.xlsx", "Sheet1", "length", ">=", 2.299, "length","<=", 2.301)
阻止顯示 Excel 提示對話方塊。
語法
GoExcel.DisplayAlerts = True
GoExcel.DisplayAlerts = False
True
顯示 Microsoft® Excel 提示 (預設)。
False
不顯示 Excel 提示。
存取 Excel 應用程式物件。僅在您具有 Excel COM 介面使用經驗的情況下才可使用此函數。在規則中使用此函數之前,請呼叫另一個 GoExcel 函數以初始化應用程式。
語法
excelApp = GoExcel.Application