数据比较复杂,涉及到合并单元格的

解决方案 »

  1.   

    GC.Collect();
            ApplicationClass excel;
            int rowIndex = 1;
            int colIndex = 1;
            _Workbook xBk;
            _Worksheet xSt;
            string sTimes = DateTime.Now.ToString("yyyyMMddHHmmss");
            string strFileName = "";
            System.IO.FileInfo file;
    excel.Cells[rowIndex, colIndex]=“aa” 给excel第一行第一列赋值
    xSt.get_Range(excel.Cells[1, 1], excel.Cells[1, 14]).Merge(14);\\合并第一行1到14列
            #region 保存文件
            strFileName = Server.MapPath("Uploads/qafiles/") + "QAIndividualQC" + sTimes + ".xls";
            xBk.SaveCopyAs(strFileName);        xBk.Close(false, null, null);        excel.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt);
            xBk = null;
            excel = null;
            xSt = null;
            GC.Collect();        file = new System.IO.FileInfo(strFileName);
            Response.Clear();
            //Response.Charset = "GB2312";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            // 添加头信息,为"文件下载/另存为"对话框指定默认文件名 
            Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(file.Name));
            // 添加头信息,指定文件大小,让浏览器能够显示下载进度 
            Response.AddHeader("Content-Length", file.Length.ToString());
            // 指定返回的是一个不能被客户端读取的流,必须被下载 
            Response.ContentType = "application/ms-excel";
            // 把文件流发送到客户端 
            Response.WriteFile(file.FullName);
            Response.Flush();
            file.Delete();
            // 停止页面的执行 
            Response.End();
            #endregion
      

  2.   

    使用xml格式
    参见
    http://dotnet.aspx.cc/file/Export-Gridview-To-Excel-With-Multi-Sheet.aspx
      

  3.   

    以下是我测试用的。  protected void Button1_Click(object sender, EventArgs e)
            {
                string strText = Export();
                ExportExcel(this, "测试表", strText);
            }        /// <summary>
            /// 导出
            /// </summary>
            /// <returns>要导出的内容</returns>
            public string Export()
            {
                StringBuilder table = new StringBuilder();
                table.Append(@"<table class='table'><tr><td class='td_center' colspan='2'>第一行(共2列)</td></tr>");
                table.Append("<tr><td class='td_center' rowspan='3'>第二、三、四行第一列</td><td class='td_center'>第二行第二列</td></tr>");
                table.Append("<tr><td class='td_center'>第三行第二列</td></tr>");
                table.Append("<tr><td class='td_center'>第四行第二列</td></tr>");
                table.Append("</table>");
                return table.ToString();
            }
             /// <summary>
            /// 导出Excel
            /// </summary>
            /// <param name="page">操作页面</param>
            /// <param name="fileName">导出的文件名称</param>
            /// <param name="text">要导出的内容</param>
            public void ExportExcel(Page page, string fileName, string text)
            {
                page.EnableViewState = false;
                try
                {
                    page.Response.ClearContent();
                    page.Response.Buffer = true;
                    page.Response.Charset = "GB2312";//设置字符集,解决中文乱码问题
                    page.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
                    page.Response.Write("<meta http-equiv=Content-Type content=\"text/html;charset=GB2312\">");//解决乱码问题
                    //解决HTTP头中文乱码问题
                    string strExcelText = DateTime.Now.ToShortDateString() + "\t" + fileName;//Excel显示的内容
                    string strEncode = System.Web.HttpUtility.UrlEncode(strExcelText, System.Text.Encoding.UTF8);//进行编码的格式,用gb2312出错
                    page.Response.AddHeader("content-disposition", "attachment;filename=\"" + strEncode + ".xls\"");//对保存标题进行编码
                    page.Response.ContentType = "application/vnd.xls";//设置输出格式
                    page.Response.Write(@"<html><head><style>.table{border: 1px solid #000000;padding:0;margin:0 auto;border-width: thin;border-collapse: collapse;}
                                        .td_head{border: 1px solid #000000;border-width: thin;text-align:center;font-size:12px;padding: 3px 3px 3px 8px;background: #000000;}
                                        .td_left{border: 1px solid #000000;font-size:12px;border-width: thin;text-align:left;padding: 3px 3px 3px 8px;mso-number-format:\@;}
                                        .td_left_number{border: 1px solid #000000;font-size:12px;border-width: thin;text-align:left;padding: 3px 3px 3px 8px;}
                                        .td_center{border: 1px solid #000000;font-size:12px;border-width: thin;text-align:center;padding: 3px 3px 3px 8px;mso-number-format:\@;}
                                        .td_center_number{border: 1px solid #7777cc;font-size:12px;border-width: thin;text-align:center;padding: 3px 3px 3px 8px;}
                                        .td_right{border: 1px solid #000000;font-size:12px;border-width: thin;text-align:right;padding: 3px 3px 3px 8px;mso-number-format:\@;}
                                        .td_right_number{border: 1px solid #000000;font-size:12px;border-width: thin;text-align:right;padding: 3px 3px 3px 8px;}
                                        </style></head><body>");
                    StringWriter sw = new StringWriter();
                    HtmlTextWriter htw = new HtmlTextWriter(sw);
                    htw.WriteLine(text);//将数据输出
                    page.Response.Write(sw.ToString());
                    page.Response.Write("</body></html>");
                    page.Response.Flush();
                    page.Response.End();
                }
                catch
                {
                    return;
                }
                finally
                {
                    //恢复原来控件内容
                    page.EnableViewState = true;
                }
            }