2

我正在从数据源中检索日文字符,我想在 XLOPER 中将此数据返回到 Excel。我使用的是日文版的 Excel 2003(因此是 XLOPERs 而不是 XLOPER12s)。

wchar_t* pszW = OLE2W(bstrResult); //I have the data I am trying to copy in a CComBSTR

ULONG ulSize = ::WideCharToMultiByte( CP_THREAD_ACP, 0, pszW, -1, NULL, 0, NULL, NULL );                        

if ( ulSize )
{   
   char* tmp = new char[ulSize + 1];
   tmp[ulSize]='\0';
   ::WideCharToMultiByte( CP_THREAD_ACP, 0, pszW, -1, LPSTR( tmp ), ulSize, NULL, NULL );
   pszReturn = tmp;     
}
wchar_t* pwszOut = new wchar_t[bstrResult.Length () + 1];

//now turn it back to test that that the correct code page was used. For debugging purposes only!
::MultiByteToWideChar (CP_THREAD_ACP,0, LPSTR(pszReturn),-1,pwszOut,bstrResult.Length () + 1);

//pwszOut and bstrResult look the same in the debugger              
delete [] pwszOut;

参数 pszReturn 分配给 XLOPER。我遇到的问题是“アフリカの女王”在Excel中显示为“ƒAƒtƒŠƒJ,Ì—‰¤”。

手动将代码页设置为 932 会产生与 CP_THREAD_ACP 相同的结果,所以我认为那部分是正确的。

任何帮助将不胜感激。

4

2 回答 2

2

用户错误!

上面的代码很好。问题是 Excel 使用了错误的代码页。我没有在控制面板中将非 unicode 程序的语言设置为日语。

该代码现在也适用于英文版的 Excel。

就这样度过了一天半的美好时光……

于 2008-12-17T16:08:36.050 回答
0

char* 是一个字节序列,使用当前字符集进行解释。准确地说,那是进行解释的一方使用的字符集。在这种情况下,Execl 正在接收使用代码页 932 解释的字符集,但 Excel 正在使用另一个代码页。

解决方案,一如既往是 Unicode,在 XLOPER12 代表的 Excel 中

于 2008-12-17T14:38:10.007 回答