从特定 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 数据这是一个稍微极端的黑客,尽管我使用类似的技术来创建 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()
)
)
);