请问各位是使用什么方法把具有规定格式内容的Excel文件导入到DataWindow里面的

Capricor 2004-04-14 08:57:16
各位大大!!!
以前老是把DataWindow里面的数据导出成excel文件。但是把excel文件导入到DataWindow里面就不会拉~~自己研究了2天也没个结果~~郁闷:(
请教各位~~最好能给个现成的代码或者函数~~
感激不尽~~谢谢

我的后台dbms是oracle 817 前台pb8.03
...全文
54 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Capricor 2004-04-15
  • 打赏
  • 举报
回复
to 程序方程兄
你的这个函数来得好猛~俺试下先~

to gjd111686(数字金刚) 能不能把你的方法说具体点啊~~我不知道怎么样使用ole把excel数据创建临时表~

to ckc(火) 现在我这边使用的是oracle 8的直接驱动接口连接的小型机~~如果再使用odbc去读入,效率会降低的,而且速度方面~~~????
ckc 2004-04-14
  • 打赏
  • 举报
回复
不会吧,写这么复杂啊
excel可以直接用odbc读入的吧,试一试吧
gjd111686 2004-04-14
  • 打赏
  • 举报
回复
多看看Office的Excel的VBA帮助,就是操作OLE对象.

简单办法你根据Excel内容创建临时表,动态创建数据窗口就比较省事.
hzhxxx 2004-04-14
  • 打赏
  • 举报
回复
就是日期处理有点难度,我使用 BCB 写了一个 dll ,没有写好,多线程有点错误
hzhxxx 2004-04-14
  • 打赏
  • 举报
回复
对不起,看错了,这个问题我前几天也正在研究,有点麻烦,将就一点


/**********************************************************/
//Function : excel 数据转换到数据库
//parm :
// 1. as_title : excel 的标题
//return : 1 is success and -1 is fail
//Author : hzh
//date : 2003.12.08
//Modifier :
// 1. 2003.12.10 by hzh
//Reason :
// 1. 增加对计算列的处理
/**********************************************************/


IF NOT FileExists(as_excelfile) THEN
MessageBox("数据读入","没有指定的文件")
RETURN 1
END IF

OLEObject xlapp

IF NOT IsValid(xlApp) THEN
xlApp = CREATE OLEObject
END IF

IF xlApp.ConnectToNewObject("Excel.Application" ) < 0 THEN
MessageBox(ga_app.dwmessagetitle,"不能连接 EXCEL 服务器,请检查你的计算机中是 ~r~n " +&
"否安装了MS EXCEL ? 假如安装,请与程序供应商联系 !",QuesTion!)
RETURN -1
END IF

//增加空文档 (EXCEL table)

xlApp.Workbooks.Open(as_excelfile)
//xlApp.Application.Visible = FALSE
xlApp.DisplayAlerts = false


//定位到第一格

Long l_cnt,l_rows,l_cols
Long l_row,l_i

Int i_cnt
l_rows = 30
l_cols = 23
Long l_cno

String s_cno,s_temp

Long l_newrow

//一次处理两行
DataStore ds_todb
IF NOT IsValid(ds_todb) THEN
ds_todb = CREATE DataStore
END IF
ds_todb.DataObject = "dw_getdatafromexcel"
ds_todb.SetTransObject(at_sqlca)
FOR l_cnt = 2 TO l_rows STEP 2
Yield()
l_row = l_cnt
s_cno = String(xlapp.activeworkbook.activesheet.cells[l_row - 1,1].value)
IF NOT IsNumber(s_cno) THEN CONTINUE
FOR l_row = l_cnt - 1 TO l_cnt
s_cno = xlapp.activeworkbook.activesheet.cells[l_row,1].FormulaR1C1
IF IsNull(s_cno) OR s_cno = "" THEN
//非新行
FOR l_i = 4 TO l_cols STEP 2
s_temp = String(Trim(xlapp.activeworkbook.activesheet.cells[l_row,l_i].FormulaR1C1))
IF IsNull(s_temp) OR s_temp = "" THEN CONTINUE
i_cnt++
ds_todb.SetItem(l_newrow,i_cnt,s_temp)
NEXT
ELSE
//新行开始,清空数组
IF NOT IsNumber(s_cno) THEN CONTINUE
l_newrow = ds_todb.InsertRow(0)
ds_todb.SetItem(l_newrow,1,s_cno)

//ds_todb.SetItem(l_newrow,2,gnvo_db.uf_todate(Long(xlapp.activeworkbook.activesheet.cells[l_row,2].FormulaR1C1)))

ds_todb.SetItem(l_newrow,3, Dec(xlapp.activeworkbook.activesheet.cells[l_row,3].FormulaR1C1))
i_cnt = 3
FOR l_i = 4 TO l_cols STEP 2
s_temp = String(Trim(xlapp.activeworkbook.activesheet.cells[l_row,l_i].FormulaR1C1))
IF IsNull(s_temp) OR s_temp = "" THEN CONTINUE
i_cnt++
ds_todb.SetItem(l_newrow,i_cnt,s_temp)
NEXT
END IF
NEXT
NEXT

xlApp.activeworkbook.close(false)
xlapp.Application.quit()
xlApp.DisConnectObject()

//xlApp.Application.Workbooks.quit()

IF IsValid(xlApp) THEN
DESTROY xlapp
END IF

//gnvo_db.uf_closewin("Microsoft excel")

IF ds_todb.Update() = 1 THEN
COMMIT USING at_sqlca;
MessageBox("导入数据","保存成功")
ELSE
ROLLBACK USING at_sqlca;
MessageBox("导入数据","保存失败")
END IF

IF IsValid(ds_todb) THEN
DESTROY ds_todb
END IF

//FileDelete(as_excelfile)

RETURN 1


hzhxxx 2004-04-14
  • 打赏
  • 举报
回复
不避嫌,推荐自己的

http://expert.csdn.net/Expert/topic/2548/2548859.xml?temp=.873501

609

社区成员

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

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