在网页中与EXCEL的交互(导出)
来源:互联网 发布:linux wifi不稳定 编辑:程序博客网 时间:2024/06/18 16:25
以前用DELPHI写程序,后来追逐潮流,慢慢地对网站制作有了很大的兴趣。我喜欢C#的风格,所以在用ASP.NET时我选了C#作为我的编程语言。为了更快地掌握ASP.NET,我决定做一个项目(前一段时间,编写过一个结合SERV-U的FTP管理系统供教学用,因为教学上有教学生做网页的,所以做了这个系统,给每个学生开一个FTP空间让其存放网页,嘿,效果还不错),当然是自己给自己定的了,没人给我下任务,想做什么就做什么,多好,唯一的缺憾是没钱。以前用DEPLHI为学校编写过“成绩管理系统”,一直使用到现在,反映还不错,方便了各位老师的工作,却增加了我的负担,主任时不时根据管理上的变动要我改一点、再改一点...。
不说别的了,言归正传。在我设置好了界面后(这是我的短处),完成了登录、更改密码、个人设置页面后。进入到这认为是整个系统中较为复杂的“录入学生成绩”一页了。因为在这里要实现学生成绩的输入、或从EXCEL文件中导入成绩、或导入成绩到EXCEL中、或从“阅卷系统”(我编的一个用光标阅读机读卡的程序)中加入答题卡成绩,还有打印等。这些在DELPHI中很容易,但在网页中,我没底,但我相信总是有办法的。
首先,成绩是导出成绩到EXCEL中,我参照了一个网友的方法,在服务器端生成一个网页文件,将此文件作为EXCEL格式的,并在其中写入表格,原先是不支持模板列的,我将其改了一下,使其支持模板列,此函数如下:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
用于将一个DATAGRID导出到EXCEL文件中,可含模板列.#region 用于将一个DATAGRID导出到EXCEL文件中,可含模板列.
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 用于将一个DATAGRID导出到EXCEL文件中,可含模板列.模板列中可含文本框、列表框等其他控件,
/// </summary>
/// <param name="dg"></param>
/// <param name="Response"></param>
/// <returns></returns>
public static string GridToExcel_Rich(DataGrid dg, System.Web.HttpResponse Response)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
...{
try
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
...{
DataGrid dgTemp = new DataGrid();
DataTable dt = new DataTable();
DataRow dr;
Response.Clear();
//用dg生成一个DataTable dt;
int i, j, nColCount = dg.Columns.Count;
for(i=0; i<nColCount; i++)
//在这里用visible属性就不可以了,无法生成表,不知为什么.表结构可以生成,但下面的加入行操作不行.
//if (dg.Columns[i].Visible)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
...{
dt.Columns.Add(dg.Columns[i].HeaderText);
}
for(j=0; j<dg.Items.Count; j++)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
...{
dr = dt.NewRow();
for(i=0; i<nColCount; i++)
//这里用visible没影响.
//if (dg.Columns[i].Visible)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
...{
if(dg.Columns[i] is System.Web.UI.WebControls.TemplateColumn)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
...{
//要增加对其他控件的支持可修改这里。
if (dg.Items[j].Cells[i].Controls[1] is System.Web.UI.WebControls.TextBox)
dr[i] = ((System.Web.UI.WebControls.TextBox)dg.Items[j].Cells[i].Controls[1]).Text;
else if (dg.Items[j].Cells[i].Controls[1] is System.Web.UI.WebControls.Label)
dr[i] = ((System.Web.UI.WebControls.Label)dg.Items[j].Cells[i].Controls[1]).Text;
else if (dg.Items[j].Cells[i].Controls[1] is System.Web.UI.WebControls.DropDownList)
dr[i] = ((System.Web.UI.WebControls.DropDownList)dg.Items[j].Cells[i].Controls[1]).SelectedItem.Text;
}
else if (dg.Columns[i] is System.Web.UI.WebControls.BoundColumn)
dr[i] = dg.Items[j].Cells[i].Text;
}
dt.Rows.Add(dr);
}
//只能先全部生成,再删除visible为false的列了.
for(i=0; i<nColCount; i++)
if(!dg.Columns[i].Visible)
dt.Columns.Remove(dt.Columns[i].ColumnName);
dgTemp.DataSource = dt.DefaultView;
dgTemp.DataBind();
//输出
Response.Buffer = true;
Response.Charset="GB2312";
Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls");
Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN",true);
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
dgTemp.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();
return "";
}
catch(Exception ex)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
...{
return ex.Message;
}
}
#endregion
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
在使用中觉得效果很好。
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)