将数据导入到Excel和Word中

来源:互联网 发布:水泥销售软件 编辑:程序博客网 时间:2024/04/29 06:59
 
导入Excel方法一:(该方法要引入两个模板,MyExcel.xls和MyTemplate.xls。要用到office组件。
using Excel;
using System.Diagnostics;
 
//打印按钮。
 protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
    //判断Gridview是否为空。如果是空,则返回。
        if (this.gdviewDeptExecute.Rows.Count <= 0)
        {
            return;
        }
  
       //定义一个数据集。获得绑定Gridview的值。
        DataSet printDS = new DataSet();
        printDS = car.LoadAffirmInfo(); --绑定gridview时调用的方法。
      
       //定义一个Excel的应用程序。
        Excel.Application oExcel = new Application();
        Workbooks oBooks;
        Workbook oBook;
        Sheets oSheets;
        Worksheet oSheet;
        Range oCells;
 
        //定义两个字符串。
        string sFile, sTemplate;
        //定义一个字符串来获取请求应用程序的路径。
        string app = Server.MapPath(Request.ApplicationPath);
        //新建一个数据表
        System.Data.DataTable dt = printDS.Tables[0];
 
        //两个字符串所用的Excel的路径。
        sFile = app + "//MyExcel.xls";
        sTemplate = app + "//MyTemplate.xls";
 
        oExcel.Visible = false;
        oExcel.DisplayAlerts = false;
        //定义一个新的工作簿
        oBooks = oExcel.Workbooks;
        oBooks.Open(sTemplate, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        oBook = oBooks.get_Item(1);
        oSheets = oBook.Worksheets;
        oSheet = (Worksheet)oSheets.get_Item(1);
        //命名该sheet
        oSheet.Name = "Sheet1";
 
        oCells = oSheet.Cells;
 
        //调用方法dumpData.
        DumpData(dt, oCells);
 
        //定义一个工作薄的字体,及字体大小等。
        oSheet.get_Range("A1", "D1").Font.Name = "宋体";
        oSheet.get_Range("A1", "D1").Font.Size = 14;
        oSheet.get_Range("A1", "D1").Borders.LineStyle = 1;
 
        //保存
        oSheet.SaveAs(sFile, Excel.XlFileFormat.xlTemplate, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing);
        oBook.Close(false, Type.Missing, Type.Missing);
        //退出Excel, 并且释放调用的COM资源
        oExcel.Quit();
 
        //////////////////////////////////////////////////////////
        //显示下载
        string str = "<script type='text/javascript'>window.open('/Web/MyExcel.xls','','toolbar=no, menubar=no, scrollbars=no, resizable=yes, location=no, status=no');</script>";
        this.RegisterClientScriptBlock(Guid.NewGuid().ToString(), str);
 
        //gridview的数据源。并将数据进行绑定,gdviewDeptExecute是gridview的ID.
        gdviewDeptExecute.DataSource = printDS;
        gdviewDeptExecute.DataBind();
    }
    //把Table的数据导入到Excel
    private void DumpData(System.Data.DataTable dt, Excel.Range oCells)
    {
        //给Excel定位。
        oCells[1, 2] = "车辆统计列表";
        //先导入表头
        oCells[3, 2] = "申请部门";
        oCells[3, 3] = "车辆型号";
        oCells[3, 4] = "车牌号";
        oCells[3, 5] = "出发日期";
        oCells[3, 6] = "归还日期";
      
        //再导入表数据
        DataRow dr;
        for (int iRow = 1; iRow < dt.Rows.Count; iRow++)
        {
            dr = dt.Rows[iRow];
            for (int iCol = 1; iCol < dr.ItemArray.Length; iCol++)
            {
                oCells[iRow + 4, iCol + 1] = dr.ItemArray[iCol].ToString();
              
            }
        }
 
       
    }
    private void KillProcess(string processName)
    {
        System.Diagnostics.Process myproc = new System.Diagnostics.Process();
        //得到所有打开的进程
        try
        {
            foreach (Process thisproc in Process.GetProcessesByName(processName))
            {
                if (!thisproc.CloseMainWindow())
                {
                    thisproc.Kill();
                }
            }
        }
        catch (Exception Exc)
        {
            throw new Exception("", Exc);
        }
}
 
导入Excel方法二:(该方法适用于Excel也适用Word)
using Excel;
using System.Diagnostics;
 
protected void btnExcel_Click(object sender, EventArgs e)
    {
        //把DataGrid中的数据导出到Excel
        DataSet1 dsGrid = RunDataSet(txtSelect.Text);
        //如果是将数据导入到Excel中,可以将下面方法的名称设为:.xls 如果要将数据导入到Word中,将文件名改为.Doc即可。 
    CreateExcel(dsGrid, "defExcel.xls");
}
public void CreateExcel(DataSet ds,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("");
 
        //取得数据表各列标题,各标题之间以/t分割,最后一个列标题后加回车符
        for (i = 0; i < dt.Columns.Count-1; i++)
        {
            colHeaders += DataGrid1.Columns[i].HeaderText + "/t";
        }
        colHeaders +=DataGrid1.Columns[i].HeaderText +"/n";
 
        //向HTTP输出流中写入取得的数据信息
        resp.Write(colHeaders);
        //逐行处理数据 
        foreach(DataRow row in myRow)
        {
            //在当前行中,逐列获得数据,数据之间以/t分割,结束时加回车符/n
            for(i=0;i<row.ItemArray.Length-1;i++)
            {
                ls_item +=row[i].ToString() + "/t";
            }
            ls_item += row[i].ToString() +"/n";
            //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据   
            resp.Write(ls_item);
            ls_item="";
        }
 
        //写缓冲区中的数据到HTTP头文件中
        resp.End();
    }
// PosID是界面上的一个文本框值,如果文本框中没有值,查找所有的记录,如果文本框中输入的值 ,将按输入条件进行查找。
//定义一个数据集。
private DataSet1 RunDataSet(string PosID)
{   
//建立数据库连接
        SqlConnection conn = new SqlConnection("Server=(local);DataBase=pubs;UID=sa;PWD=");
        //打开连接;
        conn.Open();
 
        string conStr;
        //根据传进来的值进行判断,如果值为空:查询所有的数据;如果不为空,将根据传进来的值进行查询数据。
        if (PosID.Length==0)
            conStr = "select d.DeptName, p.PosID, p.PosType, p.PosTelNo, p.PosPlace, case Useflg when 0 then '不正常' when 1 then '正常' end as 'UseFlg' from CRPosInfo p, CRDeptInfo d where p.deptID=d.deptID";
        else
            conStr = "select d.DeptName, p.PosID, p.PosType, p.PosTelNo, p.PosPlace, case Useflg when 0 then '不正常' when 1 then '正常' end as 'UseFlg' from CRPosInfo p, CRDeptInfo d where p.deptID=d.deptID and PosID like '" + PosID + "%'";
 
        SqlDataAdapter da = new SqlDataAdapter(conStr, conn);
        DataSet1 ds = new DataSet1();
        da.Fill(ds, "CRPosInfo");
        conn.Close();
        //关闭连接,返回数据集。
        return ds;
    }
 
 
原创粉丝点击