返回目录:excel表格制作
psr文件可以直接拖到pb环境下修改的,如果你了解数据库看下数据库对应字段里面的类型,应该是类型不符
说的是数据窗口保存与导入文件格式吧?
--------------------保存文件函数dw.saveas(),以下是部分保存文件格式,更多格式请参照PB帮助文档
Clipboard!保存到剪贴板
CSV!以逗号分隔7a64e59b9ee7ad94338的形式保存数据
dBASE2! 保存为dBASE-II格式
dBASE3! 保存为dBASE-III格式
DIF! 保存为数据内部交换格式(Data Interchange Format)
Excel!保存为Microsoft Excel格式
Excel5! 保存为Microsoft Excel 5格式
HTMLTable!将数据保存为与数据窗口布局相对应的HTML格式
PSReport! 保存为Powersoft Report (PSR)格式
SYLK!保存为Microsoft Multiplan格式
Text! 缺省值,以每行用回车符结束、列之间使用Tab字符分隔的格式保存数据
WKS! 保存为Lotus 1-2-3格式
WK1!保存为Lotus 1-2-3格式
WMF!保存为Windows元文件格式
--------------------保存文件函数dw.ImportFile(),以下是部分导入文件格式,更多格式请参照PB帮助文档
dw.ImportFile()可导入的文件中的数据可以是以Tab字符作为分隔符的文本,也可以是dBase II、III格式的数据。
Text!
CSV!
XML!
DBase2!
DBase3!
我是这样写的,不知道对你有没有帮助,首先写一个外部通用函数(带两个参数,第一个参数为导出excel的标题,第二个为要导出的数据窗口,传递方式都是value):f_export_excel(string rptheadtxt,datawindow ad_dw)
Int li_value
String ls_path,ls_fname
String ls_tempfilename
li_value = GetFileSaveName("请选择导出文件", &
+ ls_path, ls_fname, "XLS", &
+ "Excel文件 (*.xls), *.xls," &
+ "Word 文件 (*.doc), *.doc,")
IF li_value <> 1 THEN RETURN 0
SetPointer(hourglass!)
// 删除原文件
IF FileExists(ls_path) THEN
IF MessageBox('提示信息7a64e59b9ee7ad94364', '原文件已经存在, 是否覆盖 ?', Question!, YesNo!) = 2 THEN RETURN 0
IF NOT FileDelete(ls_path) THEN
MessageBox('提示信息', '删除原文件失败, 该文件可能正在被使用 !')
RETURN 0
END IF
END IF
ls_tempfilename = "temp_excel" + String( Today( ), 'yyyymmddhhmmssfff' )
IF ad_dw.SaveAsAscii ( ls_tempfilename, "~t", "") = -1 THEN
MessageBox("提示信息", "导出数据出错. 不能写入文件 !", Exclamation!)
RETURN 0
END IF
// 去掉行间隔
Integer li_FileNum, li_FileNum_temp, li_len = Len( "<tr>~r~n<tr>" )
String ls_FileRead
Long ll_pos = 1
li_FileNum = FileOpen( ls_path, StreamMode!, Write!, LockWrite!, Append!)
li_FileNum_temp = FileOpen( ls_tempfilename, StreamMode! )
DO WHILE FileRead( li_FileNum_temp, ls_FileRead ) > li_len
ll_pos = Pos( ls_FileRead, "<tr>~r~n<tr>", 1 )
DO WHILE ll_pos > 0
ls_FileRead = Replace( ls_FileRead, ll_pos, li_len, "<tr>" )
ll_pos = Pos( ls_FileRead, "<tr>~r~n<tr>", ll_pos )
LOOP
FileWrite( li_FileNum, ls_FileRead )
LOOP
FileClose( li_FileNum )
FileClose( li_FileNum_temp )
FileDelete( ls_tempfilename )
MessageBox('提示信息','数据导出成功 !', Exclamation!)
RETURN 1
调用规则:f_export_excel(parent.title,dw_1)
用下面两点试试:
.PSR是PB的一种报表保存的格式。
导入PB中之后再导出到Excel中。
要是不行再按下面的方法试试:
PB(PowerBuilder)有一种以PSR结尾的特殊的保存报表的文件格式(本文简称作PSR文件)。当报表以PSR格式另存出来后,我们常常会不知道用什么方法再次打开它。
下面将介绍打开的办法:
1.先新建一空的库文件(PBL文件),这里命名为psropen,在库文件中的应用也命e799bee5baa6e4b893e5b19e330名为psropen。
2.再创建一窗口w_psropen,稍微调一下它的属性,如width,height,title等。
3.在窗口中添加按钮cb_1,cb_2,cb_3,cb_4,分别命名“另存为”,“打印”,“选择文件”,“返回”。
4.在窗口中添加一数据窗口dw_1。
5.另存为按钮clicked的代码:
String ls_File, ls_Path, ls_Ext
GetFileSaveName("Save Report", ls_Path, ls_File, "psr", "PSReport Files
(*.psr),*.psr, " + &
"Text Files (*.txt),*.txt, HTML Files (*.htm),*.htm, Excel5 File
(*.xls),*.xls")
If Trim(ls_Path) <> "" Then
ls_Ext = Lower(Right(ls_Path, 3))
Choose Case ls_Ext
Case "psr"
dw_1.SaveAs(ls_Path, PSReport!, True)
Case "txt"
dw_1.SaveAs(ls_Path, Text!, True)
Case "htm"
dw_1.SaveAs(ls_Path, HTMLTable!, True)
Case "xls"
dw_1.SaveAs(ls_Path, Excel5!, True)
Case Else
MessageBox("Save Report", "The type of file saved is identified by
the extension. " + &
"Use '.psr' for PSReport, '.txt' for Text, '.htm' for HTML
Table, or '.xls' for & Excel5 ", Exclamation!, OK!)
Return
End Choose
End if
6.选择文件按钮clicked的代码:
String ls_File, ls_Path, ls_Ext
long c =0,li_len,li_pos
GetFileOpenName("打开PSR报表", ls_Path, ls_File, "psr", "PSReport Files
(*.psr),*.psr, " )
If Trim(ls_Path) <> "" Then
ls_Ext = Lower(Right(ls_Path, 3))
Choose Case ls_Ext
Case "psr"
dw_1.setredraw(false)
dw_1.dataobject = ls_path
dw_1.setredraw(true)
dw_1.modify("datawindow.print.preview=Yes")
Case Else
MessageBox("打开PSR报表", "本程序只能打开.PSR文件! ", Exclamation!,
OK!)
Return
End Choose
End if
7.打印按钮clicked代码:dw_1.print()
8.返回按钮clicked代码:close(parent)
9.在应用psropen的open事件中加入: open(w_psropen)。然后保存并运行,大功告成啦!
注意:
1、在窗口中特别加入了一个“另存为”的按钮,以提示PSR文件格式是怎样生成的。另外当数据窗口的预览属性为假时,PSR文件的数据还可以修改!修改后再保存成相同文件名便实现了修改PSR文件数据的功能(只要是原来数据窗口另存出来时可修改的部分均可实现修改)。
2、PBDWE60.DLL,PBVM60.DLL是支持本程序的必须文件。
3、本程序在PB6.5下调试通过。