0
点赞
收藏
分享

微信扫一扫

一键复制ALV数据到剪贴板

(1/3)需求背景

众所周知,当ALV中数据条目较多时,点全选按钮,再点复制,会有下图这样的提示:

一键复制ALV数据到剪贴板_剪贴板

而且,直接复制中的坑,还不止这些,它还包括:

1、带负号的数字,粘贴出来之后,负号也是在后面的,不方便统计(当然,可以通过自己写转换例程来实现ALV中的负号提前);

2、数字格式的内容,粘贴到Excel中后,会出现科学技术法之类的情况;

3、如果文本字段以引号(")开头,或包含换行符,粘贴到Excel中后,后面的单元格全乱了;如果有多个引号,额……就更乱了。

虽然我们可以通过ALV提供的导出方式,将数据导出到Excel后再使用这些数据,但在有些场景下,我们并不想执行“导出-选择类型-选择文件”这样的操作,我们只想把数据复制出来,即时使用。


(2/3)功能介绍

然后,我写了一个Function,提供了如下功能:



1、根据当前ALV的显示列、列顺序,把内表中对应列的数据发送到剪贴板

2、根据当前ALV的过滤条件,把内表中满足过滤条件的数据发送到剪贴板

3、负号提前

4、对带引号或换行符的文本,做了处理



食用说明:


1、自己建一个Function,把文末的代码放进去

2、在ALV的GUI状态里加一个按钮,比如TO_CLIPBRD,然后在USER_COMMAND中接收到此事件后,调用该Function。如果SY-SUBRC = 0,给用户一个提示“数据已发送到剪贴板”

3、调用Function时,Tables( IT_TAB = 调用ALV展示函数时所赋值的内表 ),Exceptions用于接收异常


对于数字粘贴时可能出现科学技术法的问题的说明:



1、如果是粘贴到Excel,胡YaDi胡总有一个好的处理建议,比如1234567890,可以把其内容处理为="1234567890"后,再发送到剪贴板

2、因为我只是要把数据发送到剪贴板,而不一定是要粘贴到Excel,所以带着=""会很别扭,所以没在此函数中处理。有需要的朋友可以对相关代码自行处理



另外,下载文件中还包含了一个内表数据发送到剪贴板的函数,包含的特殊功能:



1、负号提前

2、带引号和换行符的文本的处理




(3/3)下载地址


举报

相关推荐

0 条评论