问题现象: 在用NPOI导出Excel文件后,发现用Excel软件打开创建的文件时文件
链接(HyperlinkType.File)路径中的中文是乱码(??) 而URl链接路径中
的中文是正常的.
问题原因: 于是看了NOPI的源码,发现链接类型 HyperlinkType.File 和 HyperlinkType.Url
在将路径序列化的方法是不一样的:
a. HyperlinkType.Url 类型用 StringUtil.PutUnicodeLE 方法以 "UTF-16LE" 编
码的方式写到Excel文件中
b. HyperlinkType.File 类型用 StringUtil.PutCompressedUnicode 方法以
"ISO-8859-1" 编码的方式写到Excel文件中,"ISO-8859-1" 是不能表示中
文的,在将路径转成 "ISO-8859-1" 编码后,原先的内容以改变,在Excel软
就显示为乱码(??)
解决办法: 将原先的代码:HSSFHyperlink link = new HSSFHyperlink(HyperlinkType.File);
string strPath = "\\目录\\文件名.jpg";
link.Address = strPath
改为以下代码:HSSFHyperlink link = new HSSFHyperlink(HyperlinkType.File);
string strPath = "\\目录\\文件名.jpg";
//----------------------------增加的代码------------------------------------
byte[] srcBytes = Encoding.Default.GetBytes(strPath );
string strPath = Encoding.GetEncoding("ISO-8859-1").GetString(srcBytes);
//-------------------------------------------------------------------------------
link.Address = strPath