我从数据源中检索日语字符,我想在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。我的问题是,“アフリカの女王”被显示为“ƒAƒtƒŠƒJ,Ì-‰¤”在Excel中。

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

任何帮助,将不胜感激。

有帮助吗?

解决方案

<强> 用户错误!

上面的代码是好的。问题是,Excel中使用错误的代码页。我还没有设置非Unicode程序日本控制面板中的语言。

现在,该代码适用于英文版本的Excel了。

这是一个一天半的时间花得......

其他提示

一个字符*是一个字节序列,使用当前字符集解释。要precose,这是由党做解释使用的字符集。在这种情况下,Execl的正在接收一个charset应使用代码页932被解释,而是Excel正在使用另一个代码页。

在解决方案,因为始终是Unicode,在Excel中通过XLOPER12表示

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top