求助:VC读取Excel文件中法文字符的问题

yanwuhuan 2006-11-10 10:35:47
在下最近接手了一个应用,是用Excel文件来处理多国语言的。
恼火的是有两个字符,在中文系统下显示?,英文却是正确的,但在客户的法文系统下还是?,这就很麻烦。
肯定不是字库的问题,因为直接看Excel文件是可以的,而且用python的也可以正常解析出来。
我怀疑是否是字符集、或者编码方式的问题?但我对excel并不熟悉,google上也没搜到什么。
敬请知道的朋友出手相助。


Excel文件内容:
langkey English French
1034 sûr Reçu

源代码内容:
MFC Console,带宏 _UNICODE

#include <afxdb.h>
#include <odbcinst.h>



CString GetExcelDriver()
{
TCHAR szBuf[2001];
WORD cbBufMax = 2000;
WORD cbBufOut;
TCHAR *pszBuf = szBuf;
CString sDriver;
// 获取已安装驱动的名称(涵数在odbcinst.h里)
if (!SQLGetInstalledDriversW(szBuf, cbBufMax, &cbBufOut))
return "";
// 检索已安装的驱动是否有Excel...
do
{
if (_tcsstr(pszBuf, _T("Excel")) != 0)
{
sDriver = CString(pszBuf);
break;
}
pszBuf = _tcschr(pszBuf, L'\0') + 1;
}
while (pszBuf[1] != '\0');
return sDriver;
}


void ReadExcel()
{
CDatabase database;
CString szSql;
CString szDriver;
CString szDsn;
CString szFile,szPath;

GetModuleFileName(NULL,szPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
szPath.ReleaseBuffer ();
int mPos;
mPos=szPath.ReverseFind ('\\');
szPath=szPath.Left (mPos);
szFile = szPath + _T("\\Demo.xls"); // 将被读取的Excel文件名
// 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"
szDriver = GetExcelDriver();
if (szDriver.IsEmpty())
{
AfxMessageBox(_T("No Driver"));
return;
}
// 创建进行存取的字符串
szDsn.Format(_T("ODBC;DRIVER={%s};DSN='';DBQ=%s;CHARSET=ISO8859-12"), szDriver, szFile);
TRACE(_T("DSN: ") + szDsn + _T("\r\n"));
TRY
{
database.Open(NULL, false, false, szDsn);
CRecordset recset(&database);//通过该类对纪录集进行操作
// 设置读取的查询语句.
szSql = _T("SELECT langkey, English, French FROM Exceldemo");
// 执行查询语句
recset.Open(CRecordset::forwardOnly, szSql, CRecordset::readOnly);
int i=0;
// 获取查询结果
while (!recset.IsEOF())//当有纪录或者不是最后一条纪录时,读取Excel内部数值
{
{
CString szTmp;
recset.GetFieldValue(_T("English"), szTmp);
AfxMessageBox(szTmp);
recset.GetFieldValue(_T("French"), szTmp);
AfxMessageBox(szTmp);
}
i++;
recset.MoveNext();
}
// 关闭数据库
database.Close();
}
CATCH(CDBException ,e)
{
// 数据库操作产生异常时...
AfxMessageBox(_T("DB Exception: ")+ e->m_strError);
}
END_CATCH;
}


Python的示例脚本:
#!/bin/python
# -*- coding: cp936 -*-

from win32com.client import Dispatch
from os import getcwd,system

xlsApp = Dispatch("Excel.Application")
cur_path=getcwd()
xlsApp.Workbooks.Open(cur_path + "\\Demo.xls")
xlsBook = xlsApp.Workbooks(1)
val1 = xlsBook.Sheets[0].Cells(2,2).Value
val2 = xlsBook.Sheets[0].Cells(2,3).Value
xlsBook.Close(SaveChanges = 0)
del xlsApp

f = open("test.txt", 'wb')
f.write(("%s\r\n%s") % (val1.encode('utf-8'), val2.encode('utf-8')))
f.close()
...全文
271 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
LiChenYue 2007-01-11
帮顶。
回复
yanwuhuan 2006-11-12
谢谢关注。
但还是不行,那个程序经测试对上面那个文件里面的这俩字符(utf8编码分别是fb, e7),获得的依然是问号?(0x3f)
回复
lisypro 2006-11-11
http://www.vckbase.com/code/viewcode.asp?id=1966
回复
lisypro 2006-11-11
UP
回复
相关推荐
发帖
数据库
创建于2007-09-28

3954

社区成员

VC/MFC 数据库
申请成为版主
帖子事件
创建了帖子
2006-11-10 10:35
社区公告
暂无公告