Excel报表方法

using Excel = Microsoft.Office.Interop.Excel;

 private void Exceltest()
        {
            //在创建Excel Application前先将已经打开的Excel资源释放掉
            EndExcelProcesse();

            //指定模板文件
            string targetFile = Server.MapPath("~/Resource/Exercise/1/Nomalr.xlsx");
            //打开复制后的文件X
            object missing = Missing.Value;
            Excel.Application myExcel = new Excel.Application();

            //打开模板文件
            myExcel.Application.Workbooks.Open(targetFile, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);

            //选中有数据的Cells

            Excel._Worksheet mySheet = (Excel._Worksheet)myExcel.Worksheets[1];
            Excel.Range r = mySheet.get_Range(mySheet.Cells[1, 1], mySheet.Cells[dt.Rows.Count + 2, dt.Columns.Count]);
            r.Select();

            //不单独显示Excel,最后在IE中显示
            myExcel.Visible = false;

            //第一行为报表的标题
            myExcel.Cells[1, 1] = "用模板导出的报表";

            //逐行写入数据,数组中第一行为报表的列标题
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                myExcel.Cells[2, 1 + i] = dt.Columns[i].Caption; ;
            }

            //为报表填充数据并设置显示上下标格式
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    myExcel.Cells[3 + i, 1 + j] = dt.Rows[i][j];
                }
                mySheet.Columns.AutoFit();
            }

            myExcel.Workbooks[1].RefreshAll();
            Excel.Workbook myBook = myExcel.Workbooks[1];
            //myBook.Save();
            myBook.SaveCopyAs(Server.MapPath("~/Resource/Exercise/1/" + Session["Flag"].ToString() + ".xlsx"));
           
            myBook.Close(false, missing, missing);
            myBook = null;
            myExcel.Quit();
            myExcel = null;
            GC.Collect();
        }

        protected void EndExcelProcesse()
        {
            try
            {
                Process[] myProcesses = Process.GetProcessesByName("excel");
                foreach (Process instance in myProcesses)
                {
                    instance.Kill();
                }
            }
            catch
            {
            }
        }

posted @ 2013-05-20 23:22  Trilyn  阅读(146)  评论(0)    收藏  举报