您的位置:首页 > 其它

利用模板导出数据到Excel中

2012-03-31 17:36 253 查看
可以自定义模板,使用挺方便的。

using System;

using System.Configuration;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

using System.Reflection; //-------------------------------------------------------------需要添加引用 -!!!!-----------------

//------------------------------------需要添加 Microsoft.Office.Interop.Excel引用 。-----------------

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

//if (!IsPostBack)

{

GV1.DataSource = madeData();

GV1.DataBind();

}

}

//生成DataView的数据源。

protected DataTable madeData()

{

DataTable dt = new DataTable();

dt.Columns.Add("姓名",typeof(string));

dt.Columns.Add("学号", typeof(string));

DataRow dr = dt.NewRow();

dr["姓名"] = "张三";

dr["学号"] = "20110101";

dt.Rows.Add(dr);

dr = dt.NewRow();

dr["姓名"] = "李四";

dr["学号"] = "20110102";

dt.Rows.Add(dr);

return dt;

}

protected void Button1_Click(object sender, EventArgs e)

{

//需要添加 Microsoft.Office.Interop.Excel引用 。----------------------------------------------------------!!!!!!!

Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();

if (app == null)

{

Response.Write("服务器上缺少Excel组件,需要安装Office软件。");

return;

}

app.Visible = false;

app.UserControl = true;

Microsoft.Office.Interop.Excel.Workbooks workbooks = app.Workbooks;

Microsoft.Office.Interop.Excel._Workbook workbook = workbooks.Add(Server.MapPath("~/ExcelTemplet/Info.xlsx")); //加载模板

Microsoft.Office.Interop.Excel.Sheets sheets = workbook.Sheets;

Microsoft.Office.Interop.Excel._Worksheet worksheet = (Microsoft.Office.Interop.Excel._Worksheet)sheets.get_Item(1); //第一个工作薄。

if (worksheet == null)

return; //工作薄中没有工作表.

//1、获取数据。

DataTable dt = (DataTable)GV1.DataSource; //--------------------------------------------------根据实际需要修改--------------!!!!!

int rowCount = dt.Rows.Count;

if (rowCount < 1)

return; //没有数据,不需要导出。

//2、写入数据,Excel索引从1开始。

for( int i=1; i<=rowCount; i++)

{

int row_ = 2 + i; //Excel模板上表头和标题行占了2行。---------------------------------------根据实际模板需要修改------------------!!!!

int dt_row = i - 1; //dataTable的行是从0开始的。

//worksheet.Cells[excelRow, 1] = dt.Rows[i]["姓名"].ToString();

worksheet.Cells[row_, 1] = i.ToString();

worksheet.Cells[row_, 2] = dt.Rows[dt_row]["姓名"].ToString();

worksheet.Cells[row_, 3] = dt.Rows[dt_row]["学号"].ToString();

}

//调整Excel的样式。

Microsoft.Office.Interop.Excel.Range rg = worksheet.Cells.get_Range("A3",worksheet.Cells[rowCount+2,8]);

rg.Borders.LineStyle = 1; //单元格加边框。

worksheet.Columns.AutoFit(); //自动调整列宽。

//3、保存生成的Excel文件。

//Missing 在System.Reflection命名空间下。

string savaPath = "~/ExcelTemplet/Temp/T1_"+DateTime.Now.ToString("yyyyMMddHHmmss")+".xlsx";

workbook.SaveAs(Server.MapPath(savaPath), Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

//4、按顺序释放资源。

NAR(worksheet);

NAR(sheets);

NAR(workbook);

NAR(workbooks);

app.Quit();

NAR(app);

Response.Redirect(savaPath);

}

private void NAR(object o)

{

try

{

System.Runtime.InteropServices.Marshal.ReleaseComObject(o);

}

catch

{ }

finally

{

o = null;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: