我已知如何导出excel.现在主要是想给导出的excel 的工作簿指定一个名称。
解决方案 »
- .net 创建windows服务问题?
- 数据库中数据类型为nchar,从数据库中取出来设置dropdownlist的选项,用findbyvalue,结果找不到
- ashx输出图片,要求浏览器缓存
- fckeditor 显示内容跟前台显示的不对头
- 请问大家怎么用javascript写和读session??
- cookie写不进去
- 我在页面取到个时间,怎么和数据库的日期去比较,我写了一百多行,刚要庆祝,挨了顿说回来了
- 在一个asp:TextBox中输入字符串,怎么实现“检验字符串是否是按"2003-2-2"这样的格式”。最后能够是可在客户端执行的代码。
- 一个小问题!
- 救火!!!帮帮忙
- 将cookieless="true"之后Url如http://localhost/Mobile/(S(3qafbh55ruyijiatmx)
- 要从数据库读取一篇文章用什么控件最好,怎么实现?(C#.net)
Response.Charset ="";
this.EnableViewState = false;
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(sw);
this.DataGrid1.RenderControl(hw);
Response.Write(sw.ToString());
Response.End();
/// <summary>
/// 根据Table生成Excel文件并下载
/// </summary>
/// <param name="Response">Response</param>
/// <param name="excel">文件完整路径</param>
/// <param name="tb">Table</param>
/// <param name="tbname">TableName</param>
public static void TableToExcel(HttpResponse Response, String excel, DataTable tb, String tbname)
{
try
{
OleDbConnection connex = GetConnFromExcel(excel); //获取到excel文件的oledb连接
connex.Open();
#region 生成Excel文件
String ct = "CREATE TABLE " + tbname + " ("; //以下生成一个sql命令向excel中插入一个表
foreach (DataColumn clmn in tb.Columns)
{
switch (clmn.DataType.Name) //根据不同数据类型分别处理
{
case "Decimal":
ct += clmn.ColumnName + " Decimal,";
break;
case "Double":
ct += clmn.ColumnName + " Double,";
break;
case "DateTime":
ct += clmn.ColumnName + " String,";
break;
default:
ct += clmn.ColumnName + " Text,";
break;
}
}
ct = ct.Substring(0, ct.Length - 1) + ")";
OleDbCommand cmd1 = new OleDbCommand(ct, connex);
cmd1.ExecuteNonQuery(); //向excel中插入一个表
System.Threading.Thread.Sleep(5); //文件被创建后保证能够正确读写,睡眠5毫秒。
foreach (DataRow r in tb.Rows) //下面向excel中一行一行写入数据
{
string fs = "", vs = "";
foreach (DataColumn clmn in tb.Columns)
{
fs += clmn.ColumnName + ",";
if (r[clmn.ColumnName] == DBNull.Value)
{
vs += "null,";
continue;
}
switch (clmn.DataType.Name) //根据不同数据类型分别处理
{
case "Decimal":
vs += ((decimal)r[clmn.ColumnName]).ToString("0.00") + ",";
break;
case "Double":
vs += ((double)r[clmn.ColumnName]).ToString("0.00") + ",";
break;
case "DateTime":
vs += "'" + ((DateTime)r[clmn.ColumnName]).ToShortDateString() + "',";
break;
default:
vs += "'" + ReplaceSqlInverted(r[clmn.ColumnName].ToString()) + "',";
break;
}
}
string sqlstr = "insert into [" + tbname + "$] (" + fs.Substring(0, fs.Length - 1) + ") values (" + vs.Substring(0, vs.Length - 1) + ")";
OleDbCommand cmd = new OleDbCommand(sqlstr, connex);
cmd.ExecuteNonQuery(); //向excel中插入数据
System.Threading.Thread.Sleep(1); //保证数据能够正确写入,睡眠1毫秒。
}
connex.Close();
System.Threading.Thread.Sleep(5); //保证文件正确关闭,睡眠5毫秒。
#endregion OutFile(Response, excel); //下载文件
}
catch (System.Threading.ThreadAbortException thex)
{
ApplicationLog.WriteError(thex.ToString());
}
catch (Exception ex)
{
ApplicationLog.WriteError(ex.ToString());
throw ex;
}
} /// <summary>
/// 文件下载,仅供Excel文件导出使用。
/// </summary>
/// <param name="Response"></param>
/// <param name="upfilepath"></param>
private static void OutFile(HttpResponse Response, String upfilepath)
{
try
{
System.IO.FileInfo fi = new System.IO.FileInfo(upfilepath);
//Response.Clear();
Response.Buffer = false;
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.HtmlDecode(upfilepath.Substring(upfilepath.LastIndexOf(@"\") + 1)));
Response.AppendHeader("Content-Length", fi.Length.ToString());
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentType = "application/ms-excel"; //设置输出文件类型为excel文件。
Response.WriteFile(upfilepath);
System.IO.File.Delete(upfilepath);
Response.Flush();
Response.End();
//Response.Write("<script>window.close()</script>");
}
catch (Exception ex)
{
ApplicationLog.WriteError(ex.ToString());
}
}