從特定 Excel 單元格導入 Excel 數據我遇到需要在 JMP 中分析的數據有些隨意地存儲在 Excel 文件中的情況。幸運的是,我可以輕鬆獲得數據所在的 Excel 單元格列表,並且我想使用 JSL 自動導入這些值。我正在尋找有關如何有效和高效地做到這一點的想法。
例如,假設我在 JMP 中的單個列中需要的數據存儲在這些 excel 單元格中
E284,E400,E507,D615,E727,D852,E1003,E1114,D1220,D1339,E1493
我嘗試使用 Open() 並指定工作表、起始行、結束行、起始列、結束列,以僅獲取 JMP 文件中具有單行/列的每個值,例如
Open(
"C:\temp\worksheet.xlsx",
Worksheets( "sheet1" ),
Use for all sheets( 0 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 284 ), // get data on row 284
Data Starts on Column( 5 ), // get data on column "E" (the fifth column)
Data Ends on Row( 284 ), // get data on row 284
Data Ends on Column( 5 ), // get data on column "E" (the fifth column)
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
然後,我將為要從特定單元格中檢索的每個值獲取一個單獨的數據文件,然後將單獨 JMP 文件中的值全部收集到一列中的一個數據表中。
我面臨的一個問題是,當您打開一個 excel 文件時,似乎忽略了 excel 工作表頂部的所有空白行?所以第 1 行並不是真正的第 1 行,除非第 1 行中有一些數據。這是真的嗎?
任何其他想法都會有所幫助。
腳本回复:從特定 Excel 單元格導入 Excel 數據我在 Excel 中找到了一個更簡單的解決方法。Excel 中有一個 INDIRECT(cellref) 函數,可用於從特定單元格獲取結果。因此,我能夠製作一個新的 Excel 工作表並創建列來指示數據所在的工作表和單元格,並使用 INDIRECT 函數來獲取分析所需的結果表。
不過,我確實認為,這個問題突出了在 JMP 中導入 Excel 所需的一些改進。
回复:從特定 Excel 單元格導入 Excel 數據這是一個示例(可能是解析 XML 的更好方法,但模式匹配函數為我完成了這項工作:
/*----------------------------------------------------------------------
Method: getWorksheets
----------------------------------------------------------------------*/
getWorksheets = method({username=1},
// this technique (including the overhead of creating the class,
// is >300 x faster than getExcelWorksheets on Mac
// and >100 x faster on Windows
workbook = "xl/workbook.xml";
za = open(_excelFilePath,zip);
contents = za<<READ>>sheet + "\!""
+ " sheetId=\!"" + PatRepeat(PatNotAny("\!"")) + "\!""
+ (" r:id=\!"" + PatRepeat(PatNotAny("\!"")) + "\!"" | " state=\!"hidden\!"" + " r:id=\!"" + PatRepeat(PatNotAny("\!"")) + "\!"")>>x;
ismatch = 1;
lstWorksheets = {};
while(ismatch,
ismatch = patmatch(contents,pat,"");
if (!contains(x,"hidden"),
substituteinto(sheet,"&","&");
if (!contains(lstWorksheets,sheet),
insertinto(lstWorksheets,sheet)
)
)
);
return(lstWorksheets);
),</READ>回复:從特定 Excel 單元格導入 Excel 數據這是一個有趣的想法。我不知道這就是 XLSX 文件的“幕後”。
回复:從特定 Excel 單元格導入 Excel 數據這是一個稍微極端的 hack,雖然我使用類似的技術來創建 PPTX 和 DOC 文件......
XLSX 只是一個包含 XML 文件的 zip 文件。您可以使用 XML 來引用單元格坐標:

您可以使用 ZipArchive 獲取 XML 文件。
回复:從特定 Excel 單元格導入 Excel 數據我只記得,是的,確實,對於工作表頂部有空單元格的 Excel 工作表,這些行會被忽略。看https://www.jmp.com/support/notes/60/026.html
和Excel 導入改進:在導入預覽中顯示行號和列標籤
回复:從特定 Excel 單元格導入 Excel 數據簡單的答案是“不”。如果確實有其他方法來引用數據的位置,我會嘗試你的方法,但在這種情況下,Excel 單元格引用是查找數據的主要方法。
回复:從特定 Excel 單元格導入 Excel 數據您是否有可用於識別除 Excel 單元格引用之外的單元格的信息。例如,也許是一個字段標籤?我通常以最少的處理將數據從 Excel 加載到 JMP 中,然後簡單地遍歷行和列以搜索關鍵信息。通常,第一次掃描將識別包含我感興趣的字段標籤的列,然後第二次掃描將加載字段值。通過這種方式,我可以構建可以從中構建表格的數據列表,或者可以設置為表格變量的標題信息。
例如 - 掃描以查找包含特定字段標籤的列
identifier = "Description";
cols = dt<<GETCOLUMNNAMES> </GETCOLUMNNAMES>
然後掃描字段
fields = [=>];
fields["Description"] = 0;
fields["USL"] = 0;
fields["LSL"] = 0;
fields["Nominal"] = 0;
keys = fields << getKeys;
for (i=1,i<=nitems(keys),i++,
field = keys[i];
success = 0;
for (r=1,r<=nrow(dt),r++,
cell = column(dt,lblCol)[r];
if (contains(cell,field),
success = 1;
fields[field] = r;
break()
)
)
);