用输出流导出EXCEL,在2007下打开乱码问题
来源:互联网 发布:windows telent 编辑:程序博客网 时间:2024/05/21 10:26
该方法试用与2003与2007,可以导出多个SHEET.不会有乱码.具体如下:
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(sw);
this.repPrj.RenderControl(hw); //repPrj为Control的ID,经过我的实验,Control可以为自定义控件,服务器端控件,客户端控件.
string[] strHTML = {sw.ToString()};//为数组,如果想导出多个SHEET;则用上面的方法做多个输出流.
string[] strSheetNames = {};//每个SHEET的名字,支持中文.
string fileName;
ExportToExcelInMIME(this.Response,fileName,strHTML,strSheetNames);
public static void ExportToExcelInMIME(HttpResponse rs,string fileName,string[] strHtmls,string[] strSheetsName)
{
rs.ContentType = "application/vnd.ms-excel";
rs.Charset = "utf-8";
rs.ContentEncoding = System.Text.Encoding.UTF8 ;
string name = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);//如有乱码,可以调试该处的编码格式
rs.AppendHeader("Content-Disposition", "inline;filename=" + name + ".xls");
strSheetsName = StrToASC(strSheetsName).Split(',');
string strResult = CreateExcel(strHtmls,strSheetsName);
rs.Write(strResult.ToString().Replace("<a href=# ", "<p "));
rs.End();
}
public static string CreateExcel(string[] strHtmls,string[] strSheetsName)
{
string strResult = "";
strResult = CreateExcelHead(strSheetsName);
for(int i=0 ; i<strSheetsName.Length ; i++)
{
strResult += CreateExcelBoundary(strHtmls[i],i.ToString());
}
strResult += "--"+ SysConsts.Boundary +"--";
return strResult;
}
public static string CreateExcelHead(string[] strSheetsName)
{
StringBuilder sb = new StringBuilder();
sb.Append("MIME-Version: ");
sb.Append(SysConsts.MIMEVersion);
sb.Append("/r/nX-Document-Type: ");
sb.Append(SysConsts.DocumentType);
sb.Append("/r/nContent-Type: ");
sb.Append(SysConsts.ContentType);
sb.Append("; boundary=/"");
sb.Append(SysConsts.Boundary);
sb.Append("/"/r/n");
sb.Append("/r/n");
sb.Append("------BOUNDARY_9527----/r/n");
sb.Append("Content-Location: file:///C:/0E8D990C/MimeExcel.xml/r/n");
sb.Append("Content-Transfer-Encoding: quoted-printable/r/n");
sb.Append("Content-Type: text/html; charset=/"us-ascii/"/r/n");
sb.Append("/r/n");
sb.Append("/r/n<html xmlns:o=3D/"urn:schemas-microsoft-com:office:office/"/r/n");
sb.Append("xmlns:x=3D/"urn:schemas-microsoft-com:office:excel/"/r/n");
sb.Append("xmlns=3D/"http://www.w3.org/TR/REC-html40/">/r/n");
sb.Append("<head>/r/n");
sb.Append("<xml>/r/n");
sb.Append("<x:ExcelWorkbook>/r/n");
sb.Append(" <x:ExcelWorksheets>/r/n");
for(int i=0 ; i<strSheetsName.Length ; i++)
{
sb.Append(" <x:ExcelWorksheet>/r/n");
sb.Append(" <x:Name>").Append(strSheetsName[i].ToString()).Append("</x:Name>/r/n");
sb.Append(" <x:WorksheetSource HRef=3D/"cid:sheet").Append(i.ToString()).Append("/"/>/r/n");
sb.Append(" </x:ExcelWorksheet>/r/n");
}
sb.Append(" </x:ExcelWorksheets>/r/n");
sb.Append("</x:ExcelWorkbook>/r/n");
sb.Append("</xml>/r/n");
sb.Append("</head>/r/n");
sb.Append("</html>/r/n");
return sb.ToString();
}
public static string CreateExcelBoundary(string strHtml,string strSheetName)
{
StringBuilder sb = new StringBuilder();
sb.Append("/r/n--").Append(SysConsts.Boundary).Append("/r/n");
sb.Append("Content-ID: sheet").Append(strSheetName).Append("/r/n");
sb.Append("Content-Transfer-Encoding: utf-8/r/n");//如有乱码,可以调试该处的编码格式
sb.Append("Content-Type: text/html; charset=/"utf-8/"/r/n");//如有乱码,可以调试该处的编码格式
sb.Append("/r/n");
sb.Append("<html xmlns:o=3D/"urn:schemas-microsoft-com:office:office/"/r/n");
sb.Append("xmlns:x=3D/"urn:schemas-microsoft-com:office:excel/"/r/n");
sb.Append("xmlns=3D/"http://www.w3.org/TR/REC-html40/">/r/n");
sb.Append("<head>/r/n");
sb.Append("<xml>/r/n");
sb.Append(" <x:WorksheetOptions>/r/n");
sb.Append(" <x:ProtectContents>False</x:ProtectContents>/r/n");
sb.Append(" <x:ProtectObjects>False</x:ProtectObjects>/r/n");
sb.Append(" <x:ProtectScenarios>False</x:ProtectScenarios>/r/n");
sb.Append(" </x:WorksheetOptions>/r/n");
sb.Append("</xml>/r/n");
sb.Append("</head>/r/n");
sb.Append("<body>/r/n");
sb.Append ("<meta http-equiv=Content-Type content=text/html;charset=utf-8>");
sb.Append(strHtml);
sb.Append("/r/n</body>/r/n");
sb.Append("</html>/r/n");
// sb.Append("------BOUNDARY_9527------/r/n");
return sb.ToString();
}
/// <summary>
/// 将字符串转换为asc码
/// </summary>
/// <param name="rs"></param>
/// <param name="grid"></param>
/// <param name="fileName"></param>
public static string StrToASC(string str)
{
string acs = " ";
foreach(char a in str)
{
int i = (int)a;
acs += "&#"+i.ToString()+";";
}
return acs;
}
/// <summary>
/// 将字符串数组转换为asc码
/// </summary>
/// <param name="rs"></param>
/// <param name="grid"></param>
/// <param name="fileName"></param>
public static string StrToASC(string [] str)
{
string str1 = "";
foreach(string a in str)
{
str1 += StrToASC(a)+",";
}
str1 = str1.TrimEnd(',');
return str1;
}
- 用输出流导出EXCEL,在2007下打开乱码问题
- 在weblogic下如何解决Word、Excel打开乱码问题
- 在weblogic下解决Word、Excel打开乱码问题
- arcmap导出属性表excel打开乱码问题
- excel 导出乱码问题
- Excel导出乱码问题
- JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题
- JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题
- laravel 导出csv文件 用excel打开中文乱码问题之BOM
- 在weblogic下如何解决Word、Excel直接打开造成乱码的问题。
- out输出图片流在firefox下乱码问题
- 导出CSV格式文件,用Excel打开乱码的解决办法
- 导出CSV格式文件,用Excel打开乱码的解决办法
- Mantis中文环境下CSV和Excel导出乱码问题
- java导出excel在使用QQ浏览器时乱码问题
- csv文件导出,excel打开乱码处理
- Excel导入导出乱码问题
- php 导出 excel 乱码问题
- HOHO,搞定SQL创建SA权限用户(MSSERVER2000)
- Tomcat 5.x 在JBuilder2006下的配置,可以调试JSP
- tolua++初探(四)
- 使用NetBeans进行J2ME开发(一):别让程序员的手机闲着
- 规范的设计,事半功倍的收获,记录oracle一些命名规范
- 用输出流导出EXCEL,在2007下打开乱码问题
- 短信发送程序
- 禁止文本框粘贴功能【支持IE、Mozlla、Firefox等】
- Linux QoS学习
- Programming Ruby 读书笔记(五)
- 关于沟通
- 程序设计学习方法的一点个人见解
- secureCRT中显示Linux风格的彩色文字
- 本来不想说的,关于家乐福什么的