欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

asp.net实现导出DataTable数据到Word或者Excel的方法

程序员文章站 2023-11-17 14:36:16
本文实例讲述了asp.net实现导出datatable数据到word或者excel的方法。分享给大家供大家参考,具体如下: /// ...

本文实例讲述了asp.net实现导出datatable数据到word或者excel的方法。分享给大家供大家参考,具体如下:

/// <summary>< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />
/// 导出datatable数据到word或者excel
/// </summary>
/// <param name="ppage">page指令</param>
/// <param name="dt">datatable数据表</param>
/// <param name="str_exporttitle">导出word或者excel表格的名字</param>
/// <param name="str_exportcontenttitle">导出word或者excel表格中内容的标题</param>
/// <param name="str_exportman">导出word或者excel的人</param>
/// <param name="str_exporttype">导出类型(w:word,e:excel)</param>
public bool datatabletoexcel(page ppage, datatable dt, string str_exporttitle, string str_exportcontenttitle, string str_exportman, string str_exporttype)
{
    bool bl_result = false;
    string str_exporttypename = "word";//导出类型
    string str_exportformat = ".doc";//导出类型的格式
    if (str_exporttype.equals("e"))
    {
      str_exporttypename = "excel";
      str_exportformat = ".xls";
    }
    httpresponse response = ppage.response;
    if (dt.rows.count > 0)
    {
      response.contentencoding = system.text.encoding.getencoding("gb2312");
      response.contenttype = "application/ms-" + str_exporttypename;
      response.appendheader("content-disposition", "attachment;filename="
      + httputility.urlencode(str_exporttitle, system.text.encoding.utf8).tostring() //该段需加,否则会出现中文乱码
      + str_exportformat);
      //获取datatable的总列数
      int i_columncount = dt.columns.count;
      //定义变量存储datatable内容
      system.text.stringbuilder builder = new system.text.stringbuilder();
      builder.append("<html><head>\n");
      builder.append("<meta http-equiv=\"content-language\" content=\"zh-cn\">\n");
      builder.append("<meta http-equiv=\"content-type\" content=\"text/html; charset=gb2312\">\n");
      builder.append("</head>\n");
      builder.append("<table border='1' style='width:auto;'>");
      if (!string.isnullorempty(str_exportcontenttitle))
      {
        builder.append(string.concat(new object[] { "<tr><td colspan=", (i_columncount + 1),
        " style='border:1px #7f9db9 solid;font-size:18px;font-weight:bold;'>",
        str_exportcontenttitle,
        "</td></tr>" }));
      }
      builder.append("<tr><td colspan=" + (i_columncount + 1) + " valign='middle' style='border:1px #7f9db9 solid;height:24px;'>");
      builder.append("导出人:【" + str_exportman + "】,导出时间:【" + datetime.now.tostring("yyyy-mm-dd hh:mm:ss") + "】</td></tr>");
      builder.append("<tr>\n");
      builder.append("<td style='border:1px #7f9db9 solid;bgcolor:#dee7f1;font-weight:bold;width:auto;'>序号</td>\n");
      for (int i = 0; i < i_columncount; i++)
      {
        if (dt.columns[i].caption.tostring().tolower() != "id")
        {
          builder.append("<td style='border:1px #7f9db9 solid;bgcolor:#dee7f1;width:auto;' align='center'><b>" + dt.columns[i].caption.tostring() + "</b></td>\n");
        }
      }
      #region 此处没有在导出的数据列的最前面加一列(序号列)
      //此处没有在导出的数据列的最前面加一列(序号列)
      //foreach (datarow row in dt.rows)
      //{
      //  builder.append("<tr>");
      //  for (int j = 0; j < i_columncount; j++)
      //  {
      //    if (dt.columns[j].caption.tostring().tolower() != "id")
      //    {
      //      builder.append("<td style='border:1px #7f9db9 solid;vnd.ms-excel.numberformat:@'>" + row[j].tostring() + "</td>");
      //    }
      //  }
      //  builder.append("</tr>\n");
      //}
      #endregion
      #region 在导出的数据列的最前面加了一序号列(注意:非datatable数据的序号)
      //在导出的数据列的最前面加了一序号列(注意:非datatable数据的序号)
      for (int m = 0; m < dt.rows.count; m++)
      {
        builder.append("<tr>");
        for (int j = 0; j < i_columncount; j++)
        {
          if (dt.columns[j].caption.tostring().tolower() != "id")
          {
            if (j == 0)
            {
              builder.append("<td style='border:1px #7f9db9 solid;width:auto;' align='center'>" + (m + 1) + "</td>");
            }
            if (j > 0)
            {
              builder.append("<td style='border:1px #7f9db9 solid;width:auto;vnd.ms-excel.numberformat:@' align='left'>" + dt.rows[m][j - 1].tostring() + "</td>");
            }
            if (j == dt.columns.count - 1)
            {
              builder.append("<td style='border:1px #7f9db9 solid;width:auto;vnd.ms-excel.numberformat:@' align='left'>" + dt.rows[m][j].tostring() + "</td>");
            }
          }
        }
        builder.append("</tr>\n");
      }
      #endregion
      builder.append("<tr><td colspan=" + (i_columncount + 1) + " valign='middle' style='border:1px #7f9db9 solid;height:24px;' align='left'>");
      builder.append("合计:共【<font color='red'><b>" + dt.rows.count + "</b></font>】条记录</td></tr>");
      builder.append("<tr>\n");
      builder.append("</table>");
      response.write(builder.tostring());
      response.end();
      bl_result = true;
    }
    return bl_result;
}

更多关于asp.net相关内容感兴趣的读者可查看本站专题:《asp.net操作json技巧总结》、《asp.net字符串操作技巧汇总》、《asp.net操作xml技巧总结》、《asp.net文件操作技巧汇总》、《asp.net ajax技巧总结专题》及《asp.net缓存操作技巧总结》。

希望本文所述对大家asp.net程序设计有所帮助。