从Excel文件中提取汉字的时候,会出现乱码?是怎么回事?怎么解决阿(急)!

时间:2022-05-30 20:12:42
从Excel文件中提取汉字的时候,比如姓名字段。会出现乱码?是怎么回事?怎么解决阿(急)!

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

#4


我知道答案, pb8.0以下对双字节(unicode)的支持不好,用ole读Excel等文件就会有此情况, 特别是pb7.0。我就是因为这个原因则转到pb8.0上的。

如转到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中调试通过;

#6


难道在pb7.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的得到得结果是完全正确得!

是不是有点麻烦啊!不过能得到正确得值就不错了!



#12


真实不用这样麻烦的,你直接把你在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

#4


我知道答案, pb8.0以下对双字节(unicode)的支持不好,用ole读Excel等文件就会有此情况, 特别是pb7.0。我就是因为这个原因则转到pb8.0上的。

如转到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中调试通过;

#6


难道在pb7.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的得到得结果是完全正确得!

是不是有点麻烦啊!不过能得到正确得值就不错了!



#12


真实不用这样麻烦的,你直接把你在EXCEL取出的字符用下列代码转化一下就可以了:
string a
a=Left(a,len(a) - 2)//a为你取出的原始字符

原因是从EXCEL的单元格取值时,EXCEL会自动在取出的字符后面加上一个“回车符”,这样导入数据窗口后就会造成乱码,只要去掉结尾的回车符就可以正常使用了。我以前也是这个原因,后来才发现这个秘密。你可以试试我的方法,看行不行。

#13


以上是用DDE从EXCEL中取值的去乱码的方法,不知OLE是否适用?

#14


试了一下,好象不行!