在 jmp 表中创建特定于用户的链接时遇到问题问题:我有一个 jmp 文件位于共享 OneDrive 文件夹中。 其他同事将此 OneDrive 文件夹同步到他们的桌面,以便我们都可以轻松访问共享的 jmp 文件。 jmp 文件内部包含指向与 jmp 文件位于同一共享文件夹中的其他文件的链接。 由于每个人都有特定于用户的 OneDrive 文件路径,因此我的链接实际上是检测特定于用户的文件路径的公式,然后设置特定于用户的适当链接。 不幸的是,当新人打开 jmp 文件时,这些公式不会自动重新运行。 我已经探索了两种选择来解决这个问题,但我不喜欢其中任何一种:
1. 有一个“重新运行公式”脚本,在使用链接之前必须运行该脚本:不幸的是,人们忘记了这个脚本。 此外,人们通常会创建数据子集,然后尝试运行“重新运行公式”脚本,但它不起作用,因为默认情况下会抑制公式计算。
2. 将“重新运行公式”脚本保存为“OnOpen”,以便有人打开 jmp 表时它会立即运行:不幸的是,这会导致出现提示(附后),并且人们在打开它时不敢说“是”,因为他们担心它会毁掉一些东西(他们甚至不知道它的用途)
问题
1. 有没有办法让超链接一点击就更新?
2. 我可以抑制“OnOpen”弹出窗口或编辑弹出窗口来解释用户应该做什么吗?
3. 除了“OnOpen”脚本之外,还有其他方法可以使公式在 jmp 表打开后立即更新吗?
任何帮助表示赞赏。 谢谢!
马特
回复:在 jmp 表中创建用户特定链接时遇到问题你好@马特_匡威。 好问题。 我认为您最好的选择是概括共享文件中的路径,以便它们在运行时构建。 由于不知道该文件的详细信息,因此无法给出具体细节,但很可能涉及表达式处理。 至于你的其他三个选择:
- 超链接通常是硬编码的。 我必须更多地了解您如何以及在何处使用它们。
- 是的。 问题是,您需要在运行 OnOpen 之前更改用户的用户首选项。
- 据我所知
回复:在 jmp 表中创建用户特定链接时遇到问题嘿@唐麦考马克!
感谢您的及时回复。 我很高兴添加更多细节。 以下是链接(即文件/文件夹的路径)如何变化的示例:
- 我的 SEM 图像文件夹的文件路径:C:\Users\麦克弗斯\OneDrive - WL Gore & Associates, Inc\示例共享数据库\SEM 库\4391
- 我的同事文件路径到同一文件夹:C:\Users\米约翰逊\OneDrive - WL Gore & Associates, Inc\示例共享数据库\SEM 库\4391
在示例表(“Table1.jmp”,附件)中,您将看到我如何使用“SEM 文件夹路径”列中的公式来确定用户特定的文件夹路径。 它本质上读取主表(“Table1.jmp”)的文件路径以获取用户特定的目录,然后附加“SEM Library...”
dt_name = "表1";
dt = 数据表( dt_name );
path_full = dt << 获取路径();
文件名 = dt_name || “.jmp”;
n = 芒格(path_full, 1, name_file);
path_folder = Substr(path_full, 1, n - 1 );
路径 = 路径文件夹 || “SEM图书馆”|| “\”|| Char(:数据库编号);
然后,我使用事件处理程序来设置超链接(“SEM 文件夹链接”列)。 我附上了一个完整的压缩文件夹,以防它也可以帮助您了解整个文件结构。
我很想听听更多关于我如何“概括共享文件中的路径,以便它们在运行时构建”。 谢谢!
马特
回复:在 jmp 表中创建用户特定链接时遇到问题您可以使用 %OneDrive% Windows 系统变量来获取基本一驱动器文件夹的用户路径;
使用获取环境变量(“ONEDRIVE”);调用它并在 url 中使用。
回复:在 jmp 表中创建用户特定链接时遇到问题像附件这样的东西怎么样? 我缩短了文件夹路径以包含所有用户通用的部分,并更改了事件处理程序以构建路径的剩余部分(即唯一部分)。
回复:在 jmp 表中创建用户特定链接时遇到问题您还可以使用获取环境变量(“ONEDRIVE”);在事件处理程序中...因为您不希望它在需要时为每一行运行:)
此外,除非设置了 OneDrive 系统变量,否则它可能不适用于 Mac 和 Linux 计算机...
如果 JMP 文件仅位于网络上的一个位置(例如“示例共享数据库”文件夹中),您还可以使用格式化为相对路径的 url。
即路径 =“..\SEM 库\” || Char(:数据库编号);
这甚至应该在 Mac 上工作......但是 jmp 文件必须位于“SEM 库”直接上方的文件夹中
回复:在 jmp 表中创建用户特定链接时遇到问题doh...相对路径将是当前文件夹的一个点...
路径= “.\SEM 库\” || Char(:数据库编号);
回复:在 jmp 表中创建用户特定链接时遇到问题@唐麦考马克,效果很好! (我只需要将一个正斜杠更改为反斜杠)
我认为您编辑的脚本解决了我的问题的第一部分,即链接是在运行时构建的。 然而,我的用户通常遇到的第二个挑战是他们创建该表的子集,然后希望跟踪链接。 不幸的是,子集未保存,因此没有可供读取的文件路径。 这里有什么建议吗?
我可以用@DByss建议获取用户的 onedrive 特定环境,但在该环境和“Table1”之间存在一个文件路径结构,我看到一些用户发生了更改(因此即使用户之间的情况也可能不一致)。
感谢您的帮助!
马特
回复:在 jmp 表中创建用户特定链接时遇到问题这是一个想法。 保存访问目录列表所需的列。 添加 ID 列(按从 1 行到 N 行的顺序编号)作为第一列。 将事件处理程序脚本替换为此
Function( {thisTable, thisColumn, iRow},{rowID},
If(!Namespace Exists("myCustomFunctionNamespace"),
New Namespace("myCustomFunctionNamespace");
myCustomFunctionNamespace:thisPath = Substr(thisTable << Get Path,1,Contains(thisTable << Get Path,"/",-1));
myCustomFunctionNamespace:semFolderPath = Column(thisTable,"SEM Folder Path << Get Values");
);
rowID = Column(thisTable,1);
Open(Char(myCustomFunctionNamespace:thisPath || "/" || myCustomFunctionNamespace:semFolderPath[ rowID] ));
);
列值被加载到列表中,所有操作都基于这些值,而不是需要在表中查找的内容(ID 值除外,它引用原始表中的行号)。
回复:在 jmp 表中创建特定于用户的链接时遇到问题谢谢, @唐麦考马克! 我添加了一个 ID 列并替换了事件处理程序;但是,当单击第 1 行中的链接时,我收到此错误:“访问或评估 'myCustomFunctionNamespace:semFolderPath[ /*###*/rowID]' 时出现第 1 行下标问题”。 你明白“/*###*/”指的是什么吗? 我知道我们已经很接近了,因为我可以让脚本在函数之外运行(请参阅我保存的脚本)。 请注意,我只是在创建子集之前测试链接(尚未使用子集进行尝试)。
非常感谢您的帮助。
马特
回复:在 jmp 表中创建用户特定链接时遇到问题对于那个很抱歉@马特_匡威。 倒数第二行代码应该是
rowID = Column(thisTable,1)[iRow]
您想要引用所选行(来自子集)中第一列的值。 按照我的方式,它引用了整个专栏。
回复:在 jmp 表中创建特定于用户的链接时遇到问题@唐麦考马克,我应该抓住的! 谢谢你! 这现在也适用于子集! 我将不得不开始更频繁地使用事件处理程序! 非常感谢您的帮助。