System.IO.StringWriter SW = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter HTW = new System.Web.UI.HtmlTextWriter(SW);
        Page.RenderControl(HTW);
         Response.Buffer = true;
        Response.Clear();
        Response.ClearContent();
        Response.ClearHeaders();
        Response.ContentType = "application/msword";
        Response.Charset = "utf-8";
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
        Response.AddHeader("Content-Disposition", "inline;filename=XXX.doc");   
         Response.Write(SW.ToString());
        Response.Flush();
        Response.Close();
出现乱码,图标不显示!WHy?

解决方案 »

  1.   

    真的假的,WORD不能导入吗,直接用代码向数据库中写数据!
      

  2.   

    protected void btn_Command(object sender, CommandEventArgs e)
            {
                DataTable dt = (DataTable)Session["ds "];
                int i = dt.Rows.Count;
                switch (e.CommandName)
                {                 
                    case "ExportExcel":
                        webprint.FileSave.Export(dt,ExportFormat.XLS,"excel",Encoding.GetEncoding("GB2312"));                    
                        break;
                    case "ExportWord":
                        webprint.FileSave.Export(dt, ExportFormat.DOC, "word", Encoding.GetEncoding("GB2312"));   
                        break;
                }
            }
    namespace webprint
    {
        public enum ExportFormat
        {
            /// <summary>
            /// XLS
            /// </summary>
            XLS,
            
            /// <summary>
            /// DOC
            /// </summary>
            DOC
        }
        public class FileSave
        {
            /// <summary>
            ///  替换特殊字符
            /// </summary>
            /// <param name="input">字符串</param>
            /// <returns></returns>
            public static string ReplaceSpecialChars(string input)
            {
                // space  ->  _x0020_
                // % ->  _x0025_
                // # -> _x0023_
                // & -> _x0026_
                // / -> _x002F_
                input = input.Replace(" ", "_x0020_")
                      .Replace("%", "_x0025_")
                      .Replace("#", "_x0023_")
                      .Replace("&", "_x0026_")
                      .Replace("/", "_x002F_");
                return input;
            }
            /// <summary>
            /// 导数据源的数据
            /// </summary>
            /// <param name="dt">数据源</param>
            /// <param name="exportFormat">导出文件的格式</param>
            /// <param name="fileName">输出文件名</param>
            /// <param name="encoding">编码</param>
            public static void Export(DataTable dt, ExportFormat exportFormat, string fileName, Encoding encoding)
            {
                DataSet dsExport = new DataSet("Export");
                DataTable dtExport = dt.Copy();            dtExport.TableName = "Values";
                dsExport.Tables.Add(dtExport);            string[] headers = new string[dtExport.Columns.Count];
                string[] fields = new string[dtExport.Columns.Count];            for (int i = 0; i < dtExport.Columns.Count; i++)
                {
                    headers[i] = dtExport.Columns[i].ColumnName;
                    fields[i] = ReplaceSpecialChars(dtExport.Columns[i].ColumnName);
                }
                Export(dsExport, headers, fields, exportFormat, fileName, encoding);
            }
       
      

  3.   

         /// <summary>
            /// 导出SmartGridView的数据源的数据
            /// </summary>
            /// <param name="ds">数据源</param>
            /// <param name="headers">导出的表头数组</param>
            /// <param name="fields">导出的字段数组</param>
            /// <param name="exportFormat">导出文件的格式</param>
            /// <param name="fileName">输出文件名</param>
            /// <param name="encoding">编码</param>
            private static void Export(DataSet ds, string[] headers, string[] fields, ExportFormat exportFormat, string fileName, Encoding encoding)
            {
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.Buffer = true;
                HttpContext.Current.Response.ContentType = String.Format("text/{0}", exportFormat.ToString().ToLower());
                HttpContext.Current.Response.AddHeader("content-disposition", String.Format("attachment;filename={0}.{1}", fileName, exportFormat.ToString().ToLower()));
                HttpContext.Current.Response.ContentEncoding = encoding;            MemoryStream stream = new MemoryStream();
                XmlTextWriter writer = new XmlTextWriter(stream, encoding);            CreateStylesheet(writer, headers, fields, exportFormat);
                writer.Flush();
                stream.Seek(0, SeekOrigin.Begin);            XmlDataDocument xmlDoc = new XmlDataDocument(ds);
                XslCompiledTransform xslTran = new XslCompiledTransform();
                xslTran.Load(new XmlTextReader(stream));            System.IO.StringWriter sw = new System.IO.StringWriter();
                xslTran.Transform(xmlDoc, null, sw);            HttpContext.Current.Response.Write(sw.ToString());
                sw.Close();
                writer.Close();
                stream.Close();
                HttpContext.Current.Response.End();
            }
            /// <summary>
            /// 动态生成XSL,并写入XML流
            /// </summary>
            /// <param name="writer">XML流</param>
            /// <param name="headers">表头数组</param>
            /// <param name="fields">字段数组</param>
            /// <param name="exportFormat">导出文件的格式</param>
            private static void CreateStylesheet(XmlTextWriter writer, string[] headers, string[] fields, ExportFormat exportFormat)
            {
                string ns = "http://www.w3.org/1999/XSL/Transform";
                writer.Formatting = Formatting.Indented;
                writer.WriteStartDocument();
                writer.WriteStartElement("xsl", "stylesheet", ns);
                writer.WriteAttributeString("version", "1.0");
                writer.WriteStartElement("xsl:output");
                writer.WriteAttributeString("method", "text");
                writer.WriteAttributeString("version", "4.0");
                writer.WriteEndElement();            // xsl-template
                writer.WriteStartElement("xsl:template");
                writer.WriteAttributeString("match", "/");            // xsl:value-of for headers
                for (int i = 0; i < headers.Length; i++)
                {
                    writer.WriteString("\"");
                    writer.WriteStartElement("xsl:value-of");
                    writer.WriteAttributeString("select", "'" + headers[i] + "'");
                    writer.WriteEndElement(); // xsl:value-of
                    writer.WriteString("\"");
                    if (i != fields.Length - 1) writer.WriteString((exportFormat == ExportFormat.CSV) ? "," : " ");
                }
                // xsl:for-each
                writer.WriteStartElement("xsl:for-each");
                writer.WriteAttributeString("select", "Export/Values");
                writer.WriteString("\r\n");            // xsl:value-of for data fields
                for (int i = 0; i < fields.Length; i++)
                {
                    writer.WriteString("\"");
                    writer.WriteStartElement("xsl:value-of");
                    writer.WriteAttributeString("select", fields[i]);
                    writer.WriteEndElement(); // xsl:value-of
                    writer.WriteString("\"");
                    if (i != fields.Length - 1) writer.WriteString((exportFormat == ExportFormat.CSV) ? "," : " ");
                }            writer.WriteEndElement(); // xsl:for-each
                writer.WriteEndElement(); // xsl-template
                writer.WriteEndElement(); // xsl:stylesheet
            }       
            /// <summary>
            /// 导出数据源的数据
            /// </summary>
            /// <param name="dt">数据源</param>
            /// <param name="columnIndexList">导出的列索引数组</param>
            /// <param name="exportFormat">导出文件的格式</param>
            /// <param name="fileName">输出文件名</param>
            /// <param name="encoding">编码</param>
            public static void Export(DataTable dt, int[] columnIndexList, ExportFormat exportFormat, string fileName, Encoding encoding)
            {
                DataSet dsExport = new DataSet("Export");
                DataTable dtExport = dt.Copy();            dtExport.TableName = "Values";
                dsExport.Tables.Add(dtExport);            string[] headers = new string[columnIndexList.Length];
                string[] fields = new string[columnIndexList.Length];            for (int i = 0; i < columnIndexList.Length; i++)
                {
                    headers[i] = dtExport.Columns[columnIndexList[i]].ColumnName;
                    fields[i] = ReplaceSpecialChars(dtExport.Columns[columnIndexList[i]].ColumnName);
                }
                Export(dsExport, headers, fields, exportFormat, fileName, encoding);
            }
            /// <summary>
            /// 导出数据源的数据
            /// </summary>
            /// <param name="dt">数据源</param>
            /// <param name="columnIndexList">导出的列索引数组</param>
            /// <param name="headers">导出的列标题数组</param>
            /// <param name="exportFormat">导出文件的格式</param>
            /// <param name="fileName">输出文件名</param>
            /// <param name="encoding">编码</param>
            public static void Export(DataTable dt, int[] columnIndexList, string[] headers, ExportFormat exportFormat, string fileName, Encoding encoding)
            {
                DataSet dsExport = new DataSet("Export");
                DataTable dtExport = dt.Copy();
                dtExport.TableName = "Values";
                dsExport.Tables.Add(dtExport);
                string[] fields = new string[columnIndexList.Length];
                for (int i = 0; i < columnIndexList.Length; i++)
                {
                    fields[i] = ReplaceSpecialChars(dtExport.Columns[columnIndexList[i]].ColumnName);
                }
                Export(dsExport, headers, fields, exportFormat, fileName, encoding);
            }        
        }
    }