成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

DataGrid內容導出標準的Excel格式文件

2010-08-28 10:51:35來源:西部e網作者:

前言:

       用傳統的導出方法:只是將DataGrid信息用html輸出,文件名后輟是.xls而已。如果想將這個方法導入到Sql Server 中,會提示出錯。因為它不是標準的Excel格式文件。

       用本例中的導出方法:會輸出標準的Excel格式文件,非常穩定,不會死鎖Excel進程,支持中文文件名,支持表頭導出,支持大多數數據庫導入。


實現算法:

   利用Excel組件將DataGrid控件內容生成Excel臨時文件,并存放在服務器上,并用Response方法將生成的Excel文件下載到客戶端,再將生成的臨時文件刪除。

具體步驟:

1.在項目中引用Excel組件
Interop.Excel.dll 文件版本1.3.0.0

2.項目中應有一個目錄(本例中Template目錄),以便存放Excel文件(名字自己定)

3.導入方法類

以下是代碼片段:

        /// <summary>
        /// 將DataGrid中數據導出至Excel,生成標準的Excel文件
        /// </summary>
        /// <param name="grid">DataGrid控件ID</param>
        /// <param name="fileName">導出文件名</param>
        protected void ExportToExcel(System.Web.UI.WebControls.DataGrid grid,string fileName)
        {
            string templetFilePath;
            templetFilePath = Server.MapPath("../").ToString() + @"Template\";
            object missing = Missing.Value;
            Excel.Application app;
            Excel.Workbook workBook;
            Excel.Worksheet workSheet;
            Excel.Range range;


            //創建一個Application對象并使其不可見
            app = new Excel.ApplicationClass();
            app.Visible=false;

           
            //打開模板文件,得到WorkBook對象
            //workBook = app.Workbooks.Open(templetFilePath + "SuperTemplet.xls", missing, missing, missing, missing, missing,
            //    missing, missing, missing, missing, missing, missing, missing);

            //創建一個WorkBook對象
            workBook = app.Workbooks.Add(missing);
            //得到WorkSheet對象
            workSheet = (Excel.Worksheet)workBook.Sheets.get_Item(1);

            int rowCount = grid.Items.Count + 1;  //DataTable行數+GirdHead
            int colCount = grid.Columns.Count; //DataTable列數

            //利用二維數組批量寫入
            string[,] arr = new string[rowCount, colCount];

            for (int j = 0; j < rowCount; j++)
            {
                for (int k = 0; k < colCount; k++)
                {
                    if (j == 0)
                    {
                        arr[j, k] = grid.Columns[k].HeaderText;

                    }
                    else
                    {
                        arr[j, k] = grid.Items[j - 1].Cells[k].Text.ToString();
                    }
                }
            }

            range = (Excel.Range)workSheet.Cells[1, 1]; //寫入Exel的坐標
            range = range.get_Resize(rowCount, colCount);
            range.Value = arr;
           
            workBook.SaveAs(templetFilePath + fileName, missing, missing, missing, missing, missing,Excel.XlSaveAsAccessMode.xlExclusive, missing, missing, missing, missing);

            if (workBook.Saved)
            {
                workBook.Close(null, null, null);
                app.Workbooks.Close();
                app.Quit();
            }

            if (range != null)
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
                range = null;
            }

            if (workSheet != null)
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
                workSheet = null;
            }
            if (workBook != null)
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
                workBook = null;
            }
            if (app != null)
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
                app = null;
            }

            GC.Collect();//強制代碼垃圾回收
           
            //下載文件
            DownLoadFile(templetFilePath,fileName);
        }
 

4.下載文件方法類

以下是代碼片段:

 /// <summary>
        /// 下載服務器文件到客戶端
        /// </summary>
        /// <param name="_FilePath">文件路徑</param>
        /// <param name="_FileName">文件名</param>
        /// <returns>返回 bool型</returns>
  private  bool DownLoadFile(string _FilePath,string _FileName)
  {
   try
   {
                System.IO.FileStream fs = System.IO.File.OpenRead(_FilePath+_FileName);
                byte[] FileData = new byte[fs.Length];
                fs.Read(FileData, 0, (int)fs.Length);
                Response.Clear();
                Response.AddHeader("Content-Type", "application/ms-excel");
                string FileName = System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(_FileName));
                Response.AddHeader("Content-Disposition", "inline;filename=" + System.Convert.ToChar(34) + FileName + System.Convert.ToChar(34));
                Response.AddHeader("Content-Length", fs.Length.ToString());
                Response.BinaryWrite(FileData);
                fs.Close();
                //刪除服務器臨時文件
                System.IO.File.Delete(_FilePath+_FileName);
                Response.Flush();
                Response.End();

    return true;
   }
   catch(Exception ex)
   {
                ex.Message.ToString();
    return false;
   }
  }
 

5.應用方法

以下是代碼片段:

protected void btnExportToExcel_Click(object sender, EventArgs e)
        {
           
            this.ExportToExcel(grdBudget,"中國石油大港油田油管廠發料記錄.xls");//grdBudget 是DataGrid的ID
      
        }

 

關鍵詞:VS.NET

贊助商鏈接:

主站蜘蛛池模板: 成安县| 崇仁县| 台山市| 金平| 长寿区| 栖霞市| 西青区| 年辖:市辖区| 贺兰县| 泽普县| 高碑店市| 临夏市| 彰武县| 宣城市| 兴山县| 三亚市| 紫云| 桂东县| 册亨县| 资源县| 深水埗区| 凯里市| 杨浦区| 图们市| 平果县| 斗六市| 璧山县| 会昌县| 德钦县| 鹤岗市| 勃利县| 阿拉善盟| 江北区| 山东省| 宁强县| 崇明县| 昭苏县| 无极县| 色达县| 沙坪坝区| 贡觉县|