利用模板导出数据到Excel中

来源:互联网 发布:英国 欧洲大陆 知乎 编辑:程序博客网 时间:2024/06/04 19:38

可以自定义模板,使用挺方便的。

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;
        }
    }
}
原创粉丝点击