主頁 > 資料庫 > datawindow中CROSSTAB方式輸出到EXCEL問題

datawindow中CROSSTAB方式輸出到EXCEL問題

2020-09-24 04:41:32 資料庫

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.JPG

uj5u.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

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more