我是PowerBuilder的新手,我想知道在使用DataWindow的SaveAs()方法时是否可以保留列名的“可见”值。目前,我的报告显示“NuméroPB”或“Poste 1-3”等列,但是当我保存时,它会显示数据库的名称。即:“no_pb”和“pos_1_3”......
当我正在处理已部署的应用程序时,我必须进行更改和实现尽可能方便用户,并且他们不会理解任何内容。
我已经使用dw2xls api来保存报告的精确副本,但是他们想要一个只保存原始数据的选项,我不认为我可以使用他们的API实现它。
另外,我被要求不使用Excel OLE对象来执行此操作...
任何人都有想法?
谢谢, 迈克尔
答案 0 :(得分:1)
dw.saveas(<string with filename and path>,CSV!,TRUE)
将数据窗口数据保存为逗号分隔值文本文件,第一行包含列标题(dw painter中的数据库名称)。
要在saveas中设置列标题,您可以先使用
访问数据any la_dwdata[] // declare array
la_dwdata = dw_1.Object.Data // get all data for all rows in dw_1 in the Primary! buffer
从这里你可以创建一个输出文件,该文件最初包含一系列字符串 使用您想要的列名称,然后将数组中的数据转换为字符串(循环遍历数组)。如果在值之间插入逗号并将文件命名为“CSV”扩展名,则会将其加载到Excel中。由于此方法还将包含任何非可见数据,因此如果用户不希望看到它,您可能必须使用其他逻辑来排除它们。
所以现在你有一个字符串,由一系列数据组成,这些数据由制表符分隔,每个字符串末尾都有一个crlf。你可以用'blah,blah,blah~r~n'这个用户友好的列名来创建你的'标题字符串'(这是三个'blah'字符串,用逗号分隔,末尾有一个crlf)。
现在解析从dw_1.Object.Data获取的字符串以查找第一行,将其剥离,然后将其替换为您创建的标题字符串。您可以使用replace方法用逗号替换其余选项卡。现在将字符串保存到扩展名为.CSV的文件中,然后将其加载到Excel
中答案 1 :(得分:0)
这假设您的显示列与原始列匹配。创建一个DataStore ds_head
。将报表DW设置为DataObject(无数据)。我正在使用您要保存的报告dw_report
调用DataWindow。完成后,您将要删除这两个临时文件。您可能需要指定EncodingUTF8!
或其他一些编码而不是ANSI,具体取决于DataWindow中的数据。注意:Excel将打开此CSV,但其他一些程序可能不喜欢它,因为标题行有一个尾随逗号。
``
ds_head.saveAsFormattedText("file1.csv", EncodingANSI!, ",")
dw_report.saveAs("file2.csv", CSV!, FALSE, EncodingANSI!)
run("copy file1.csv file2.csv output.csv")