0

我是 PowerBuilder 的新手,我想知道在使用 DataWindow 的 SaveAs() 方法时是否可以保持列名的“可见”值。目前,我的报告显示诸如“Numéro PB”或“Poste 1-3”之类的列,但是当我保存时,它会显示数据库的名称。即:“no_pb”和“pos_1_3”...

当我正在开发一个已部署的应用程序时,我必须使我的更改和实现尽可能地对用户友好,而他们不会理解其中的任何内容。

我已经使用 dw2xls api 来保存报告的精确副本,但他们希望有一个仅保存原始数据的选项,我认为我无法使用他们的 API 来实现它。

另外,我被要求不要使用 Excel OLE 对象来执行此操作...

有人有想法吗?

谢谢,迈克尔

4

2 回答 2

1

dw.saveas(<string with filename and path>,CSV!,TRUE)将数据窗口数据保存为逗号分隔值文本文件,第一行具有列标题(dw 画家中的数据库名称)。

要在保存中设置列标题,您可以首先访问数据

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 中

于 2012-08-28T21:16:06.013 回答
0

这假设您的显示列与您的原始列匹配。创建一个数据存储ds_head。将您的报表 DW 设置为 DataObject(无数据)。我正在使用您要保存的报告调用 DataWindow dw_report。完成后,您需要删除这两个临时文件。您可能需要指定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")
于 2012-09-14T14:59:04.157 回答