最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c#執(zhí)行excel宏模版的方法

 更新時(shí)間:2014年01月20日 16:30:46   作者:  
這篇文章主要介紹了c#執(zhí)行excel宏模版的方法,導(dǎo)出Excel模版的代碼如下,大家參考使用吧

在項(xiàng)目中如果涉及到用Excel開(kāi)發(fā)的報(bào)表模版來(lái)導(dǎo)出報(bào)表數(shù)據(jù)的話,一般都是在Excel報(bào)表中使用VBA做成宏來(lái)進(jìn)行調(diào)用。即先使用Excel自帶的VBA開(kāi)發(fā)好報(bào)表模版,然后再將模版程序放在固定目錄下,在管理軟件中對(duì)這些報(bào)表模版進(jìn)行調(diào)用。這樣就不需要使用其它報(bào)表工具來(lái)進(jìn)行開(kāi)發(fā)了,因?yàn)镋xcel功能比較強(qiáng)大,一般的應(yīng)用的報(bào)表用它來(lái)開(kāi)發(fā)綽綽有余了。而且這樣開(kāi)發(fā)的成本也很低,不需要再購(gòu)買其它專業(yè)的報(bào)表開(kāi)發(fā)軟件直接使用Office開(kāi)發(fā)即可。使用Excel開(kāi)發(fā)的宏模版當(dāng)然要使用上層程序來(lái)調(diào)用宏模版了。我以前在工作中就開(kāi)發(fā)過(guò)Excel模版,并使用C#程序調(diào)用過(guò)這些模版程序。規(guī)則是首先將報(bào)表需要的數(shù)據(jù)填沖到DataTable或者DataSet中,然后將DataTable或者DataSet中數(shù)據(jù)導(dǎo)出Excel中。
現(xiàn)提供導(dǎo)出Excel模版的代碼如下:

復(fù)制代碼 代碼如下:

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
       //將報(bào)表所需的主數(shù)據(jù)放入dtHeader,明細(xì)數(shù)據(jù)放入dtDetail中,調(diào)用的模版名稱為strTemplateFileName,導(dǎo)出的報(bào)表名稱為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分別對(duì)應(yīng)模版文件中的Header和Detail兩個(gè)Sheet頁(yè),這2個(gè)Sheet是專門用來(lái)存放明主數(shù)據(jù)或者明細(xì)數(shù)據(jù)的。
                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;
        }
        //將報(bào)表所需的主數(shù)據(jù)放入dtHeader,明細(xì)數(shù)據(jù)放入dtDetail中,調(diào)用的模版名稱為strTemplateFileName,導(dǎo)出的報(bào)表名稱為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.注意這里的沒(méi)有寫明對(duì)應(yīng)模版文件中Sheet頁(yè),但是指定了dsdata.Tables[i].TableName為Sheet頁(yè)的名字,這樣方便靈活設(shè)置,而且這樣可以有多個(gè)Sheet是專門用來(lái)存放明主數(shù)據(jù)或者明細(xì)數(shù)據(jù)的。
                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來(lái)導(dǎo)出報(bào)表時(shí),在服務(wù)器上的Excel進(jìn)程容易死掉,導(dǎo)致資源無(wú)法釋放,因此需要使用這個(gè)方法來(lái)釋放死掉的進(jìn)程
        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;
            }
        }
}

相關(guān)文章

最新評(píng)論

无为县| 绍兴市| 邳州市| 沁源县| 玛多县| 河津市| 柏乡县| 潞西市| 海口市| 广安市| 湖南省| 民和| 长沙县| 思南县| 巴里| 乐平市| 海南省| 和田县| 边坝县| 佛山市| 边坝县| 抚顺市| 泽州县| 蓬溪县| 吴川市| 隆林| 龙里县| 淄博市| 广水市| 石台县| 云安县| 石家庄市| 凉城县| 隆子县| 平泉县| 惠州市| 莫力| 新化县| 和田县| 呈贡县| 甘孜县|