还是DW导入excel的问题,。

nthb2001 2003-07-14 07:41:04
导入ecel的函数如下:

string ls_temp = ""
// 创建一个 datastore 以存贮 dw_1 中各列的信息
datastore ds_col
ds_col = create datastore
ds_col.dataobject = "Dw_SaveToExcel_Columns"
ds_col.SetTransObject(sqlca)
SetPointer(HourGlass!)

// 记录 dw_1 中的对象数目
string l_objects, l_name, l_type, l_band, l_visible, l_objtype
string l_zw, l_objzw
long i, j, pp, l_x
l_objects = dw_1.Describe("DataWindow.Objects")
//string right5

// 将 DETAIL 区域内的所有可见目标放到 ds_col 中,
// 并按照 object.x 属性大小排序
do while len(l_objects) > 0
pp = pos(l_objects, "~t")
if pp <= 0 then pp = len(l_objects) + 1
l_name = left(l_objects, pp - 1) // Object 名字
l_objects = mid(l_objects, pp + 1, len(l_objects))
l_type = upper(dw_1.Describe(l_name + ".coltype")) // Object 数据类型
if pos(l_type, "(") > 0 then
l_type = left(l_type, pos(l_type, "(") - 1 )
end if
l_x = long(dw_1.Describe(l_name + ".x")) // Object X 坐标
l_band = upper(dw_1.Describe(l_name + ".Band")) // Object 所属区域
l_visible = dw_1.Describe(l_name + ".visible") // Object 是否可见
l_objtype = upper(dw_1.Describe(l_name + ".Type")) // Object 类别
// 如果 object 在 Detail 区,且可见,并且是 column 或 Compute Column
if l_band = "DETAIL" and l_visible = "1" and &
( l_objtype = "COLUMN" or l_objtype = "COMPUTE" ) then

l_objzw = l_name + "_t" // Object 中文标头
l_zw = dw_1.describe(l_objzw + ".text")
// 去掉标头中多行之间的换行符
pp = Pos(l_zw , "~n")
Do While pp > 0
l_zw = Replace(l_zw, pp - 1, 2, "")
pp = Pos(l_zw , "~n")
Loop
// 去掉标头中多行之间的空格
pp = Pos(l_zw , " ")
Do While pp > 0
l_zw = Replace(l_zw, pp , 1, "")
pp = Pos(l_zw , " ")
Loop
// 去掉标头中多行之间的引号
pp = Pos(l_zw , '"')
Do While pp > 0
l_zw = Replace(l_zw, pp , 1, "")
pp = Pos(l_zw , '"')
Loop

i = ds_col.insertrow(0)
ds_col.setitem(i, "colname", l_name )
ds_col.setitem(i, "x", l_x )
ds_col.setitem(i, "coltype", l_type )
ds_col.setitem(i, "coltitle",l_zw )
ds_col.setitem(i, "objtype", l_objtype )
end if
loop
ds_col.sort()


// 将 dw_1 中的内容输出到 ds_tmp 中
datastore ds_tmp
ds_tmp = create datastore
ds_tmp.dataobject = "Dw_SaveToExcel"
ds_tmp.settransobject(sqlca)
string l_value, l_colname
long row

for i = 1 to dw_1.rowcount()
row = ds_tmp.insertrow(0)
for j = 1 to ds_col.rowcount()
l_type = upper(ds_col.object.coltype[j])
l_colname = ds_col.object.colname[j]
l_objtype = ds_col.object.objtype[j]
// 如果 dw_1 中某对象是 column 对象,则利用 Describe("evaluate ...
// 语法取出其当前显示信息。对 Edit、EditMask、DropDownDatawindow、
// DropDownListBox、CodeTable等风格均适用
if l_objtype = "COLUMN" and right( l_colname,5 ) <> 'mount' and right(l_colname,5)<> 'price' and l_type <> 'DECIMAL' then
l_value = dw_1.Describe("Evaluate('LookupDisplay(" + l_colname + ")'," + string(i) + ")")
else
// 对于 Compute 对象,利用前述方法会出错
choose case l_type
case "CHAR"
l_value = dw_1.GetItemString(i, l_colname )
case "DATE"
l_value = string( dw_1.GetItemDate(i, l_colname) , "yyyy.mm.dd")
case "DATETIME"
l_value = string( dw_1.GetItemDateTime(i, l_colname) , "yyyy.mm.dd")
case "INT","LONG", "NUMBER", "REAL", "UNLONG", "DECIMAL"
l_value = string( dw_1.GetItemNumber(i, l_colname) )
case "TIME", "TIMESTAMP"
l_value = string( dw_1.GetItemTime(i, l_colname) )
end choose
end if
if len(l_value) > 60 then
if messagebox("提示","“" + l_value + "”超过了 60 个字符,系统将截短该项!",Question!,YesNo!,1 )=1 then
l_value = left(l_value, 60)
else
return true
end if
end if
l_colname = "A" + trim(string(j))
ds_tmp.setitem(row, l_colname, l_value)
next
next

// 插入表头
if ds_tmp.rowcount() >= 1 then
row = ds_tmp.insertrow(1)
else
row = ds_tmp.insertrow(0)
end if

for j = 1 to ds_col.rowcount()
l_value = ds_col.object.coltitle[j]
l_colname = "A" + trim(string(j))
ds_tmp.setitem(row, l_colname, l_value)
next

ds_tmp.SaveAs(filename, Excel!, false)

messagebox("提示","输出成功!")
destroy ds_tmp
SetPointer(Arrow!)

return true


可是,当我在DW中如果调用同一列二次三次,那么这个列名就会变为col_1,col_2等。。

在导出时就会变成"!",,这是为什么??
...全文
133 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
up
rogery 2003-07-18
  • 打赏
  • 举报
回复
调用同一列一次之后,对数据窗口进行重绘^^^…………
nthb2001 2003-07-17
  • 打赏
  • 举报
回复
问题是:

比如说表中有三个列,col_1,col_2,col_3

而在DW中的列的情况是这样的.
编号 姓名 年龄 出生日 部门
col_1 col_1_1 col_1_2 col_2 col_3

col_1_1 和col_1_2 其实是在生成dw后,,在DW画板中用增加计算列的方法,增加的二个列,一样选取的是表中的col_1的值,,

只是在导出时提示:

invalid argument to function

这是什么原因,请各位帮忙想想,先谢
qqf 2003-07-15
  • 打赏
  • 举报
回复
上www.pbhome.net 去看看,里面的讨论的专题,不过不懂对你有帮助吗。
Thinkinger 2003-07-15
  • 打赏
  • 举报
回复
UP
nthb2001 2003-07-15
  • 打赏
  • 举报
回复
不好解决哈,谁有主意的??
nthb2001 2003-07-14
  • 打赏
  • 举报
回复
有理,试试先
klbt 2003-07-14
  • 打赏
  • 举报
回复
l_value = dw_1.Describe("Evaluate('LookupDisplay(" + l_colname + ")'," + string(i) + ")")
是取l_colname的显示值,看起来没有错,要么跟踪一下?
nthb2001 2003-07-14
  • 打赏
  • 举报
回复
偶想可能是这句有问题,,

l_value = dw_1.Describe("Evaluate('LookupDisplay(" + l_colname + ")'," + string(i) + ")")
klbt 2003-07-14
  • 打赏
  • 举报
回复
是“将 dw_1 中的内容输出到 ds_tmp 中”过程出错?

1,108

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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