有没有办法将结果作为文本或Excel电子表格保存在复合数据窗口中? Powerbuilder声明复合材料保存它的格式是PSReport。这对我正在尝试做的事情并不起作用。这个问题还有其他解决方法吗?
答案 0 :(得分:0)
复合数据窗口可以包含任意数量的嵌套数据窗口。因此,如果内存服务,则无法以有意义的方式将整个复合数据窗口保存为数据(SaveAs只会为您提供一行无意义的数据),但您可以将每个嵌套数据窗口保存在复合内部。
这是我编写的一些PFC代码(用于菜单项内部),它创建嵌套报表的副本,然后执行SaveAs(在这种情况下为对话框):
//must create a 'dummy' datawindow,
//and put the data on the nested report into it
u_dw ldw_Temp
Window lw_Parent
String ls_Syntax, ls_Error
If Not IsValid(i_dwo) Then
MessageBox('Unexpected Error', &
'The pointer to the datawindow object was invalid. Contact Systems.')
Return
End If
If i_dwo.Type = 'report' Then
//continue
Else
MessageBox('Unexpected Error', &
'The pointer did not refer to a report. Contact Systems.')
Return
End If
If idw_Parent.of_GetParentWindow(lw_Parent) = 1 Then
ls_Syntax = i_dwo.object.datawindow.syntax
If lw_Parent.OpenUserObject(ldw_Temp) = 1 Then
If ldw_Temp.Create(ls_Syntax,ls_Error) = 1 Then
ldw_Temp.Object.Data.Primary = i_dwo.Object.Data.Primary
ldw_Temp.Event pfc_SaveAs()
Else
If IsNull(ls_Error) Or ls_Error = '' Then ls_Error = '<unknown error>'
MessageBox('Error','Error creating datawindow object: ' + ls_Error)
End If
lw_Parent.CloseUserObject(ldw_Temp)
Else
MessageBox('Error','Error creating datawindow control on ' + lw_Parent.ClassName())
End If
Else
MessageBox('Error','Unable to obtain pointer to the parent window.')
End If
基本上,此代码获取嵌套报表(上面为ls_Syntax = i_dwo.object.datawindow.syntax
)的数据窗口对象的语法,然后在父窗体上创建一个数据窗口控件并将该语法加载到其中,然后从该窗体中复制数据进入另一个。最后,它在副本上调用SaveAs,并向用户显示一个对话框,询问他们希望从嵌套报告中以何种格式保存数据。
您可以自动执行此操作,以便将每个嵌套报表另存为单独的文件,然后如果您愿意,可以将这些单独文件的形成自动化为单个文件(工作簿中的工作表,附加的文本文件等)。
还有其他方法可以根据您要完成的内容来完成您的要求。
即使是数据窗口控件(那里的dwo事件变量),i_dwo
变量也在右上角加载。
这可能会让你跑步,如果你有任何问题,请提出问题。