有关excel与datawindow的结合问题,300分

pobosskey 2003-07-23 12:13:42
请问,我现在有个grid的datawindow,请问怎么才能把cxcel文件的内容导入到datawindow中??datawindow中包括ddlb的类型的列!!
希望能提供这样的控件和代码示例 ,急用, 万分感激!!
...全文
30 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhjjw 2003-09-25
  • 打赏
  • 举报
回复
兄台,强烈建议你看我的贴,你所说的要求我都已经实现,即当dw中包括dddw,ddlb,checkbox等风格列时,我可以将这些列进行转换然后导出到Excel中。
如某dw包含dddw,ddlb列
dddw: 01 一类
02 二类
ddlb: a a规格
b b规格
在dw中,显示是的具体的文字信息,但实际存储的是编码。而这种类型在直接导出时,只导出编码而非文字。

若需要相关代码请e-mail:jhjjw@sohu.com
jhjjw 2003-09-25
  • 打赏
  • 举报
回复
兄台,强烈建议你看我的贴,你所说的要求我都已经实现,即当dw中包括dddw,ddlb,checkbox等风格列时,我可以将这些列进行转换然后导出到Excel中。
如某dw包含dddw,checkbox列
dddw: 01 一类
liuwolf 2003-09-12
  • 打赏
  • 举报
回复
程序能用,但未整理完善,贻笑大方!
liuwolf 2003-09-12
  • 打赏
  • 举报
回复
//我在用的,注意会删除原sql2000的数据,我需要的!


int retn,li_count,li_index,li_row
int alam
alam=0
retn=messagebox("注意","本操作将删除所有历史记录,确实要删除选Y,~r~n否则选N,~r~n",information!,yesnocancel!,1)
choose case retn
case 1
//dw_12.deleterow(0)

//if dw_12.Update() = 1 then
// commit;
//li_count=dw_1.rowcount()
// for li_row= li_count to 2 step -1
// dw_1.deleterow(li_row)
// next

// commit;

dw_1.RowsMove(1, dw_1.rowcount() ,primary!, dw_1,1,Delete!)
if dw_1.update(true,false) = 1 then
commit;
else
messagebox("","删除记录失败!")
alam=1
end if

case 2
return
case else
return
end choose

dw_1.reset()
dw_1.retrieve()

string ls_title,lsa_col[],ls_path,ls_file,ls_type,ls_sql,ls_err,ls_targerfile,ls_col
Boolean lb_delete

int i
if alam=0 then

//ls_sql = SqlCa.SynTaxFromSql(ls_sql,'style(type=grid)',ls_err)
//导入数据到临时数据窗口,以便进行数据拷贝
IF GetFileOpenName("选择要导入的文件",ls_path,ls_file, "txt","文本格式(*.txt),*.txt,电子表格(Excel),*.xls,DBF 3(dabase Ⅲ),*.dbf") = 1 THEN
ls_type = 'xls'
dw_1.CREATE(ls_sql,ls_err)

CHOOSE CASE ls_type
CASE 'txt'
ls_targerfile = ls_path
CASE 'xls','dbf'
OLEObject ExcelServer
ExcelServer = CREATE OLEObject
IF ExcelServer.ConnectToNewObject( "excel.application" ) < 0 THEN
messagebox("","连接excel失败,检查你的系统是否安装了office,必须安装EXCLE才可以使用该导入功能!")
ELSE
lb_delete = TRUE//需要删除临时文件
ExcelServer.Workbooks.Open(ls_path)
ls_targerfile=Left(ls_path,Len(ls_path) - 4) + "_temp.txt"
excelserver.activeworkbook.saveas(ls_targerfile,3)
excelserver.displayalerts=FALSE
ExcelServer.quit()
ExcelServer.DisconnectObject()
DESTROY ExcelServer
END IF
case else
return
end choose
end if
dw_1.importfile(ls_targerfile,2)
IF dw_1.RowCount() = 0 THEN
messagebox("", '待导入数据没有任何记录!')


ls_sql = SqlCa.SynTaxFromSql(ls_sql,'style(type=grid)',ls_err)
IF Len(ls_err) > 0 THEN
IF lb_delete THEN
FileDelete(ls_targerfile)
END IF
messagebox("", '在读取数据时出现问题。发现了一些不应该有的!~n' + ls_err)
END IF

else
dw_1.settransobject(sqlca);
dw_1.update();
commit;
END IF
if sqlca.sqlcode=-1 then
messagebox("sql error",sqlca.sqlerrtext)

else
messagebox("注意","文件写入成功!")
end if

dw_1.retrieve()
dw_12.retrieve()

FileDelete(ls_targerfile)

else
messagebox("","文件写入失败!")
end if

pobosskey 2003-09-12
  • 打赏
  • 举报
回复
excel也可以的?
liliang800207 2003-09-10
  • 打赏
  • 举报
回复
先倒成*.txt文件,字段之间用制表符
再用importfile
这种方法最简单
jimly 2003-09-10
  • 打赏
  • 举报
回复
至于你的数据窗口有的列是ddlb好像没什么关系。也许是没理解你的问题吧
jimly 2003-09-10
  • 打赏
  • 举报
回复
动态创建odbc数据源,通过odbc数据源连事务对象,数据就可以倒进来了,倒完了再删除动态创建的odbc数据源。
odbc数据源的动态创建和删除网上有的。
这是一个通用的方法,什么类型数据都可以倒。只是数据源的动态创建麻烦点。
pobosskey 2003-09-10
  • 打赏
  • 举报
回复
还是没解决
pobosskey 2003-08-04
  • 打赏
  • 举报
回复
这个方法是可以的, 我知道的,但是客户那边要求直接选择xls文件就可以导入 ,你们说怎么办?
fulongbiao 2003-08-02
  • 打赏
  • 举报
回复
将excel文件在excel中另存为text文本文件(制表符分隔(*.txt)),然后在dw中再用importfile导入.
同意楼上这方法一定可行
pobosskey 2003-08-02
  • 打赏
  • 举报
回复
但是问题是客户那边要求这么做的!
我有什么办法的啊!

有好的方法的吗??
wuhanjuan 2003-07-30
  • 打赏
  • 举报
回复
把excel文件另存为。txt文件或。dbf文件,去掉表头,然后建一个数据表aa,注意:aa的结构要和你另存为的文件结构一样,就是字段的顺序要一致,然后再importfile()
试试吧
我说的就是excel 倒入,有什么不对吗?
pobosskey 2003-07-30
  • 打赏
  • 举报
回复
有没有简单的办法的啊?? 各位帮帮小弟
sinkiangscorpio 2003-07-28
  • 打赏
  • 举报
回复
还不如用formulaone呢
klbt 2003-07-27
  • 打赏
  • 举报
回复
可以考虑用数据管道,把excel作为数据源。
pobosskey 2003-07-27
  • 打赏
  • 举报
回复
各位,谢谢你们的帮助, 但是我要是是从excel文件导入到数据窗, 而不是把数据窗的内容导出到excel文件!!!!
tmx 2003-07-24
  • 打赏
  • 举报
回复
//先启动excel文件
long handle_1
handle_1 = OpenChannel("Excel", "c:\myexlel.xls")

//开始读取数据!
string ls_name
integer li_rtn
li_rtn = getremote("r1c1",ls_name,handle_1)//r1表示行1,c1表示列1
//将行1列1的值赋给变量ls_name
if li_rtn = 1 then//判断操作是否成功
messagebox("",ls_name)//成功
else
messagebox(ls_name,string(li_rtn))
end if
dw_1.SetItem(行,列,ls_name)//把内容写到数据窗口
//---数据读取结束(这段内容可连续重复也可用循环语句读出数据到数组!)

CloseChannel(handle_1) //关闭excel
wuhanjuan 2003-07-24
  • 打赏
  • 举报
回复
把excel文件另存为。txt文件或。dbf文件,去掉表头,然后建一个数据表aa,注意:aa的结构要和你另存为的文件结构一样,就是字段的顺序要一致,然后再importfile()
试试吧
solonet 2003-07-24
  • 打赏
  • 举报
回复
这里给出从DATAWINDOW到EXECL导出数据的方法,如果是从EXECL到DATAWINDOW则反过来,加以修改就可以啦。

string ls_initfile,ls_name,is_server,ls_string
string ls_path
integer li_file,li_ret,li_Block
string ls_1name,ls_2name
string ls_mc,ls_zch
long ll_bl,i,ll_count
dec {2} dec_bl
OLEObject lo_xlapp , lo_xlsub
uo_statusbar.of_settext(0,0, "正在导出报表文件,请稍候...")
ls_path=g_app.Localpath+"\xls\aa.xls"

uo_statusbar.of_settext(0,0, "正在打开Excel文件...")
lo_xlapp = Create OLEObject

li_ret = lo_xlapp.ConnectToNewObject( "Excel.Sheet" )


lo_xlapp.Application.Workbooks.Open("c:\power\xls\aa.xls")
string ls_MonthNow,ls_DateNow,ls_cbsj
ls_MonthNow=String(today(),'yyyymm')
ls_DateNow=String(today(),'yyyymmdd')

lo_xlapp.Application.Visible = false
lo_xlsub = lo_xlapp.Application.ActiveWorkbook.Worksheets[1]
li_block=0

dec {2} dec_da1,dec_da2,dec_cbl,dec_shdl,dec_shl
dec {2} dec_total1,dec_total2,dec_total3,dec_max1,dec_min1,dec_num1
string str_cbsj,str_ly
lo_xlsub.cells[3,7]=Left(ls_DateNow,4)+'.'+mid(ls_DateNow,5,2)+'.'+Right(ls_DateNow,2)
ll_count=dw_view.rowcount()
for i=1 to ll_count
str_cbsj=dw_view.object.cbsj[i]
lo_xlsub.cells[i+4,1]=str_cbsj
dec_da1=dw_view.object.data1[i]
lo_xlsub.cells[i+4,2]=dec_da1
dec_da2=dw_view.object.data2[i]
lo_xlsub.cells[i+4,3]=dec_da2
dec_shdl=dw_view.object.shdl[i]
lo_xlsub.cells[i+4,4]=dec_shdl
dec_shl=dw_view.object.shl[i]
lo_xlsub.cells[i+4,5]=dec_shl

str_ly=dw_view.object.ly[i]
lo_xlsub.cells[i+4,6]=str_ly
dec_cbl=dw_view.object.cbl[i]
lo_xlsub.cells[i+4,7]=dec_cbl

end for
//总表电量,最大值,最小值,次数最多值,合计
dec_total1=dw_view.object.Primary.Current.total1
lo_xlsub.cells[ll_count+2,2]=dec_total1
dec_total2=dw_view.object.Primary.Current.total2
lo_xlsub.cells[ll_count+2,3]=dec_total2
dec_total3=dw_view.object.Primary.Current.total3
lo_xlsub.cells[ll_count+2,6]=dec_total3


lo_xlapp.Application.ActiveWorkbook.Save()
lo_xlapp.Application.quit()
lo_xlApp.DisConnectObject()
Destroy lo_xlapp

uo_statusbar.of_settext(0,0, "导出完成。")
加载更多回复(10)

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧