当前位置:编程学习 > VB >>

如何正确的提取excel表单中的英标?

  最近在尝试用excel来制作一个英语词库生成工具,具体是在sheet中放入英语单词,中文解释,英标。然后通过VBA将他们解析为格式固定的txt文件,最后导入到背单词的软件中。在这个过程中,遇到了一些问题:当使用VBA提取excel单元格中的英标内容时,经常出现乱码。
  
  如图,在excel单元格中英标是正常显示的:
  
  
  但如下图,通过vba编码提取单元格中的英标时,时常出现乱码,这里显示的是solemn中的英标(excel中的第二行第三列)
  

  在此请教一下各位,如何正确的提取excel表单中的英标?
 
  附上程序代码,程序十分简单还在完善阶段。
  

   Public Sub 生成QA1()

Dim i, n As Integer
Dim temp As String
i = [a65536].End(xlUp).Row '判断行数


'生成文本文件
temp = ThisWorkbook.Path & "\QA词库1.txt"

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile(temp, True)
'Call AddFontResource("Ksphonet.ttf")

For n = 1 To i
a.writeline ("Q: " & Cells(n, 1) & Cells(n,3))
Dim str As Variant
str = Split(Cells(n, 2), Chr(10)) 'chr(10)回车符
For i = 0 To UBound(str)

a.writeline ("A: " & str(i))

Next i

'a.WriteLine ("A: " & Cells(n, 2))
a.writeline

Next
a.Close

MsgBox "词库成功生成!注意生成的文本文件还需转换成中欧ISO的字符集才可以使用!"

End Sub

  
--------------------编程问答-------------------- file:///C:/Documents%20and%20Settings/Administrator/桌面/excel.jpg

//

这个是绝对看不到的.................. --------------------编程问答--------------------
引用 1 楼 myjian 的回复:
file:///C:/Documents%20and%20Settings/Administrator/桌面/excel.jpg

//

这个是绝对看不到的..................


多谢MY兄提醒。抱歉抱歉,第一次发图片贴,还不熟悉。现在补上图片。请大家指教:

第一张图如下:


第二张图如下:
/upload/2013122116/59088_1293166184EGeW.jpg --------------------编程问答-------------------- --------------------编程问答-------------------- 特殊字符一般是需要字体来支持的,字体中没有,那么就显示成问号了....在这个方向上研究一下看看. --------------------编程问答--------------------
引用 4 楼 myjian 的回复:
特殊字符一般是需要字体来支持的,字体中没有,那么就显示成问号了....在这个方向上研究一下看看.


  这个我也有研究国,只是刚刚接触VBA,一切都还不熟悉.不知道怎么在VBA下引进字体,也不知道如何将字符串设置成该类字体。所以才上来请教大家,如果能有源代码贴出来就更好了,多谢多谢 --------------------编程问答-------------------- 用EXCEL打开看看是什么字体 --------------------编程问答--------------------
引用 6 楼 dbcontrols 的回复:
用EXCEL打开看看是什么字体


我感觉并不是EXCEL的问题,因为英标符号在excel中能够正常显示。只是通过VBA读取单元格的内容时才发生乱码,具体参见我的第二张截图。 --------------------编程问答-------------------- 人工置顶,搜索了很久,也研究了很久。始终没有答案,有没有高手来帮帮忙哈 --------------------编程问答-------------------- 我说是EXCEL的问题了么? --------------------编程问答--------------------
引用 9 楼 dbcontrols 的回复:
我说是EXCEL的问题了么?


那DB兄弟,说得详细一些。^_^ --------------------编程问答--------------------
引用 9 楼 dbcontrols 的回复:
我说是EXCEL的问题了么?


数据本身就是从excel的单元格中提取出來的,应该不需要再写回到excel中看字体吧?! --------------------编程问答--------------------
引用 4 楼 myjian 的回复:
特殊字符一般是需要字体来支持的,字体中没有,那么就显示成问号了....在这个方向上研究一下看看.

+1 --------------------编程问答--------------------
引用 12 楼 yiguangqiang88 的回复:
引用 4 楼 myjian 的回复:
特殊字符一般是需要字体来支持的,字体中没有,那么就显示成问号了....在这个方向上研究一下看看.

+1


搜索了很久都没有找到相关的资料,所以才上来问问大家 --------------------编程问答-------------------- 你是取英标啊还是取字体啊?
既然是取英标,看一眼字体能咋了?
你显示的时候用跟EXCEL里面一样的字体就能显示出来
引用 11 楼 wispliu 的回复:
引用 9 楼 dbcontrols 的回复:
我说是EXCEL的问题了么?


数据本身就是从excel的单元格中提取出來的,应该不需要再写回到excel中看字体吧?!
--------------------编程问答--------------------   泰山,实话说,我不是很明白你的意思哈。你是要我看看excel中英标用的是什么字体么?我是用vba读取excel单元格中的英语英标,然后写到txt文件中。excel中英标是正常显示的,字体是宋体(我的excel中也有Kingsoft Phonetic Plain字体)。vba读单元格的时候就不知道用的是什么字符集了。另外一点是,excel能正常显示,但是在vba调试台中打出来的字符是乱码。具体可以看看我发的那两张图哈。

引用 14 楼 dbcontrols 的回复:
你是取英标啊还是取字体啊?
既然是取英标,看一眼字体能咋了?
你显示的时候用跟EXCEL里面一样的字体就能显示出来

引用 11 楼 wispliu 的回复:
引用 9 楼 dbcontrols 的回复:
我说是EXCEL的问题了么?


数据本身就是从excel的单元格中提取出來的,应该不需要再写回到excel中看字体吧?!
--------------------编程问答-------------------- 看看excel中英标用的是什么字体
VB的菜单:工具-》选项-》编辑器格式 里面可以设置成相同的字体
最终保存的时候也必须使用同一种字体
否则肯定乱码 --------------------编程问答--------------------
引用 16 楼 dbcontrols 的回复:
看看excel中英标用的是什么字体
VB的菜单:工具-》选项-》编辑器格式 里面可以设置成相同的字体
最终保存的时候也必须使用同一种字体
否则肯定乱码


试过了,问题依然存在。泰山兄还有什么建议么,谢谢哈 --------------------编程问答-------------------- 无人问津啊 --------------------编程问答-------------------- 程序里读到的音标字符为乱码和生成的文本文件里为乱码,都不用管它,只不过是字体的原因,数据并没有破坏。直接导入到背单词的软件中,看结果如何 --------------------编程问答-------------------- 要想在应用程序(如VB程序)中显示其他字体,必须先安装字体文件(.FON,.FNT,.TTF等格式)。直接读取excel文件中的音标是不会显示的。
具体方法:打开控制面板—字体,点文件—安装新字体,在打开的对话框中选择你解压后的字体所在的位置(先选择驱动器,然后再选择文件夹),在字体列表中选择你要安装的字体(一定要选),确定就行了。这种方法可用程序实现:
Call AddFontResource("xxx.ttf") 'xxx为字体文件名 
Call SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0)

另外,在VB的text中显示其他字体的例子:
text1.Font=“font.ttf”  '设置字体
text1.text="xxx"

还有一个有用的函数chr,比如Chr(-24082)为五角星,此函数用于得到双字节字符集(DBCS:double-byte character set)代码对应的字符。

以上信息希望对你有帮助。

引用自:http://zhidao.baidu.com/question/66307630.html --------------------编程问答-------------------- 有大神说过,现在世道,学会搜索是一大生存基本技能 --------------------编程问答-------------------- 经过测试,使用ASCW()函数知悉所有音标都正确传过来了,问题只在于 Unicode 字符的显示问题

请参考此贴:http://topic.csdn.net/t/20030404/21/1620911.html --------------------编程问答-------------------- 音标需要用到ksphonetic.ttf(金山的英文音标显示字体),或IpaPanADD字体,或SILDoulos IPA93字体 --------------------编程问答--------------------
引用 19 楼 asftrhgjhkjlkttttttt 的回复:
程序里读到的音标字符为乱码和生成的文本文件里为乱码,都不用管它,只不过是字体的原因,数据并没有破坏。直接导入到背单词的软件中,看结果如何


孤独兄,结果依旧是乱码! --------------------编程问答--------------------
引用 20 楼 yiguangqiang88 的回复:
要想在应用程序(如VB程序)中显示其他字体,必须先安装字体文件(.FON,.FNT,.TTF等格式)。直接读取excel文件中的音标是不会显示的。
具体方法:打开控制面板—字体,点文件—安装新字体,在打开的对话框中选择你解压后的字体所在的位置(先选择驱动器,然后再选择文件夹),在字体列表中选择你要安装的字体(一定要选),确定就行了。这种方法可用程序实现:
Call AddFontResourc……


  兄弟一共回了两个贴。我在这里一并回答一下。百度知道上的这个信息我一早就搜索到了,当时也认为自己找到了解决的办法。可惜经过实验,没有解决问题(也许是我应用错误,兄弟可以贴出完整代码,这样更加直观)。此外百度知道上该回答的信息并不完全。AddFontResource还需和其他的函数一块使用,这里只给出了一个函数。
   另一个回帖提到的ASW函数,我之前也有用过。遇到乱码的字符串,立刻报错,原因不明。兄弟既然已经测试通过了,可否将代码贴出来我参考一下。
   yiguangqiang88兄,是第一个认真尝试帮我解决问题的朋友,如此用心,小弟非常感谢!
    --------------------编程问答-------------------- 帖子不能添加附件,我已经程序样本上传到我的资源里了。大家可以下载下来,测试一下。 --------------------编程问答-------------------- http://blog.163.com/e4lich@126/blog/static/84810650200972613829249/


不知道这个有没有用…… --------------------编程问答--------------------
引用 27 楼 yiguangqiang88 的回复:
http://blog.163.com/e4lich@126/blog/static/84810650200972613829249/


不知道这个有没有用……


怎么移植到VBA中? --------------------编程问答-------------------- 挺奇怪,别说编译后的程序,我复制了一个音标放到vb的编译器里面都不能正常显示 --------------------编程问答-------------------- VbExcell.Cells(i, j + 3).Font.Size = 9
VbExcell.Cells(i, j + 3).Font.Name = "Symbol" '或你自带的.ttf字体


在代码中你必需要激活这个字体

Private Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" (ByVal lpFileName As String) As Long
Private Declare Function RemoveFontResource Lib "gdi32" Alias "RemoveFontResourceA" (ByVal lpFileName As String) As Long

'增加字体:
Call AddFontResource("c:\myApp\myFont.ttf")

'删除字体:
Call RemoveFontResource("c:\myApp\myFont.ttf")
--------------------编程问答--------------------
引用 30 楼 cbm666 的回复:
VbExcell.Cells(i, j + 3).Font.Size = 9
VbExcell.Cells(i, j + 3).Font.Name = "Symbol" '或你自带的.ttf字体


在代码中你必需要激活这个字体

Private Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" ……


 兄弟有心了,多谢,但是与字体无关。经过我的一天的实验,乱码涉及到ANSI与Unicode的映射以及windows的代码页。现在问题已经解决了。 --------------------编程问答--------------------
引用 29 楼 yiguangqiang88 的回复:
挺奇怪,别说编译后的程序,我复制了一个音标放到vb的编译器里面都不能正常显示


  这是因为中文的操作系统下VBA代码编辑窗口用的是默认的字符编码GB2312,该套字符编码是ANSI码的汉字扩展版。国际英标字符没有包含在这套字符集中(即GB2312)。文本数据中如果出现编码方案未定义的字符,Windows就会使用缺省字符,通常是?(如果我没说明白的話,兄弟可以自己去查询一下关于windows代码页的资料)
--------------------编程问答-------------------- 多谢楼上……
学习了 --------------------编程问答--------------------
引用 19 楼 asftrhgjhkjlkttttttt 的回复:
程序里读到的音标字符为乱码和生成的文本文件里为乱码,都不用管它,只不过是字体的原因,数据并没有破坏。直接导入到背单词的软件中,看结果如何

很支持
我在写我的Palm PDA的ZDic的词典时也遇到了显示不正确的问题。但是正如19楼所说,只需要导入即可。只是显示时的字体问题。不用担心 --------------------编程问答-------------------- 怎么解决的啊 楼主 --------------------编程问答-------------------- 我是楼主。很久没上来了,解决办法就是在VBA中用unicode的方式打开文件,再写入到指定的txt文件中。
引用 35 楼  的回复:
怎么解决的啊 楼主
--------------------编程问答-------------------- 大侠们,帮助是种幸福
补充:VB ,  VBA
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,