从特定 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()
)
)
);