14 个解决方案
#1
没有人知道阿!
#2
你的代码贴出来看看,:)
#3
OLEObject ExcelServer
integer ExcelOK,rownumber
blob lb_xm
string ls_xm,ls_path,ls_name
// 弹出打开文件对话框,选择文件
integer li_value
li_value = GetFileOpenName("Select File",ls_path, ls_name, "Xls", "Excel Files (*.xls),*.xls")
IF li_value = -1 THEN
messagebox("Error","打开文件出错!")
return
end if
//联结Excel
ExcelServer = CREATE OLEObject
ExcelOK = ExcelServer.ConnectToNewObject( "excel.application" )
ExcelServer.Workbooks.Open(ls_path) //打开指定的文件
ls_xm=ExcelServer.Activesheet.Cells[2,2].value//cells[2,2],存有一个名字!
messagebox("dd",string(len(ls_xm)))
sle_1.text=ls_xm//发现sle_1.text中的前两个汉字是正确的,最后一个汉字变成两个字母
excelserver.Application.quit //退出Excel
excelserver.DisConnectObject()
Destroy excelserver
integer ExcelOK,rownumber
blob lb_xm
string ls_xm,ls_path,ls_name
// 弹出打开文件对话框,选择文件
integer li_value
li_value = GetFileOpenName("Select File",ls_path, ls_name, "Xls", "Excel Files (*.xls),*.xls")
IF li_value = -1 THEN
messagebox("Error","打开文件出错!")
return
end if
//联结Excel
ExcelServer = CREATE OLEObject
ExcelOK = ExcelServer.ConnectToNewObject( "excel.application" )
ExcelServer.Workbooks.Open(ls_path) //打开指定的文件
ls_xm=ExcelServer.Activesheet.Cells[2,2].value//cells[2,2],存有一个名字!
messagebox("dd",string(len(ls_xm)))
sle_1.text=ls_xm//发现sle_1.text中的前两个汉字是正确的,最后一个汉字变成两个字母
excelserver.Application.quit //退出Excel
excelserver.DisConnectObject()
Destroy excelserver
#4
我知道答案, pb8.0以下对双字节(unicode)的支持不好,用ole读Excel等文件就会有此情况, 特别是pb7.0。我就是因为这个原因则转到pb8.0上的。
如转到pb8.0上,注意mid,left,right等函数可能要改写,因为它把一个汉字只做为1个字符。
请给分!
如转到pb8.0上,注意mid,left,right等函数可能要改写,因为它把一个汉字只做为1个字符。
请给分!
#5
升级到PB8.0.1 Build 9056 你将会发现一切问题都解决了。只是注意PB中的字符串函数因支持双字节有一些变化。
如何从EXCEL2000中得到单元格中的字符串(汉字):
any la_temp
la_temp = ole_excel_object.activesheet.cells[20,2].value
ls_temp = trim(la_temp)
messagebox("Note",ls_temp) //可返回正确的字符串(汉字)值
以上代码,在PowerBuilder 8.0.1.9056中调试通过;
如何从EXCEL2000中得到单元格中的字符串(汉字):
any la_temp
la_temp = ole_excel_object.activesheet.cells[20,2].value
ls_temp = trim(la_temp)
messagebox("Note",ls_temp) //可返回正确的字符串(汉字)值
以上代码,在PowerBuilder 8.0.1.9056中调试通过;
#6
难道在pb7.0上就没有解决办法吗?
我们的系统已经在7.0上开发好长时间了,不可能转到8.0上的!
能不能给出7.0上的解决办法阿!
我们的系统已经在7.0上开发好长时间了,不可能转到8.0上的!
能不能给出7.0上的解决办法阿!
#7
to: xirumin(雪山飞剑) balloonman2002(革命的本钱-身体)
还有办法吗?
还有办法吗?
#8
我看了以前的帖子说是把EXCEL的内容先复制到剪贴板,然后再从剪贴板上粘贴过来可解决此问题,不过比较慢,:)
#9
从剪贴板粘贴过来的命令是什么啊?
#10
你打开PB的帮助,切换到“索引”页,在里面输入“clipboard”就有一堆剪贴板
的复制、粘贴命令,开心吧,:)
的复制、粘贴命令,开心吧,:)
#11
呵呵,开心!谢谢了!
终于解决了!
我把我的代码贴在下面:
excelserver.activesheet.cells[rownumber,2].copy
sle_xm.text=''
sle_xm.paste()
ls_xm=sle_xm.text
在这段程序中我用了一个sle,是因为直接用ls_xm=clipboard()的话,显示出来的字也是正确的,但是两个字却是显示为6个字节,而且不和原来的名字相等,
也就是说如果用
excelserver.activesheet.cells[rownumber,2].copy//其中的内容为'张三'
ls_xm=clipboard()
的话,如果要判断ls_xm是否等于'张三',得到的结果却是否,所以就加了sle_xm.paste作为过渡,因为用paste的得到得结果是完全正确得!
是不是有点麻烦啊!不过能得到正确得值就不错了!
终于解决了!
我把我的代码贴在下面:
excelserver.activesheet.cells[rownumber,2].copy
sle_xm.text=''
sle_xm.paste()
ls_xm=sle_xm.text
在这段程序中我用了一个sle,是因为直接用ls_xm=clipboard()的话,显示出来的字也是正确的,但是两个字却是显示为6个字节,而且不和原来的名字相等,
也就是说如果用
excelserver.activesheet.cells[rownumber,2].copy//其中的内容为'张三'
ls_xm=clipboard()
的话,如果要判断ls_xm是否等于'张三',得到的结果却是否,所以就加了sle_xm.paste作为过渡,因为用paste的得到得结果是完全正确得!
是不是有点麻烦啊!不过能得到正确得值就不错了!
#12
真实不用这样麻烦的,你直接把你在EXCEL取出的字符用下列代码转化一下就可以了:
string a
a=Left(a,len(a) - 2)//a为你取出的原始字符
原因是从EXCEL的单元格取值时,EXCEL会自动在取出的字符后面加上一个“回车符”,这样导入数据窗口后就会造成乱码,只要去掉结尾的回车符就可以正常使用了。我以前也是这个原因,后来才发现这个秘密。你可以试试我的方法,看行不行。
string a
a=Left(a,len(a) - 2)//a为你取出的原始字符
原因是从EXCEL的单元格取值时,EXCEL会自动在取出的字符后面加上一个“回车符”,这样导入数据窗口后就会造成乱码,只要去掉结尾的回车符就可以正常使用了。我以前也是这个原因,后来才发现这个秘密。你可以试试我的方法,看行不行。
#13
以上是用DDE从EXCEL中取值的去乱码的方法,不知OLE是否适用?
#14
试了一下,好象不行!
#1
没有人知道阿!
#2
你的代码贴出来看看,:)
#3
OLEObject ExcelServer
integer ExcelOK,rownumber
blob lb_xm
string ls_xm,ls_path,ls_name
// 弹出打开文件对话框,选择文件
integer li_value
li_value = GetFileOpenName("Select File",ls_path, ls_name, "Xls", "Excel Files (*.xls),*.xls")
IF li_value = -1 THEN
messagebox("Error","打开文件出错!")
return
end if
//联结Excel
ExcelServer = CREATE OLEObject
ExcelOK = ExcelServer.ConnectToNewObject( "excel.application" )
ExcelServer.Workbooks.Open(ls_path) //打开指定的文件
ls_xm=ExcelServer.Activesheet.Cells[2,2].value//cells[2,2],存有一个名字!
messagebox("dd",string(len(ls_xm)))
sle_1.text=ls_xm//发现sle_1.text中的前两个汉字是正确的,最后一个汉字变成两个字母
excelserver.Application.quit //退出Excel
excelserver.DisConnectObject()
Destroy excelserver
integer ExcelOK,rownumber
blob lb_xm
string ls_xm,ls_path,ls_name
// 弹出打开文件对话框,选择文件
integer li_value
li_value = GetFileOpenName("Select File",ls_path, ls_name, "Xls", "Excel Files (*.xls),*.xls")
IF li_value = -1 THEN
messagebox("Error","打开文件出错!")
return
end if
//联结Excel
ExcelServer = CREATE OLEObject
ExcelOK = ExcelServer.ConnectToNewObject( "excel.application" )
ExcelServer.Workbooks.Open(ls_path) //打开指定的文件
ls_xm=ExcelServer.Activesheet.Cells[2,2].value//cells[2,2],存有一个名字!
messagebox("dd",string(len(ls_xm)))
sle_1.text=ls_xm//发现sle_1.text中的前两个汉字是正确的,最后一个汉字变成两个字母
excelserver.Application.quit //退出Excel
excelserver.DisConnectObject()
Destroy excelserver
#4
我知道答案, pb8.0以下对双字节(unicode)的支持不好,用ole读Excel等文件就会有此情况, 特别是pb7.0。我就是因为这个原因则转到pb8.0上的。
如转到pb8.0上,注意mid,left,right等函数可能要改写,因为它把一个汉字只做为1个字符。
请给分!
如转到pb8.0上,注意mid,left,right等函数可能要改写,因为它把一个汉字只做为1个字符。
请给分!
#5
升级到PB8.0.1 Build 9056 你将会发现一切问题都解决了。只是注意PB中的字符串函数因支持双字节有一些变化。
如何从EXCEL2000中得到单元格中的字符串(汉字):
any la_temp
la_temp = ole_excel_object.activesheet.cells[20,2].value
ls_temp = trim(la_temp)
messagebox("Note",ls_temp) //可返回正确的字符串(汉字)值
以上代码,在PowerBuilder 8.0.1.9056中调试通过;
如何从EXCEL2000中得到单元格中的字符串(汉字):
any la_temp
la_temp = ole_excel_object.activesheet.cells[20,2].value
ls_temp = trim(la_temp)
messagebox("Note",ls_temp) //可返回正确的字符串(汉字)值
以上代码,在PowerBuilder 8.0.1.9056中调试通过;
#6
难道在pb7.0上就没有解决办法吗?
我们的系统已经在7.0上开发好长时间了,不可能转到8.0上的!
能不能给出7.0上的解决办法阿!
我们的系统已经在7.0上开发好长时间了,不可能转到8.0上的!
能不能给出7.0上的解决办法阿!
#7
to: xirumin(雪山飞剑) balloonman2002(革命的本钱-身体)
还有办法吗?
还有办法吗?
#8
我看了以前的帖子说是把EXCEL的内容先复制到剪贴板,然后再从剪贴板上粘贴过来可解决此问题,不过比较慢,:)
#9
从剪贴板粘贴过来的命令是什么啊?
#10
你打开PB的帮助,切换到“索引”页,在里面输入“clipboard”就有一堆剪贴板
的复制、粘贴命令,开心吧,:)
的复制、粘贴命令,开心吧,:)
#11
呵呵,开心!谢谢了!
终于解决了!
我把我的代码贴在下面:
excelserver.activesheet.cells[rownumber,2].copy
sle_xm.text=''
sle_xm.paste()
ls_xm=sle_xm.text
在这段程序中我用了一个sle,是因为直接用ls_xm=clipboard()的话,显示出来的字也是正确的,但是两个字却是显示为6个字节,而且不和原来的名字相等,
也就是说如果用
excelserver.activesheet.cells[rownumber,2].copy//其中的内容为'张三'
ls_xm=clipboard()
的话,如果要判断ls_xm是否等于'张三',得到的结果却是否,所以就加了sle_xm.paste作为过渡,因为用paste的得到得结果是完全正确得!
是不是有点麻烦啊!不过能得到正确得值就不错了!
终于解决了!
我把我的代码贴在下面:
excelserver.activesheet.cells[rownumber,2].copy
sle_xm.text=''
sle_xm.paste()
ls_xm=sle_xm.text
在这段程序中我用了一个sle,是因为直接用ls_xm=clipboard()的话,显示出来的字也是正确的,但是两个字却是显示为6个字节,而且不和原来的名字相等,
也就是说如果用
excelserver.activesheet.cells[rownumber,2].copy//其中的内容为'张三'
ls_xm=clipboard()
的话,如果要判断ls_xm是否等于'张三',得到的结果却是否,所以就加了sle_xm.paste作为过渡,因为用paste的得到得结果是完全正确得!
是不是有点麻烦啊!不过能得到正确得值就不错了!
#12
真实不用这样麻烦的,你直接把你在EXCEL取出的字符用下列代码转化一下就可以了:
string a
a=Left(a,len(a) - 2)//a为你取出的原始字符
原因是从EXCEL的单元格取值时,EXCEL会自动在取出的字符后面加上一个“回车符”,这样导入数据窗口后就会造成乱码,只要去掉结尾的回车符就可以正常使用了。我以前也是这个原因,后来才发现这个秘密。你可以试试我的方法,看行不行。
string a
a=Left(a,len(a) - 2)//a为你取出的原始字符
原因是从EXCEL的单元格取值时,EXCEL会自动在取出的字符后面加上一个“回车符”,这样导入数据窗口后就会造成乱码,只要去掉结尾的回车符就可以正常使用了。我以前也是这个原因,后来才发现这个秘密。你可以试试我的方法,看行不行。
#13
以上是用DDE从EXCEL中取值的去乱码的方法,不知OLE是否适用?
#14
试了一下,好象不行!