从一列中获取字符之间的行,然后将其他列值(仅选定的行)移动到其他列你好,
我想将选定行的多个列值移动或复制粘贴到同一张表中的其他列,如下图所示
感兴趣的行总是从 :Item == "start" 开始,直到 :Item == "values",但总行数可能不同。我想将感兴趣的行的 Col1 和 Col2 中的值复制粘贴或移动到 Col 3 和 Col 4。我目前的想法是手动创建一个列表,其中包含 :Item 下从 start 到 values 的字符串,然后创建一个列,如果 :Item 包含列表,则将其标记为“1”。从那里设置 Col 3 == Col 1 和 Col 4 = Col 2。
但是,起始和值之间的行可以不同。我想知道是否有人知道更好的方法来完成任务,而不需要手动创建列表,而是基于“起始”和“值”来查找行。
原始表

搬走后

自动化和脚本回复:从一列中获取字符之间的行,然后将其他列值(仅选定的行)移动到其他列我认为手动进行剪切和粘贴会比创建开始和停止列表更容易。
回复:从一列中获取字符之间的行,然后将其他列值(仅选定的行)移动到其他列但目的是实现日常自动化,并且开始和值之间的行可能会随时发生变化。
回复:从一列中获取字符之间的行,然后将其他列值(仅选定的行)移动到其他列然后我会让它尽可能简单,并创建一个配置表,例如

这使得你的 JSL 非常简单,例如:
Names Default To Here( 1 );
dt = Current Data Table();
dtConfig = Data Table( "Config" );
For( i = 1, i <= N Rows( dtConfig ), i++,
frCol = dtConfig:From Column[i];
toCol = dtConfig:To Column[i];
For( k = dtConfig:Start Row[i], k <= dtConfig:End Row[i], k++,
Column( dt:toCol )[k] = Column( dt, FromCol )[k];
If( dtConfig:Move_Copy == "Move",
Column( dt, FromCol ) = ""
);
);
);
回复:从一列中获取字符之间的行,然后将其他列值(仅选定的行)移动到其他列我认为您可以在没有配置表的情况下安全地执行此操作。这将检查以确保在覆盖任何内容之前,Col 1 在“开始”行中包含一个值。是的,我喜欢使用 For Each()。
Names Default To Here( 1 );
starts = Loc( dt:Item << Get Values, "start" );
ends = Loc( dt:Item << Get Values, "values" );
For Each( {v, i}, starts,
If( :Col 1[v] != "",
For Each( {val, idx}, v :: ends[i],
:Col 3[val] = :Col 1[val];
:Col 4[val] = :Col 2[val];
:Col 1[val] = "";
:Col 2[val] = "";
)
)
);