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();
}
后续:
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(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();
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();
}
- asp.net里导出excel表方法汇总
- asp.net里导出excel表方法汇总
- asp.net里导出excel表方法汇总
- asp.net里导出excel表方法汇总
- asp.net里导出excel表方法汇总(ZT)
- asp.net里导出excel表方法汇总
- asp.net里导出excel表方法汇总
- asp.net里导出excel表方法汇总
- asp.net里导出excel表方法汇总
- asp.net里导出excel表方法汇总
- asp.net里导出excel表方法汇总 (转帖)
- asp.net里导出excel表方法汇总
- asp.net里导出excel表方法汇总
- asp.net里导出excel表方法汇总
- asp.net里导出excel表方法汇总
- asp.net里导出excel表方法汇总
- asp.net里导出excel表方法汇总
- asp.net里导出excel表方法汇总
- 博客牛人
- hdu_3605 Escape 二分图的多重匹配 匈牙利算法
- Windows Server 2012 R2超级虚拟化之五 利用Shared VHDX创建虚拟机群集
- Java 中类加载的方式
- 张孝祥整理Java面试题
- asp.net里导出excel表方法汇总
- 住院中看不惯的一件事
- 凯撒加密算法简化
- 基于Qt的局域网聊天软件
- 七夕汇编小礼物
- Hibernate4需要导入的jar包
- 使用Hibernate连接h2数据库的配置文件写的方法(连接字符串)
- 在SSH框架中增加SiteMesh的支持
- Hibernate连接Mysql主配置文件方法(连接字符串)
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();
}