datawindow中CROSSTAB中表的樣式:
見附件。(我的PB是6.5)
我在網路上找到的函式:
/* 函式名稱:uf_dwsaveas_excel
功能 :將資料視窗資料匯出EXCEL檔案,并將EXCEL檔案默認英文標題替換成中文。
引數 : xin_mz_zx_tj,為用戶要匯出資料視窗的資料視窗控制元件名
回傳值:integer 1,success;-1,error
流程描述:先用saveas()倒出為excel檔案,再替換表頭為中文名
設計人:yanhui 2003年11月
修改人:葉文林 2004.4.8
原因:為提高程式的可讀性作了增加注釋等少量的修改*/
integer li_rtn,ii,li_asc
string ls_name,ls_pathname
boolean lb_exist
if xin_mz_zx_tj.RowCount()<1 then
MessageBox("提示資訊","請先檢索資料再匯出至Excel!")
return -1 //error
end if
li_rtn=GetFileSaveName("保存檔案",ls_pathname,ls_name,"xls","Excel檔案(*.xls),*.xls")
if li_rtn=1 then
lb_exist = FileExists(ls_pathname)
IF lb_exist THEN
li_rtn = MessageBox("保存", ls_pathname+"已經存在,是否覆寫?",Exclamation!, YesNo!)
end if
if li_rtn=1 then
//當檔案存在用戶選擇覆寫,或是檔案本就不存在時。注意變數li_rtn
li_rtn=xin_mz_zx_tj.SaveAs(ls_pathname,Excel!,true)
if li_rtn=1 then
// MessageBox("提示資訊","匯出資料成功!")
else
MessageBox("錯誤資訊","匯出資料失敗!")
return -1 //error
end if
else
return -1 //error
end if
else
return -1
end if
/*
以下程式將匯出的EXCEL英文標題替換為漢字
*/
long numcols,numrows,c,r
OLEObject xlapp,xlsub
int ret
numcols = long(xin_mz_zx_tj.Object.datawindow.Column.Count)
numrows = xin_mz_zx_tj.RowCount()
// 產生oleobject的實體
xlApp = Create OLEObject
//連接ole物件
ret = xlApp.ConnectToNewObject( "Excel.Sheet" )
if ret < 0 then
MessageBox("連接失敗!","連接到EXCEL失敗,請確認您的系統是否已經安裝EXCEL!~r~n"&
+"錯誤代碼:"+string(ret))
return -1
end if
// 打開EXCEL檔案
xlApp.Application.Workbooks.Open(ls_pathname)
//使檔案可見
xlApp.Application.Visible = true
// 得到活動作業表的參考,改善程式性能
xlsub = xlapp.Application.ActiveWorkbook.Worksheets[1]
string ls_colname,ls_text,ls_modistr,ls_col
//取欄位名更改為對應的文本text值
FOR c=1 to numcols
ls_col="#"+string(c)+".name"
ls_colname=xin_mz_zx_tj.describe(ls_col)
ls_modistr=ls_colname+"_t.text"
ls_text=xin_mz_zx_tj.describe(ls_modistr)
xlsub.cells[1,c]=ls_text
NEXT
xlApp.DisConnectObject()
Destroy xlapp
MessageBox("提示資訊","匯出資料成功!")
return 1 //success
----------------------------------------------------------
輸出后保存為EXCEL后,列標題還是英文????
見2樓的圖!
請高手幫助!謝謝
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
\Users\Administrator\Desktop\保存為EXCEL.JPGuj5u.com熱心網友回復:
第2張圖我傳不上來 !!uj5u.com熱心網友回復:
我保存為EXCEL后,列名仍舊是英文的,高手幫助啊!!!
uj5u.com熱心網友回復:
給個函式給你,也是別人從網上找的傳入的引數名字是adw_dw,該引數型別是資料視窗控制元件(注意不是資料視窗而是可以放在視窗中的資料視窗控制元件)
回傳值是boolean型,可以用來判斷是否另存成功,希望對你有幫助
///////////////////////////////////////////////////////////////////////////
//
// Parameters : adw_dw : datawindow
// as_file : file name
// Returns : true/false : boolean
// Description : Save the datawindow as a excel file.
//
///////////////////////////////////////////////////////////////////////////
// author : purplekite
// date : 2003-01-23
///////////////////////////////////////////////////////////////////////////
SetPointer(HourGlass!)
//declare the local variables
long i, j, li_pos
int li_value
string ls_objects, ls_obj, ls_text, ls_err, ls_sql,ls_path,ls_fname
datastore lds_saveas //匯出資料窗
datastore lds_sort //獲得根據 object.x 排序的 (band = detail and visible = 1) 的 column/compute
boolean lb_return //回傳值
string ls_pbver //pb 版本資訊
environment env //環境變數
getenvironment(env)
ls_pbver = string(env.pbmajorrevision)
li_value = GetFilesaveName("請選擇匯出檔案", &
+ ls_path, ls_fname, "TXT", &
+ "Excel檔案(*.XLS),*.xls," &
)
IF li_value <> 1 THEN return false
//創建排序列 datastore
lds_sort = create datastore
ls_sql = 'column=(type=char(1) name = ztext dbname="ztext" )' + '~r~n' + &
'column=(type=char(1) name = zcol dbname="zcol" )' + '~r~n' + &
'column=(type=long name = zx dbname="zx" )' + '~r~n'
ls_sql = 'release ' + ls_pbver + ';~r~ntable(' + ls_sql + ')'
lds_sort.create(ls_sql, ls_err)
if len(ls_err) > 0 then
lb_return = false
goto lab1
end if
//準備資料====================================================
//all controls
ls_objects = adw_dw.Describe("datawindow.objects")
//按~t位置作判斷開始回圈
do while (pos(ls_objects,"~t") > 0)
li_pos = pos(ls_objects,"~t")
ls_obj = left(ls_objects,li_pos - 1)
ls_objects = right(ls_objects,len(ls_objects) - li_pos)
//(column or compute ) at detail and visible
IF (adw_dw.Describe(ls_obj+".type") = "column" or &
adw_dw.Describe(ls_obj+".type") = "compute" ) AND &
(adw_dw.Describe(ls_obj+".band") = "detail" ) AND &
(adw_dw.Describe(ls_obj+".visible") = "1" ) THEN
ls_text = adw_dw.describe(ls_obj + '_t.text')
if ls_text <> '!' and ls_text <> '?' then
lds_sort.insertrow(0)
lds_sort.setitem(lds_sort.rowcount(), 'ztext', ls_text)
lds_sort.setitem(lds_sort.rowcount(), 'zcol', ls_obj)
lds_sort.setitem(lds_sort.rowcount(), 'zx', long(adw_dw.describe(ls_obj + '.x')))////取資料視窗中物件的橫坐標
end if
END IF
loop
//the last control
ls_obj = ls_objects
IF (adw_dw.Describe(ls_obj+".type") = "column" or &
adw_dw.Describe(ls_obj+".type") = "compute" ) AND &
(adw_dw.Describe(ls_obj+".band") = "detail" ) AND &
(adw_dw.Describe(ls_obj+".visible") = "1" ) THEN
ls_text = adw_dw.describe(ls_obj + '_t.text')
if ls_text <> '!' and ls_text <> '?' then
lds_sort.insertrow(0)
lds_sort.setitem(lds_sort.rowcount(), 'ztext', ls_text)
lds_sort.setitem(lds_sort.rowcount(), 'zcol', ls_obj)
lds_sort.setitem(lds_sort.rowcount(), 'zx', long(adw_dw.describe(ls_obj + '.x')))
end if
END IF
//如果沒有列則跳出
if lds_sort.rowcount() < 1 then goto lab1
//根據 object.x 排序
lds_sort.setsort('zx A')
lds_sort.sort()
//創建匯出 datastore
lds_saveas = create datastore
ls_sql = ''
for i = 1 to lds_sort.rowcount()
ls_obj = lds_sort.getitemstring(i, 'zcol')
ls_sql += 'column=(type=char(1) dbname="' + ls_obj + '" )' + '~r~n'
next
ls_sql = 'release ' + ls_pbver + ';~r~ntable(' + ls_sql + ')'
lds_saveas.create(ls_sql, ls_err)
if len(ls_err) > 0 then
lb_return = false
goto lab1
end if
//向 lds_saveas 中寫資料
for i = 1 to adw_dw.rowcount()
yield()//釋放訊息佇列, 如果資料量較大, 可以使用這個函式
lds_saveas.insertrow(0)
for j = 1 to lds_sort.rowcount()
ls_obj = lds_sort.getitemstring(j, 'zcol')
if adw_dw.describe(ls_obj + '.type') = 'column' then
ls_text = adw_dw.describe('evaluate(~'LookUpDisplay(' + ls_obj + ')~', ' + string(i) + ')')
else
ls_text = adw_dw.describe('evaluate(~'' + ls_obj + '~',' + string(i) + ')')
end if
lds_saveas.setitem(i, j, ls_text)
next
next
lds_saveas.insertrow(1)
for i = 1 to lds_sort.rowcount()
lds_saveas.setitem(1, i, lds_sort.getitemstring(i, 'ztext'))
next
//準備資料完畢====================================================
//saveas datawindow
//ls_path=ls_path + ls_fname
lb_return = (lds_saveas.saveas(ls_path, excel!, false) = 1)
lab1:
destroy lds_sort
destroy lds_saveas
SetPointer(Arrow!)
return lb_return
uj5u.com熱心網友回復:
不過我一般都保存的是grid風格的資料視窗,你說的CROSSTAB型別沒試過uj5u.com熱心網友回復:
//取欄位名更改為對應的文本text值FOR c=1 to numcols
ls_col="#"+string(c)+".name"
ls_colname=xin_mz_zx_tj.describe(ls_col)
ls_modistr=ls_colname+"_t.text"
ls_text=xin_mz_zx_tj.describe(ls_modistr)
xlsub.cells[1,c]=ls_text
錯誤的發生在這一段代碼上,看看啊,能否改改?
uj5u.com熱心網友回復:
找個dw2excle之類的內褲吧...uj5u.com熱心網友回復:
我用的那個函式確實能把列名存成漢字,不過有個前提條件就是每個列名的text框的名字必須是系統默認的那種,也就是英文列名+'_t',函式里就是這樣取每列對應的列名的,你看看你的漢字列名的text框的屬性,看看名字是否是按照這種規則命名的,如果不是就要改了。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/116461.html
標籤:數據庫相關
上一篇:【請教】在應用open事件中已經設定了資料源自動選擇函式,為什么每次運行應用還是會跳出資料源選擇視窗?
下一篇:關于sql與pb
