hur.cn - 华软网

 热门搜索

求教:使用PB将数据库中的表导出为EXCEL

  作者:未知    来源:网络    更新时间:2019/4/16
问题如同题目的描写
另外我运用的是SQL SERVER 数据库
------华软网友回答------
用saveas()函数
------华软网友回复------
DataWindow的

------华软网友回复------
int i_saveornot
string str_name,str_name2

str_name="d:\医院定单\sheet1.xls"

i_saveornot=dw_2.saveas(str_name,excel!,true)

if i_saveornot =1 then
messagebox("提醒","记录导出成功!")
else
messagebox("提醒","记录导出失利!")
end if

------华软网友回复------
$PBExportHeader$uo_export.sru
forward
global type uo_export from userobject
end type
type cb_save from commandbutton within uo_export
end type
type dw_report from datawindow within uo_export
end type
end forward

global type uo_export from userobject
integer width = 210
integer height = 84
long backcolor = 67108864
string text = "none"
long tabtextcolor = 33554432
long picturemaskcolor = 536870912
cb_save cb_save
dw_report dw_report
end type
global uo_export uo_export

type variables
string is_sql = "",is_button_text = ""
long il_height = 0,il_width = 0,il_textsize = 0

end variables

on uo_export.create
this.cb_save=create cb_save
this.dw_report=create dw_report
this.Control[]={this.cb_save,&
this.dw_report}
end on

on uo_export.destroy
destroy(this.cb_save)
destroy(this.dw_report)
end on

event constructor;this.ReSize(il_width,il_height)
cb_save.height = il_height
cb_save.width = il_width
cb_save.textsize = - il_textsize
cb_save.text = is_button_text
if this.enabled = false then cb_save.enabled = false

end event

type cb_save from commandbutton within uo_export
integer width = 210
integer height = 84
integer taborder = 10
integer textsize = -11
integer weight = 400
fontcharset fontcharset = gb2312charset!
fontpitch fontpitch = variable!
string facename = "宋体"
string text = "存盘"
end type

event clicked;string ls_syntax,ls_error,ls_path = "",ls_filename = "",ls_curdir
long ll_rtn = 0

ls_curdir = GetCurrentDirectory()
ls_syntax = sqlca.SyntaxFromSql(is_sql,"style(type=grid)",ls_error)
dw_report.Create(ls_syntax,ls_error)
dw_report.SetTransObject(sqlca)
dw_report.Retrieve()
ll_rtn = GetFileSaveName("保存资料",ls_path,ls_filename,"xls","电子表格(*.xls),*.xls,文本资料(*.txt),*.txt")
if ll_rtn = 1 then  //success
if FileExists(ls_path) then
if MessageBox("笼罩提醒","资料:" + ls_path + "已存留,要替换吗?",Question!,YesNo!) = 2 then return
end if
Choose Case right(trim(ls_path),3)
Case "xls"  //Excel file
if dw_report.RowCount() <= 65536 then
if dw_report.SaveAs(ls_path,Excel!,true) = 1 then
MessageBox("提醒","资料:" + ls_path + "保存成功!",Information!)
else
MessageBox("提醒","资料:" + ls_path + "保存失利!",Information!)
end if
else
MessageBox("提醒信息","导出的数据超越了Excel的容量,没法继续!",Exclamation!)
end if
Case "txt"  //Text file
if dw_report.SaveAs(ls_path,Text!,true) = 1 then
MessageBox("提醒","资料:" + ls_path + "保存成功!",Information!)
else
MessageBox("提醒","资料:" + ls_path + "保存失利!",Information!)
end if
End Choose
elseif ll_rtn = 0 then  //user cancel the command
// MessageBox("提醒","您取消了保存操作!",Information!)
elseif ll_rtn = - 1 then  // an error was occured
MessageBox("提醒","猎取信息失利!",StopSign!)
end if
ChangeDirectory(ls_curdir)

end event
type dw_report from datawindow within uo_export
boolean visible = false
integer width = 69
integer height = 48
integer taborder = 20
string title = "none"
boolean livescroll = true
borderstyle borderstyle = stylelowered!
end type


------华软网友回复------
请问上面的大哥写了很长的一段代码,是否都需要用上?
是否能成功呢?
------华软网友回复------
你导入pbl中,直接拖到窗口上,然后在General属性里面设置is_sql为要检索的select语句,is_button_text为按钮的显示内容,il_height为控件的高度,il_width为控件的宽度,il_textsize为控件的字号.
------华软网友回复------
即可.
------华软网友回复------
这是一个用户自定义控件.
------华软网友回复------
將资料保存為excel资料﹐并打印和表頭
1﹑定義一實例變量
OLEobject o1
2﹑在窗口定義一函數 wf_head 參數為
            string ls_col
            string ls_value
            integer li_cent
函數體//li_cent:1 靠左    3 置中     4 靠右
o1.Range(ks_col).Select()
o1.Selection.VerticalAlignment = 2
o1.Selection.WrapText = false
o1.Selection.Orientaiton = 0
o1.Selection.AddIndent = false
o1.Selection.ShrinkToFit = false
o1.Selection.MergeCells = false
o1.ActiveCell.ForulaR1C1 = ls_value
o1.Selection.HorizontalAlignment = li_cent
3﹑在窗口中定義一新的事件ue_excel 參數為
              string ls_docname ,ls_named ,ls_file
              integer li_value
li_value = GetFileSaveName("Select File",ls_docname,ls_named,ls_file,"Excel Files(*.xls),*.xls,Text Files(*.txt),*.txt")
IF li_value = 1 THEN
   li_value = 0
   CHOOSE CASE Upper(right(ls_named,3))
          CASE 'XLS'
               li_value = dw_1.SaveAs(ls_docname,excel!,true)
          CASE 'TXT'
               li_value = dw_1.SaveAs(ls_docname,textl!,true)
  END CHOOSE

  IF li_value = 1 THEN
    IF Upper(Right(ls_named,3) = 'XLS' THEN
       o1 = Create OleObject
          IF o1.ConnectToNewObject("excel.Application")<>0 THEN
             MessageBox('Ole錯誤','Ole無法連接')
             Return
          END IF
        o1.WorkBooks.Open(ls_docname)
        o1.Application.Visible = true
  //設置整個excel的屬性
        o1.Cells.Select      //全数選中
        o1.Selection.Font.Name = "文鼎粗圓"
        o1.Selection.Font.FontStyle = "標準"
        o1l.Selection.Font.Size = 9
        o1.Selection.Font.Bold = TRUE      //加粗
        o1.Selection.RowHeight = 14

        o1.Rows("1:1").Select()
        o1.Selection.Insert()
        wf_head("A1:R1",dw_1.Object.Head.Text,3)
        o1.Selection.Font.Size = 14
        wf_head("A2","客戶代號",2)
        wf_head("B2","客戶名稱",2)
        o1.Columns("A:A").ColumnWidth = 10
        o1.Columns("B:B").ColumnWidth = 10
        o1.Columns("A:A").HorizontalAlignment = 3
        o1.Columns("B:B").HorizontalAlignment = 4

        o1.ActiveWorkBook.Save()
        o1.DisConnectObject()
        Desroy o1
     //后面省掉

------华软网友回复------

------华软网友回复------
不错的东西
如果想简单,SaveAsAscii也能完成大部份需求。
------华软网友回复------
导出后,是否包括数据库中的数据呢?
------华软网友回复------
上面介绍的是将DW中的内容直接导出,不知道LZ是否是这个意思


如果是导出数据库内容    能够查询后直接右键SAVEAS的


------华软网友回复------
有三种方法
一种就是数据窗口的saveas()方法了
第二种就是用DDE技术
第三种就是用OLE技术了,
当然SAVEAS最简单了,由于EXCEL资料也对照特殊,像一些EXCEL,HTML等特殊资料能够直接用SAVEAS()函数
但想有更多的交互,最好用DDE或OLE了,
详细代码就自己去写吧

------华软网友回复------
有三种方法
一种就是数据窗口的saveas()方法了
第二种就是用DDE技术
第三种就是用OLE技术了,
当然SAVEAS最简单了,由于EXCEL资料也对照特殊,像一些EXCEL,HTML等特殊资料能够直接用SAVEAS()函数
但想有更多的交互,最好用DDE或OLE了,
详细代码就自己去写吧
------------------
赞成!      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。