久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

將DataTable 導(dǎo)出到Excel

 mybook564 2013-09-22
     項目中需要將DataTable導(dǎo)出到Excel文件,。 到網(wǎng)上查了查相關(guān)的資料,, 決定采用托管Excel 來實現(xiàn),  很快就完成了,。
    正在得意中, 突然發(fā)現(xiàn)Excel進程無法釋放,。 于是深入網(wǎng)絡(luò)查找答案,一會兒讓我找到了一個killExcelProcess() 的方法 它通過調(diào)用Win32 API
    在Excel 退出 之后強行殺掉Excel.exe進程,。 在本機測試無誤, 但是一放到服務(wù)器上 ,, 就出現(xiàn)權(quán)限問題,。 只好想別的辦法了。
    拜讀網(wǎng)上達人的帖子,一個一個 的試驗,, 花了半天的時間總算搞定,。
    下面是我的代碼。 注意看我的注釋,。
復(fù)制代碼
public static bool ExportToExcel(DataTable table, string excelName, int[] columnIndexs, string[] columnHeads)
    {
        #region 將方法中用到的所有Excel變量聲明在方法最開始,,以便最后統(tǒng)一回收。
         Excel.ApplicationClass oExcel = new Excel.ApplicationClass();
        Excel.Workbook obook = null;
        Excel.Worksheet oSheet = null;
        Excel.Range range = null;
        #endregion
        try
        {
            obook = oExcel.Workbooks.Add("");
            oSheet = (Excel.Worksheet)obook.Worksheets[1];
            int rCount, cCount;
            rCount = table.Rows.Count;
            cCount = table.Columns.Count;
            object obj = System.Reflection.Missing.Value;

            if (cCount < columnIndexs.Length || cCount < columnHeads.Length)
            {
                throw new ArgumentOutOfRangeException("columnIndexs 與 columnHeads 長度必須一致,。");
            }
            for (int i = 1; i <= columnIndexs.Length; i++)
            {
                //Excel.Range = (Excel.Range)oSheet.Columns.get_Item(i, obj);  
                range = (Excel.Range)oSheet.Columns.get_Item(i, obj);
                range.NumberFormatLocal = "@";
            }
            for (int c = 0; c < columnIndexs.Length; c++)
            {
                oSheet.Cells[1, c + 1] = columnHeads[c];
                for (int r = 1; r <= rCount; r++)
                {
                    oSheet.Cells[r + 1, c + 1] = table.Rows[r - 1][columnIndexs[c]].ToString();
                }
            }
            obook.SaveCopyAs(excelName);
            //必須調(diào)用 obook.Close(),, 否則無法釋放進程。
            obook.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
            return true;
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
           // 調(diào)用System.Runtime.InteropServices.Marshal.ReleaseComObject(object) 方法釋放方法中
            
//用到的所有的Excel 變量,, 記住是所有的,。 比如說此方法中的range 對象, 就容易被遺忘,。
            
             ystem.Runtime.InteropServices.Marshal.ReleaseComObject(range);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obook);
            
            // 很多文章上都說必須調(diào)用此方法,, 但是我試過沒有調(diào)用oExcel.Quit() 的情況, 進程也能安全退出,,
             
//還是保留著吧,。
            oExcel.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel);
            // 垃圾回收是必須的。 測試如果不執(zhí)行垃圾回收,, 無法關(guān)閉Excel 進程,。
            GC.Collect();
        }
    }
復(fù)制代碼

   


人格擔(dān)保, 以上代碼在VS 2005, VS2003, 中使用EXCEL 2003  測試通過,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多