077、ALV打印与导出

077、ALV打印与导出 077、ALV打印与导出上周有同事跑过来说,用户报了个故障:ALV导出的Excel打不开,全是乱码。我远程鼓捣一下,看了那个文件,后缀是.xls,双击后Excel弹出警告“格式与扩展名不一致”,强行打开,里面全是HTML标签。这不是用户操作失误,是SAP的老传统——ALV默认导出的“电子表格”格式,其实就是一个HTML文件,披着.xls的皮。很多刚学ABAP的人一听说ALV能打印、能导出,就以为要写一堆代码,其实不用,REUSE_ALV_GRID_DISPLAY这个老函数自带的工具栏上就有打印按钮和导出按钮,不干掉标准工具栏,用户就能点。可问题是,标准功能虽然白送,但用起来有几个坑,你不趟一次永远不知道。先拿导出乱码来说。ALV的导出按钮,点击后弹出的保存对话框里,文件类型默认是“电子表格”。这个“电子表格”不是真正的Excel二进制格式,而是HTML表格,SAP为了方便浏览,把它叫成电子表格。如果用户不手动改文件类型,保存下来的就是那个乱码祸根。解决办法有两个方向。一是教用户,在导出保存对话框里把文件类型换成“Excel 2000-2003”或者“CSV”,这样打开就没问题。二是在程序里写死导出格式,不让用户选。但函数式ALV没有直接提供指定导出格式的参数,想彻底控制导出格式,得用类ALV,比如CL_GUI_ALV_GRID,它的方法LIST_DOWNLOAD可以直接指定路径和格式。零基础的人先别急着转OO,记住这个结论就行:老函数适合快速出报表,真要精细控制导出,早早晚晚得学类ALV。打印这个功能也自带。用户点工具栏打印机图标,ALV会走SAP标准的打印框架,不用你写输出程序。但是,打印出来的效果经常和屏幕显示差得远。第一个坑是标题消失或者跑到第二页。ALV打印的标