我有大量 Excel 文件,我会将数据传输到 JMP 进行分析。直到最近,我都以一种非常原始的方式进行操作,即手动打开 Excel 文件,然后将相关信息直接复制到 JMP 表中。虽然这种方法可行,但我确实认为导入功能(以及连接以附加到现有数据表)是提高效率的更好的长期解决方案。
我的相关信息位于每个工作簿的第 4 页,并标记为“周期”。我需要同时导入 4 到 20 个这样的工作簿,以便更新我的 JMP 表。每个工作簿都有一个字符串标题,通常为 8 个字符长。这是被测试对象的唯一标识符。
我的问题是:我是否可以在导入时将生成的表的名称(例如,现在如果我导入 8 个文件,JMP 中生成的表为“cycle”、“cycle 2”、“cycle 3”等)替换为原始 excel 工作簿的标题(在此示例中为“workbook 1”、“workbook 2”、“workbook 3”等)?
我的下一个问题是关于串联的。我是否可以编写一个脚本来分析特定单元格(例如,由您的脚本生成的单元格,它在导入时将工作簿的标题复制到特定列中),然后使用该单元格中的值将其余列中的信息附加到现有的 JMP 表中?
为了澄清起见,让我们假设我正在测试一个对象,在本例中标记为“A71320”。我有一个 JMP 数据表,也称为“A71320”,它是我与此测试对象相关的所有数据的汇编。每个新测试都会生成一个 excel 文件,也标记为“A71320”。我想使用您的脚本导入此文件。如果我理解正确的话,它将从工作表 4“cycle”复制所有数据,创建一个新的 JMP 表,标记为“cycle”,然后在这个新表中创建一个包含 1 个填充单元格“A71320”的新列。然后我想运行一个脚本,它将看到这个单元格“A71320”,识别 JMP 中名为“A71320”的现有表,并附加除标题单元格之外的所有信息,从“cycle”到“A71320”。这可能吗?
我非常诚挚地感谢您花时间阅读这个问题。
羚羊
这是一个脚本,可以让您开始编写自己的脚本来完成您的任务。请确保您研究了提供的脚本,以便了解它是如何工作的。
Names Default To Here( 1 );
// Set the object in question
object = "A71322";
// Get a list of input xls files to proces
// I am using the method where all files to be processed are moved into a single directory
dir = "C:\users\xxxx\input files\";
theFiles = Files In Directory( dir );
// Create the start of the final data table
dt = New Table( "Combined",
New Column( "Run",
formula(
If(
Row() == 1, 1,
:Cycle ID == 1 & Lag( :Cycle ID ) != 1, Lag( :Run ) + 1,
Lag( :Run )
)
)
),
New Column( "Total Cycle Number", formula( Row() ) )
);
// Loop through all of the file names and select only object in question files
For( i = 1, i <= N Items( theFiles ), i++,
If( Contains( theFiles[i], object ) == 1,
dtCycle = Open(
Char( dir ) || theFiles[i],
Worksheets( "cycle" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
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( "-" )
)
);
dt = dt << concatenate( dtCycle, Append to first table( 1 ) );
// Clean up
Close( dtCycle, nosave );
)
);你好@txnelson ,
我听到了! 请参阅附件。 如上所述,我经常生成“新”A71322.xls 文件。 文件的每个实例都是唯一的(我有一个用于存储/区分它们的文件系统结构)并且每个都对应于 .jmp 表中描述的“运行”。 我通常手动打开 excel 文件,然后复制“循环”工作表中列标题下方的所有数据,然后将它们粘贴到“循环 ID”列最后一个条目下方的 .jmp 表中。 “总循环数”和“运行”的公式在数据表中生成正确的条目。
到目前为止,我已经能够通过仅导入 excel 书籍、循环表,然后使用基本连接函数来重新创建上述内容。 但是,目前速度很慢,而且仅导入工作表名称这一事实(也就是说,导入 4 个工作簿会导致“周期”、“周期 1”、“周期 2”和“周期 3”)有时令人困惑。 像我所做的那样手动继续对我来说更快。
但是,我的数据集在不断增长,因此我正在寻找脚本解决方案。 我对多个电池(即 A71321、A71311 等)进行了测试,并且相信我能够调整您提供的解决方案。
还有一点需要注意,单元格的标题可以在工作表“测试”中找到,如果有帮助的话,单元格 I-6(但是,这不如在我的场景中导入工作簿的标题那么灵活。 ).
再次感谢您耐心阅读我的请求以及任何即将到来的回复。 如果您需要更多信息,我将随时为您解答。
问候,
羚羊
这似乎不是一项艰巨的任务……但是,具体细节太模糊,无法尝试编写脚本来满足您的需求。您输入的 Excel 工作簿和最终数据表的示例确实有助于尝试指导您完成脚本的开发。