亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

c#執行excel宏模版的方法

2020-01-24 02:51:46
字體:
來源:轉載
供稿:網友

在項目中如果涉及到用Excel開發的報表模版來導出報表數據的話,一般都是在Excel報表中使用VBA做成宏來進行調用。即先使用Excel自帶的VBA開發好報表模版,然后再將模版程序放在固定目錄下,在管理軟件中對這些報表模版進行調用。這樣就不需要使用其它報表工具來進行開發了,因為Excel功能比較強大,一般的應用的報表用它來開發綽綽有余了。而且這樣開發的成本也很低,不需要再購買其它專業的報表開發軟件直接使用Office開發即可。使用Excel開發的宏模版當然要使用上層程序來調用宏模版了。我以前在工作中就開發過Excel模版,并使用C#程序調用過這些模版程序。規則是首先將報表需要的數據填沖到DataTable或者DataSet中,然后將DataTable或者DataSet中數據導出Excel中。
現提供導出Excel模版的代碼如下:

復制代碼 代碼如下:

namespace ExcelTest
{
    public class ExelTemplate
    {
        private static Excel.Application ExcelApp;//Define a Excel Application object
        private static Excel._Workbook ExcelWB;//define a Excel workbook object
        private static Excel._Worksheet ExcelWS;//define a Excel workbook worksheet
       //將報表所需的主數據放入dtHeader,明細數據放入dtDetail中,調用的模版名稱為strTemplateFileName,導出的報表名稱為strOutFileName
        public static bool FillContent(string strTemplateFileName, string strOutFileName, System.Data.DataTable dtHeader, System.Data.DataTable dtDetail)
        {
            bool flag = true;
            FileInfo fileInfo = new FileInfo(strTemplateFileName);
            System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
            try
            {
                //Start Excel and get Application object.               
                ExcelApp = new Excel.Application();
                ExcelApp.Visible  = false;

                //Get a new workbook.
                ExcelWB = (Excel._Workbook)(ExcelApp.Workbooks.Add(strTemplateFileName));

                //Fill content.注意這里的Header和Detail分別對應模版文件中的Header和Detail兩個Sheet頁,這2個Sheet是專門用來存放明主數據或者明細數據的。
                if (!FillWorksheet("Header", dtHeader)) return false;
                if (!FillWorksheet("Detail", dtDetail)) return false;
                //Run macro.

                ExcelApp.Run("SetData", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

                ExcelApp.DisplayAlerts = false;
                //=========================================================================================================
                //Delete Header and Detail.
                //((Excel._Worksheet)ExcelWB.Sheets["Header Information"]).Delete();              
                //((Excel._Worksheet)ExcelWB.Sheets["Detail Information"]).Delete();
 

                //=========================================================================================================
                ExcelApp.DisplayAlerts = true;
                //Delete old file.
                File.Delete(strOutFileName);
                //Save excel file.
                ExcelWB.SaveAs(strOutFileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, XlSaveAsAccessMode.xlExclusive, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

                // Quit Excel.
                ExcelWB.Close(false, strOutFileName, Missing.Value);//*******************            
                MarshalReleaseComObject(ExcelWB);
                ExcelApp.Quit();

               
                //Kill excel application.
                //KillProcess("EXCEL");//******************

            }
            catch (Exception ex)
            {
                throw ex;  
                flag = false;
            }
            finally
            {
                MarshalReleaseComObject(ExcelApp);
                GC.Collect();
            }
            return flag;
        }
        //將報表所需的主數據放入dtHeader,明細數據放入dtDetail中,調用的模版名稱為strTemplateFileName,導出的報表名稱為strOutFileName
        public static bool FillContent(string strTemplateFileName, string strOutFileName, System.Data.DataSet dsdata)
        {
            bool flag = true;
            FileInfo fileInfo = new FileInfo(strTemplateFileName);
            System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
            try
            {
                //Start Excel and get Application object.               
                ExcelApp = new Excel.Application();
                ExcelApp.Visible = false;
                //Get a new workbook.
                 ExcelWB = (Excel._Workbook)(ExcelApp.Workbooks.Add(strTemplateFileName));
                 //Fill content.
                //if (!FillWorksheet("Header", dtHeader)) return false;
                //if (!FillWorksheet("Detail", dtDetail)) return false;
                //Fill content.注意這里的沒有寫明對應模版文件中Sheet頁,但是指定了dsdata.Tables[i].TableName為Sheet頁的名字,這樣方便靈活設置,而且這樣可以有多個Sheet是專門用來存放明主數據或者明細數據的。
                for (int i = 0; i < dsdata.Tables.Count; i++)
                {
                    if (!FillWorksheet(dsdata.Tables[i].TableName, dsdata.Tables[i]))
                        return false;
                }
                //Run macro.

                ExcelApp.Run("SetData", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

                ExcelApp.DisplayAlerts = false;
                //=========================================================================================================
                //Delete Header and Detail.
                //((Excel._Worksheet)ExcelWB.Sheets["Header Information"]).Delete();              
                //((Excel._Worksheet)ExcelWB.Sheets["Detail Information"]).Delete();
 

                //=========================================================================================================
                ExcelApp.DisplayAlerts = true;
                //Delete old file.
                File.Delete(strOutFileName);
                //Save excel file.

                ExcelWB.SaveAs(strOutFileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, XlSaveAsAccessMode.xlExclusive, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

                // Quit Excel.
                ExcelWB.Close(false, strOutFileName, Missing.Value);//*******************            
                MarshalReleaseComObject(ExcelWB);
                ExcelApp.Quit();

            }
            catch (Exception ex)
            {
                throw ex;
                flag = false;
            }
            finally
            {
                MarshalReleaseComObject(ExcelApp);
                GC.Collect();
            }
            return flag;
        }
        //使用Excel來導出報表時,在服務器上的Excel進程容易死掉,導致資源無法釋放,因此需要使用這個方法來釋放死掉的進程
        private static void MarshalReleaseComObject(object objCom)
        {
            try
            {
                int i = 1;
                if (objCom != null && System.Runtime.InteropServices.Marshal.IsComObject(objCom))
                {
                    do
                    {
                        i = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom);
                    } while (i > 0);
                }
            }
            finally
            {
                objCom = null;
            }
        }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
深夜福利91大全| 欧美久久久精品| 亚洲mm色国产网站| 欧美国产乱视频| 中文字幕日韩欧美在线| 久久全球大尺度高清视频| 2019中文字幕在线免费观看| 久久精品国产亚洲7777| 久久久久久中文| 精品丝袜一区二区三区| 热门国产精品亚洲第一区在线| 91精品啪在线观看麻豆免费| 国产日韩欧美日韩| 亚洲免费伊人电影在线观看av| 欧美激情一区二区三级高清视频| 欧美性jizz18性欧美| 欧美国产日韩一区二区三区| 精品视频在线播放| 亚洲成人网在线| 国产99久久精品一区二区 夜夜躁日日躁| 国产美女精品视频免费观看| 九九热r在线视频精品| 日本欧美黄网站| 欧美亚洲成人免费| 国产亚洲精品美女久久久久| 国产精品黄色av| 欧美精品在线免费观看| 亚洲国产日韩欧美在线动漫| 国产视频久久久久| 国产视频福利一区| 91国内揄拍国内精品对白| 亚洲美女动态图120秒| 欧美疯狂性受xxxxx另类| 久久精视频免费在线久久完整在线看| 国产区亚洲区欧美区| 精品国偷自产在线| 欧美疯狂xxxx大交乱88av| 亚洲欧美日韩一区在线| 国产精品丝袜久久久久久高清| 亚洲视频在线看| 亚洲国产精品电影在线观看| 成人免费网站在线观看| 午夜精品一区二区三区av| 国产欧美一区二区三区久久| 久久亚洲精品一区二区| 亚洲性猛交xxxxwww| 欧美激情xxxx| 国产精品成人va在线观看| 欧美性极品少妇精品网站| 久久综合电影一区| 日韩三级影视基地| 中文字幕成人精品久久不卡| 日韩在线国产精品| 日韩av手机在线观看| 亚洲精品日韩欧美| 在线观看欧美成人| 国产精品88a∨| 国产精品第一页在线| 狠狠色香婷婷久久亚洲精品| 国产精品91在线观看| 日韩精品一区二区三区第95| 影音先锋日韩有码| 久久频这里精品99香蕉| 综合网日日天干夜夜久久| 久久免费国产精品1| 欧美成人免费小视频| 欧美一区二区三区免费视| 精品久久久久久久久久久| 久久久人成影片一区二区三区| 国产精品一区二区久久精品| 91天堂在线观看| 久久久女人电视剧免费播放下载| 国产日韩中文字幕| 亚洲国产精品人人爽夜夜爽| 国产精品美女午夜av| 日韩美女在线播放| 亚洲人成电影网站色www| 91成人在线播放| 欧美三级欧美成人高清www| 亚洲视频日韩精品| 国产剧情久久久久久| 国产日韩av在线| 欧美精品在线看| 国产999精品久久久影片官网| 成人免费午夜电影| 成人精品视频久久久久| 91香蕉嫩草神马影院在线观看| 亚洲成**性毛茸茸| 欧美日韩成人在线播放| 热99精品里视频精品| 成人有码视频在线播放| 精品久久久国产精品999| 亚洲香蕉av在线一区二区三区| 国产日韩欧美影视| 情事1991在线| 亚洲精品免费av| 中文字幕久久久| 日韩欧美在线免费| 国产色视频一区| 日韩免费av片在线观看| 日韩国产在线播放| 亚洲网站在线播放| 久久久久久久成人| 欧美一区二区三区艳史| 国产主播喷水一区二区| 国模视频一区二区| 成人观看高清在线观看免费| 国产精品a久久久久久| 成人激情在线播放| 久久视频在线免费观看| 成人精品一区二区三区电影黑人| 日韩精品在线播放| 在线播放国产一区二区三区| 亚洲福利小视频| 国产精品视频大全| 日韩激情在线视频| 亚洲国产成人精品电影| 亚洲欧美一区二区三区久久| 久久91亚洲人成电影网站| 亚洲石原莉奈一区二区在线观看| 亚洲精品免费一区二区三区| 亚洲一区二区中文字幕| 亚洲自拍欧美色图| 亚洲精品天天看| 456亚洲影院| 欧美一级电影免费在线观看| 亚洲毛片在线观看| 欧美午夜宅男影院在线观看| 欧美猛交ⅹxxx乱大交视频| 欧美国产日韩二区| 久久久亚洲影院| 午夜精品久久久久久久99热| 伊人伊人伊人久久| 欧美精品亚州精品| 国产精品久久久久aaaa九色| 国产欧美日韩91| 亚洲国产日韩欧美在线99| 黑人巨大精品欧美一区二区| 亚洲人成在线观看网站高清| 亚洲精品之草原avav久久| 亚洲高清福利视频| 91久久在线视频| 亚洲男人7777| 97久久精品国产| 亚洲综合大片69999| 国产丝袜一区二区三区| 国产成人精品日本亚洲| 欧美日韩性视频在线| 久久精品国产亚洲精品2020| 国产精品成人av性教育| 亚洲精品国产精品国自产观看浪潮| 久久伊人91精品综合网站| 精品国产乱码久久久久酒店| 久久久精品视频成人| 66m—66摸成人免费视频| 国产精品久久久久久久av电影| 久久久噜噜噜久久中文字免| 欧美午夜精品伦理| 亚洲人线精品午夜| 热久久免费国产视频| 国产经典一区二区| 欧美疯狂xxxx大交乱88av| 日韩亚洲国产中文字幕| 亚洲va欧美va在线观看|