asp.net里导出excel表方法汇总

来源:互联网 发布:win10平板软件下载 编辑:程序博客网 时间:2024/06/14 06:15

1、由dataset生成

public void CreateExcel(DataSet ds,string typeid,string FileName) 
  
{
   HttpResponse resp;
   resp 
= Page.Response;
   resp.ContentEncoding 
= System.Text.Encoding.GetEncoding("GB2312");
   resp.AppendHeader(
"Content-Disposition""attachment;filename=" + FileName);   
   
string colHeaders= "", ls_item="";
   
int i=0;

   
//定义表对象与行对像,同时用DataSet对其值进行初始化
   DataTable dt=ds.Tables[0];
   DataRow[] myRow
=dt.Select(""); 
   
// typeid=="1"时导出为EXCEL格式文件;typeid=="2"时导出为XML格式文件
   if(typeid=="1")
   
{
    
//取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符
    for(i=0;i     colHeaders+=dt.Columns[i].Caption.ToString()+"\t";
    colHeaders 
+=dt.Columns[i].Caption.ToString() +"\n";   
    
//向HTTP输出流中写入取得的数据信息
    resp.Write(colHeaders); 
    
//逐行处理数据  
    foreach(DataRow row in myRow)
    
{
     
//在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n
     for(i=0;i      ls_item +=row[i].ToString() + "\t";     
     ls_item 
+= row[i].ToString() +"\n";
     
//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据    
     resp.Write(ls_item);
     ls_item
="";
    }

   }

   
else
   
{
    
if(typeid=="2")
    

     
//从DataSet中直接导出XML数据并且写到HTTP输出流中
     resp.Write(ds.GetXml());
    }
    
   }

   
//写缓冲区中的数据到HTTP头文件中
   resp.End();


  }

 

后续:

//以下回答上面两位的问题,漏掉的代码已经补上
public void CreateExcel(DataSet ds,string typeid,string FileName)
{
HttpResponse resp;
resp = Page.Response;
resp.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
string colHeaders= "", ls_item="";
int i=0;

//
DataTable dt=ds.Tables[0];
DataRow[] myRow=dt.Select("");
// typeid=="1"為EXCEL文檔;typeid=="2"XML文檔
if(typeid=="1")
{
//
for(i=0;i<dt.Columns.Count;i++)
{
if(i == dt.Columns.Count - 1)
{
colHeaders +=dt.Columns[i].Caption.ToString() +"\n";
}
else
{
colHeaders +=dt.Columns[i].Caption.ToString()+"\t";
}
}
//
resp.Write(colHeaders);
//
foreach(DataRow row in myRow)
{
//
for(i=0;i<dt.Columns.Count;i++)
{
if(i == dt.Columns.Count - 1)
{
ls_item += row[i].ToString() +"\n";
}
else
{
ls_item +=row[i].ToString() + "\t";
}
}
//
resp.Write(ls_item);
ls_item="";
}
}
else
{
if(typeid=="2")
{
//从DataSet中直接导出XML数据并且写到HTTP输出流中
resp.Write(ds.GetXml());
}
}
//写缓冲区中的数据到HTTP头文件中
resp.End();
}

 

 

 

2、由datagridview生成
public void ToExcel(System.Web.UI.Control ctl)  
  
{
   HttpContext.Current.Response.AppendHeader(
"Content-Disposition","attachment;filename=Excel.xls");
   HttpContext.Current.Response.Charset 
="UTF-8";    
   HttpContext.Current.Response.ContentEncoding 
=System.Text.Encoding.Default;
   HttpContext.Current.Response.ContentType 
="application/ms-excel";//image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword
   ctl.Page.EnableViewState =false;   
   System.IO.StringWriter  tw 
= new System.IO.StringWriter() ;
   System.Web.UI.HtmlTextWriter hw 
= new System.Web.UI.HtmlTextWriter (tw);
   ctl.RenderControl(hw);
   HttpContext.Current.Response.Write(tw.ToString());
   HttpContext.Current.Response.End();
  }


用法:ToExcel(datagrid1);

 

3、这个用dataview

public void OutputExcel(DataView dv,string str)
{
   
//
   
// TODO: 在此处添加构造函数逻辑
   
//
                           
//dv为要输出到Excel的数据,str为标题名称
   GC.Collect();
   Application excel;
// = new Application();
   int rowIndex=4;
   
int colIndex=1;

   _Workbook xBk;
   _Worksheet xSt;

   excel
= new ApplicationClass();
  
   xBk 
= excel.Workbooks.Add(true);
   
   xSt 
= (_Worksheet)xBk.ActiveSheet;

   
//
   
//取得标题
   
//
   foreach(DataColumn col in dv.Table.Columns)
   
{
    colIndex
++;
    excel.Cells[
4,colIndex] = col.ColumnName;
    xSt.get_Range(excel.Cells[
4,colIndex],excel.Cells[4,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置标题格式为居中对齐
   }


   
//
   
//取得表格中的数据
   
//
   foreach(DataRowView row in dv)
   
{
    rowIndex 
++;
    colIndex 
= 1;
    
foreach(DataColumn col in dv.Table.Columns)
    
{
     colIndex 
++;
     
if(col.DataType == System.Type.GetType("System.DateTime"))
     
{
      excel.Cells[rowIndex,colIndex] 
= (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");
      xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment 
= XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐
     }

     
else
      
if(col.DataType == System.Type.GetType("System.String"))
     
{
      excel.Cells[rowIndex,colIndex] 
= "'"+row[col.ColumnName].ToString();
      xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment 
= XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐
     }

     
else
     
{
      excel.Cells[rowIndex,colIndex] 
= row[col.ColumnName].ToString();
     }

    }

   }

   
//
   
//加载一个合计行
   
//
   int rowSum = rowIndex + 1;
   
int colSum = 2;
   excel.Cells[rowSum,
2= "合计";
   xSt.get_Range(excel.Cells[rowSum,
2],excel.Cells[rowSum,2]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
   
//
   
//设置选中的部分的颜色
   
//
   xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Select();
   xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Interior.ColorIndex 
= 19;//设置为浅黄色,共计有56种
   
//
   
//取得整个报表的标题
   
//
   excel.Cells[2,2= str;
   
//
   
//设置整个报表的标题格式
   
//
   xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Bold = true;
   xSt.get_Range(excel.Cells[
2,2],excel.Cells[2,2]).Font.Size = 22;
   
//
   
//设置报表表格为最适应宽度
   
//
   xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Select();
   xSt.get_Range(excel.Cells[
4,2],excel.Cells[rowSum,colIndex]).Columns.AutoFit();
   
//
   
//设置整个报表的标题为跨列居中
   
//
   xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).Select();
   xSt.get_Range(excel.Cells[
2,2],excel.Cells[2,colIndex]).HorizontalAlignment = XlHAlign.xlHAlignCenterAcrossSelection;
   
//
   
//绘制边框
   
//
   xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Borders.LineStyle = 1;
   xSt.get_Range(excel.Cells[
4,2],excel.Cells[rowSum,2]).Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;//设置左边线加粗
   xSt.get_Range(excel.Cells[4,2],excel.Cells[4,colIndex]).Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick;//设置上边线加粗
   xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;//设置右边线加粗
   xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick;//设置下边线加粗
   
//
   
//显示效果
   
//
   excel.Visible=true;

   
//xSt.Export(Server.MapPath(".")+"\\"+this.xlfile.Text+".xls",SheetExportActionEnum.ssExportActionNone,Microsoft.Office.Interop.OWC.SheetExportFormat.ssExportHTML);
   xBk.SaveCopyAs(Server.MapPath(".")+"\\"+this.xlfile.Text+".xls");

   ds 
= null;
            xBk.Close(
falsenull,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();
   
string path = Server.MapPath(this.xlfile.Text+".xls");

   System.IO.FileInfo file 
= new System.IO.FileInfo(path);
   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.End();
}

 

 

4。 用微软的COM组件操作Excel。虽然可以很方便的操作单元格,并且能保留VBA代码,它相当于直接打开一个EXCEL进程。

当初这个COM组件式给WinForm准备的,但在Web端有很多东西的支持不尽人意,例如无法用组件中的方法关闭Excel对象,

只能通过强制关闭Excel进程的方式(这其中还有很多问题,例如只能关闭当前打开的这个Excel的进程,否则会把其他用户的Excel进程关闭)。在这里不推荐

5。 用流的方式,把内容以Table的格式向Excel中放数据 好处是 可以生成格式丰富复杂的Excel,页面无刷新

aspx部分


复制代码 代码如下:
<asp:Button ID="hidExport" onClick="hidExport_Click()" Runat="server"></asp:Button>

aspx.cs部分
复制代码 代码如下:
//内容很好理解,只需当成Table来拼字符串即可
private string getExcelContent()
{
StringBuilder sb = new StringBuilder();

sb.Append("<table borderColor='black' border='1' >");
sb.Append("<thead><tr><th colSpan='2' bgColor='#ccfefe'>标题</th></tr>");
sb.Append("<tr><th bgColor='#ccfefe'>号码</th><th bgColor='#ccfefe'>名字</th></tr></thead>");
sb.Append("<tbody>");
sb.Append("<tr class='firstTR'><td bgcolor='#FF99CC'></td><td></td></tr>");
sb.Append("<tr class='secondTR'><td></td><td bgcolor='lightskyblue'></td></tr>");
sb.Append("</tbody></table>");
return sb.ToString();
}

private void hidExport_Click(object sender, System.EventArgs e)
{
string content = getExcelContent();
string css = ".firstTR td{color:blue;width:100px;}.secondTR td{color:blue;width:100px;}";
string filename = "Test.xls";

CommonTool.ExportToExcel(filename, content ,css);
}

工具类CommonTool
复制代码 代码如下:
public class CommonTool
{
/// <summary>
/// 以流的形式,可以设置很丰富复杂的样式
/// </summary>
/// <param name="content">Excel中内容(Table格式)</param>
/// <param name="filename">文件名</param>
/// <param name="cssText">样式内容</param>
public static void ExportToExcel(string filename, string content,string cssText)
{
var res = HttpContext.Current.Response;
content = String.Format("<style type='text/css'>{0}</style>{1}",cssText,content);

res.Clear();
res.Buffer = true;
res.Charset = "UTF-8";
res.AddHeader("Content-Disposition", "attachment; filename=" + filename);
res.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
res.ContentType = "application/ms-excel;charset=UTF-8";
res.Write(content);
res.Flush();
res.End();
}
}

这种方法比较灵活,而且可以通过选择器来添加样式,相当不错。缺点就是需要将数据转换成字符串。


6。导出为CSV


public void doExport(DataTable dtData, string FileName, DataControlFieldCollection fields)
    {
        // 当前对话
        System.Web.HttpContext curContext = System.Web.HttpContext.Current;
        // IO用于导出并返回excel文件
        System.IO.StringWriter strWriter = null;

        if (dtData != null)
        {
            // 设置编码和附件格式
            System.Web.HttpContext.Current.Response.Clear();

            HttpContext.Current.Response.Buffer = true;
            string fileName = HttpUtility.UrlEncode(FileName, System.Text.Encoding.GetEncoding("GB2312"));
            curContext.Response.ContentType = "text/csv";
            curContext.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + ".csv"); //定义输出文件和文件名
            // 导出excel文件
            strWriter = new System.IO.StringWriter();
            if (dtData.Rows.Count != 0)
            {
                curContext.Response.ContentEncoding = System.Text.Encoding.Default;
                curContext.Response.Charset = "GB2312";

                foreach (DataControlField field in fields)
                {
                    if (!string.IsNullOrEmpty(field.HeaderText))
                    {
                        strWriter.Write(field.HeaderText + ",");
                    }
                }
                strWriter.Write("\n");

                foreach (DataRow dr in dtData.Rows)
                {
                    for (int i = 0; i < dtData.Columns.Count; i++)
                    {
                        strWriter.Write("\"" + dr[i].ToString() + "\"" + ",");
                    }
                    strWriter.Write("\n");
                }

            }
            curContext.Response.Write(strWriter.ToString());
            curContext.Response.Flush();
            curContext.Response.End();
        }
    }

 

7.最后,解决科学计数法的问题 //style="vnd.ms-excel.numberformat:@" 可以去除自动科学计数法的困扰

导出到Excel/Csc文件并不难,所以就有好多方法:控件直接Render、把DataSet输出成String再Write出来等,(当然如果调用Excel程序的库文件的话还可以使用更强的直接操作Excel的方法,但这种方法用于Web服务显得有点要求太高:必须让Web服务器安装指定版本的Excel或其支持库文件)。就其前两种方法,实际上也是一样的,Render也是把由DataSet转变的View生成为一个Table输出到客户端而已,只不过隐藏了细节,如果不信,你用EditPlus什么的看看生成的.xls文件就知道了。

Excel的识别力太强了,以至于它本身的格式、Csv格式、Tab分隔符格式、网页的Table格式等都能够很好的打开。但是它“太聪明”了,以至于自动识别数字和字符串,而且要把超过11位的数字自动变为科学计数法的格式,你试试输入“123456789012”,离开那个单元格,就成“123457E+11”了,够聪明的吧,不过有时会让我们感觉不便,因为我输入的就是我自己的身份证号码,尾巴上没有“X”,本来好好的15位数字,得现在成这么个计数法了。那我就改改显示格式吧,改为把数字显示为文本,好了。可是国家的身份证升级了,号码变成18位,我把它输入到数据库,导出来时,用刚才的方法处理过,18位没错,可是最后三位怎么都是零了!Excel为我们做了太多的事,不管是应该的还是不应该的。

怎么解决?请看代码:

 

    public static string ExportTable(DataSet ds)
    {
        string data = "";
        //data = ds.DataSetName + "\n";

        foreach (DataTable tb in ds.Tables)
        {
            //data += tb.TableName + "\n";
            data += "<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\">";
            //写出列名
            data += "<tr style=\"font-weight: bold; white-space: nowrap;\">";
            foreach (DataColumn column in tb.Columns)
            {
                data += "<td>" + column.ColumnName + "</td>";
            }
            data += "</tr>";

            //写出数据
            foreach (DataRow row in tb.Rows)
            {
                data += "<tr>";
                foreach (DataColumn column in tb.Columns)
                {
                    if (column.ColumnName.Equals("证件编号") || column.ColumnName.Equals("报名编号"))
                        data += "<td style=\"vnd.ms-excel.numberformat:@\">" + row[column].ToString() + "</td>";
                    else
                        data += "<td>" + row[column].ToString() + "</td>";
                }
                data += "</tr>";
            }
            data += "</table>";
        }

        return data;
    }


    public static void ExportDsToXls(Page page, string sql)
    {
        ExportDsToXls(page, "FileName", sql);
    }
    public static void ExportDsToXls(Page page, string fileName, string sql)
    {
        DataSet ds = DBUtil.GetDataSet(sql);
        if (ds != null) ExportDsToXls(page, fileName, ds);
    }
    public static void ExportDsToXls(Page page, DataSet ds)
    {
        ExportDsToXls(page, "FileName", ds);
    }
    public static void ExportDsToXls(Page page, string fileName, DataSet ds)
    {
        page.Response.Clear();
        page.Response.Buffer = true;
        page.Response.Charset = "GB2312";
        //page.Response.Charset = "UTF-8";
        page.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + System.DateTime.Now.ToString("_yyMMdd_hhmm") + ".xls");
        page.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
        page.Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
        page.EnableViewState = false;
        page.Response.Write(ExportTable(ds));
        page.Response.End();
    }
//style="vnd.ms-excel.numberformat:@" 可以去除自动科学计数法的困扰
//输出为Table,能够最大限度的减少字段中数据对生成的文件格式的影响,在这里我没有处理数据中含有HTML标签的情况 在页面后台中,这样使用就可以了:

    protected void lbtnToExcel_Click(object sender, EventArgs e)
    {
        string strWhere = BuildSearchWhereString();
        string strOrder = this.hidOrderString.Value;
        string sql = "SELECT 报名编号, 证件编号, 姓名, 考区考点, 报考类别, "
            + "行政区划名称 AS 行政区划, 单位名称 AS 工作单位, 毕业学校名称, 毕业专业名称 AS 毕业专业, 毕业年月, "
            + "通讯地址, 性别"
            + " from [VW报名]";
        if (!string.IsNullOrEmpty(strWhere)) sql += " where " + strWhere;
        if (!string.IsNullOrEmpty(strOrder)) sql += " order by " + strOrder;
        else sql += " order by [报考类别]";
        PageExport.ExportDsToXls(this.Page, "BaoMing", sql);
        dataBind();
    }

 

8.自己写的一个完整方法

 

   /// <summary>
    /// 把DataTable中数据导入到Excel中
    /// </summary>

    /// <param name="dt">需导出的DATATABLE</param>
    /// <param name="strFileName">默认的导出Excel的文件名</param>
    ///  <param name="biaoti">表格标题,不需要请留空</param>
    /// <param name="strbt">表头自己以TABLE的TR方式构造一行数据,不需要请留空</param>
    /// <param name="autotr">自动生头表头,字符以逗号隔开,flase自定义TR(strbt自己构造tr)</param>
    /// <param name="tdlie">需多加的TD列,不需要设置为0</param>
    /// <param name="sql">表中无数据时,输出的提示信息</param>
    /// <param name="pdjtdz">需判断家庭地址的列名以逗号分隔,不需要请置空</param>
   
    public static void DataTableToExcel(DataTable dt, string strFileName, string biaoti, string strbt, bool autotr, int tdlie, string sql,string pdjtdz)
    {
        //本方法以表格的形式输出DATATABLE到EXCEL,自定义项很灵活,完美解决科学计数法的问题

        //构造输出页面信息
        HttpContext.Current.Response.ClearContent();
        HttpContext.Current.Response.Buffer = true;

        string strFileName1 = strFileName;
        strFileName += ".xls";
        HttpContext.Current.Response.AppendHeader("content-disposition", string.Format("attachment; filename={0}", HttpUtility.UrlEncode(strFileName, System.Text.Encoding.UTF8)));
        HttpContext.Current.Response.ContentType = "application/ms-excel";
        //设置表格的样式
        string formstr = "<head><style>Table,td{border:1px solid #000;Text-align:center;}</style></head><body ><table style=\"border:1px solid #000;\">";
        //表格标题
        if (biaoti.Length > 0)
        {
            formstr = formstr + " <tr><td align=left colspan=" + (dt.Columns.Count + tdlie).ToString() + "><font size='16px'>" + biaoti + "</font></td></tr>";
        }
        //构造表头
        if (strbt.Length > 0)
        {
            //如果用户传递了表头信息
            if (autotr)
            {
                //自动加表头,处理由传入的以逗号排列列名称生成表头
                formstr = formstr + "<tr>";
                string[] bts = strbt.ToString().Split(',');
                foreach (string strLsz in bts)
                {
                    //用于标识特殊列
                    if (strLsz == "班级" || strLsz == "姓名" || strLsz == "性别" || strLsz == "身份证号" || strLsz == "民族" || strLsz == "户籍详细地址" || strLsz == "户籍性质" || strLsz == "户籍所在省" || strLsz == "是否低保" || strLsz == "学生电话" || strLsz == "家长姓名" || strLsz == "家长电话")
                    {
                        formstr = formstr + "<td bgcolor='#949694'><font color=red><b>" + strLsz + "</b></font></td>";
                    }
                    else
                    {
                        formstr = formstr + "<td>" + strLsz + "</td>";
                    }

                }
                formstr = formstr + "</tr>";
            }
            else
            {
                //自定义的表头,处理由用户传入的以<tr>开始,</tr>结束的自定义表头
                if (strbt.Length > 8)
                {

                    if (strbt.Substring(0, 3) != "<tr")
                    {
                        formstr = formstr + "<tr><td>" + strbt;
                    }
                    else
                    {
                        formstr = formstr + strbt;
                    }
                    if (strbt.Substring(strbt.Length - 4, 4) != "/tr>")
                    {
                        formstr = formstr + "</td></tr>";
                    }

 

                }
            }
        }
        else
        {
            //如果表头参数为空,自动用DATATABLE的列属性做表头
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                formstr = formstr + "<td>" + dt.Columns[j].Caption + "</td>";
            }
        }
        //表头处理结束

        //datatable数据显示处理

        if (dt.Rows.Count > 0)
        {
            //数据行大于0时,有数据时 //循环遍历DATATABLE中的每一行,并输出
            for (int i = 0; i < dt.Rows.Count; i++) //设置每个单元格
            {
                formstr = formstr + "<tr>";
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    //解决数字在EXCEL中显示为科学计数法的问题
                    float a = 0;
                    DateTime b;
                    if (float.TryParse(dt.Rows[i][j].ToString(), out a) && dt.Rows[i][j].ToString().Length > 0) //判断是否可以转换为整型           
                    {
                        if (DateTime.TryParse(dt.Rows[i][j].ToString(), out b))
                        {
                            formstr = formstr + "<td>" + dt.Rows[i][j].ToString() + "</td>";
                        }
                        else
                        {
                            //使用style=\"vnd.ms-excel.numberformat:@\ 说明这是数字
                            formstr = formstr + "<td style=\"vnd.ms-excel.numberformat:@\">" + dt.Rows[i][j].ToString() + "</td>";

                        }
                    }
                    else
                    {
                        //判断家庭地址是否填写完整  以地址中是否有镇,村,号,组,栋判断

                        if (pdjtdz.Length > 0 && dt.Columns[j].Caption == pdjtdz)
                        {
                            if (dt.Rows[i][j].ToString().Contains("镇") || dt.Rows[i][j].ToString().Contains("村") || dt.Rows[i][j].ToString().Contains("号") || dt.Rows[i][j].ToString().Contains("组") || dt.Rows[i][j].ToString().Contains("栋"))
                            {
                                formstr = formstr + "<td>" + dt.Rows[i][j].ToString() + "</td>";
                            }
                            else
                            {
                                //不完整标识
                                formstr = formstr + "<td bgcolor='#D1D2D3' style=\"text-align:left\"><font size=2 color=red>" + dt.Rows[i][j].ToString() + "</font></td>";
                            }
                        }
                        else
                        {
                            //显示不需要判断的列
                            formstr = formstr + "<td>" + dt.Rows[i][j].ToString() + "</td>";
                        }
                    }

                }
                //构建用户添加的空列
                if (tdlie > 0)
                {
                    for (int ii = 0; ii < tdlie; ii++)
                    {
                        formstr = formstr + "<td></td>";
                    }
                }
                //结束一行输出
                formstr = formstr + "</tr>";

            }
            //内容输出结束
        }
        else
        {
            //数据为空时

            if (sql.Length > 0)
            {
                //输出用户自定义的错误信息
                formstr = formstr + "<tr><td align=left colspan=" + (dt.Columns.Count + tdlie).ToString() + "><font color=red>" + sql + "</font></td></tr>";
            }
        }

       
        //结束输出
        formstr = formstr + "</table>";
      
        //下载到客户端EXCEL
        HttpContext.Current.Response.Write(formstr);
        HttpContext.Current.Response.End();
    }
  

原创粉丝点击