(1/3)需求背景
众所周知,当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)下载地址