C#导出Excel后关闭进程EXCELEXE释放资源的解决方案.docx

上传人:b****8 文档编号:23571332 上传时间:2023-05-18 格式:DOCX 页数:30 大小:20.79KB
下载 相关 举报
C#导出Excel后关闭进程EXCELEXE释放资源的解决方案.docx_第1页
第1页 / 共30页
C#导出Excel后关闭进程EXCELEXE释放资源的解决方案.docx_第2页
第2页 / 共30页
C#导出Excel后关闭进程EXCELEXE释放资源的解决方案.docx_第3页
第3页 / 共30页
C#导出Excel后关闭进程EXCELEXE释放资源的解决方案.docx_第4页
第4页 / 共30页
C#导出Excel后关闭进程EXCELEXE释放资源的解决方案.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

C#导出Excel后关闭进程EXCELEXE释放资源的解决方案.docx

《C#导出Excel后关闭进程EXCELEXE释放资源的解决方案.docx》由会员分享,可在线阅读,更多相关《C#导出Excel后关闭进程EXCELEXE释放资源的解决方案.docx(30页珍藏版)》请在冰豆网上搜索。

C#导出Excel后关闭进程EXCELEXE释放资源的解决方案.docx

C#导出Excel后关闭进程EXCELEXE释放资源的解决方案

C#导出Excel后关闭进程(EXCEL.EXE)释放资源的解决方案

2009年2月3日[9,330views]发表评论阅读评论

一年前,从网上找到一些C#导出MSExcel的例子,但是都不能彻底销毁其所创建的Excel进程,典型的就是进程中的EXCEL.EXE不能关掉。

网上的解决方案大部分是kill掉所有的Excel进程,偶一直感觉不爽。

最近,做了几个月的WinForm,接触了一些进程、句柄方面的知识。

于是试着解决一下,没想到成功了,创建的Excel进程被成功Kill掉了,而其它Excel进程则相安无事。

关键代码:

publicvoidKillSpecialExcel()

        {

            try

            {

                if(m_objExcel!

=null)

                {

                    intlpdwProcessId;

                    GetWindowThreadProcessId(newIntPtr(m_objExcel.Hwnd),outlpdwProcessId);

 

                    System.Diagnostics.Process.GetProcessById(lpdwProcessId).Kill();

                }

            }

            catch(Exceptionex)

            {

                Console.WriteLine("DeleteExcelProcessError:

"+ex.Message);

            }

        }

操作生成Excel的全部代码:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

usingSystem.Reflection;

usingSystem.Runtime.InteropServices;

usingSystem.Drawing;

 

namespaceVeryCodes.Common.MyExcel

{

    ///

    ///ExcelClass的摘要说明。

    ///

    publicclassMSExcel

    {

        ///

        ///构建ExcelClass类

        ///

        publicMSExcel()

        {

            //别忘了需要添加ExcelLibrary的引用

            this.m_objExcel=newMicrosoft.Office.Interop.Excel.Application();

        }

        ///

        ///构建ExcelClass类

        ///

        ///

Excel.Application

        publicMSExcel(Microsoft.Office.Interop.Excel.ApplicationobjExcel)

        {

            this.m_objExcel=objExcel;

        }

 

        ///

        ///列标号,Excel最大列数是256

        ///

        privatestring[]ALists=newstring[]{

            "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",

            "AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK","AL","AM","AN","AO","AP","AQ","AR","AS","AT","AU","AV","AW","AX","AY","AZ",

            "BA","BB","BC","BD","BE","BF","BG","BH","BI","BJ","BK","BL","BM","BN","BO","BP","BQ","BR","BS","BT","BU","BV","BW","BX","BY","BZ",

            "CA","CB","CC","CD","CE","CF","CG","CH","CI","CJ","CK","CL","CM","CN","CO","CP","CQ","CR","CS","CT","CU","CV","CW","CX","CY","CZ",

            "DA","DB","DC","DD","DE","DF","DG","DH","DI","DJ","DK","DL","DM","DN","DO","DP","DQ","DR","DS","DT","DU","DV","DW","DX","DY","DZ",

            "EA","EB","EC","ED","EE","EF","EG","EH","EI","EJ","EK","EL","EM","EN","EO","EP","EQ","ER","ES","ET","EU","EV","EW","EX","EY","EZ",

            "FA","FB","FC","FD","FE","FF","FG","FH","FI","FJ","FK","FL","FM","FN","FO","FP","FQ","FR","FS","FT","FU","FV","FW","FX","FY","FZ",

            "GA","GB","GC","GD","GE","GF","GG","GH","GI","GJ","GK","GL","GM","GN","GO","GP","GQ","GR","GS","GT","GU","GV","GW","GX","GY","GZ",

            "HA","HB","HC","HD","HE","HF","HG","HH","HI","HJ","HK","HL","HM","HN","HO","HP","HQ","HR","HS","HT","HU","HV","HW","HX","HY","HZ",

            "IA","IB","IC","ID","IE","IF","IG","IH","II","IJ","IK","IL","IM","IN","IO","IP","IQ","IR","IS","IT","IU","IV"

        };

 

        ///

        ///获取描述区域的字符

        ///

        ///

 

        ///

 

        ///

        publicstringGetAix(intx,inty)

        {

            if(x>256){return"";}

            strings="";

            s=s+ALists[x-1].ToString();

            s=s+y.ToString();

            returns;

        }

 

        ///

        ///给单元格赋值1

        ///

        ///

行号

        ///

列号

        ///

对齐(CENTER、LEFT、RIGHT)

        ///

        publicvoidsetValue(inty,intx,stringalign,stringtext)

        {

            Microsoft.Office.Interop.Excel.Rangerange=sheet.get_Range(this.GetAix(x,y),miss);

            range.set_Value(miss,text);

            if(align.ToUpper()=="CENTER")

            {

                range.HorizontalAlignment=Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;

            }

            if(align.ToUpper()=="LEFT")

            {

                range.HorizontalAlignment=Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;

            }

            if(align.ToUpper()=="RIGHT")

            {

                range.HorizontalAlignment=Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignRight;

            }

        }

 

        ///

        ///给单元格赋值2

        ///

        ///

行号

        ///

列号

        ///

        publicvoidsetValue(inty,intx,stringtext)

        {

            Microsoft.Office.Interop.Excel.Rangerange=sheet.get_Range(this.GetAix(x,y),miss);

            range.set_Value(miss,text);

        }

 

        ///

        ///给单元格赋值3

        ///

        ///

行号

        ///

列号

        ///

        ///

字符格式

        ///

颜色

        publicvoidsetValue(inty,intx,stringtext,System.Drawing.Fontfont,intcolor)

        {

            this.setValue(x,y,text);

            Microsoft.Office.Interop.Excel.Rangerange=sheet.get_Range(this.GetAix(x,y),miss);

            range.Font.Size=font.Size;

            range.Font.Bold=font.Bold;

            //这里是int型的颜色

            range.Font.Color=ColorTranslator.ToOle(ColorTranslator.FromWin32(color));

            range.Font.Name=font.Name;

            range.Font.Italic=font.Italic;

            range.Font.Underline=font.Underline;

        }

 

        ///

        ///给单元格赋值3

        ///

        ///

行号

        ///

列号

        ///

        ///

字符格式

        ///

颜色

        publicvoidsetValue(inty,intx,stringtext,System.Drawing.Fontfont,intcolor,stringalign)

        {

            this.setValue(x,y,text);

            Microsoft.Office.Interop.Excel.Rangerange=sheet.get_Range(this.GetAix(x,y),miss);

            range.Font.Size=font.Size;

            range.Font.Bold=font.Bold;

            //这里是int型的颜色

            range.Font.Color=ColorTranslator.ToOle(ColorTranslator.FromWin32(color));

            range.Font.Name=font.Name;

            range.Font.Italic=font.Italic;

            range.Font.Underline=font.Underline;

 

            if(align.ToUpper()=="CENTER")

            {

                range.HorizontalAlignment=Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;

            }

            if(align.ToUpper()=="LEFT")

            {

                range.HorizontalAlignment=Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;

            }

            if(align.ToUpper()=="RIGHT")

            {

                range.HorizontalAlignment=Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignRight;

            }

        }

 

        ///

        ///插入新行

        ///

        ///

模板行号

        publicvoidinsertRow(inty)

        {

            Microsoft.Office.Interop.Excel.Rangerange=sheet.get_Range(GetAix(1,y),GetAix(255,y));

            range.Copy(miss);

            range.Insert(Microsoft.Office.Interop.Excel.XlDirection.xlDown,miss);

            range.get_Range(GetAix(1,y),GetAix(255,y));

            range.Select();

            sheet.Paste(miss,miss);

 

        }

 

        ///

        ///把剪切内容粘贴到当前区域

        ///

        publicvoidpaste()

        {

            strings="a,b,c,d,e,f,g";

            sheet.Paste(sheet.get_Range(this.GetAix(10,10),miss),s);

        }

        ///

        ///设置边框

        ///

        ///

 

        ///

 

        ///

 

        ///

 

        ///

 

        publicvoidsetBorder(intx1,inty1,intx2,inty2,intWidth)

        {

            Microsoft.Office.Interop.Excel.Rangerange=sheet.get_Range(this.GetAix(x1,y1),this.GetAix(x2,y2));

            range.Borders.Weight=Width;

        }

        publicvoidmergeCell(intx1,inty1,intx2,inty2)

        {

            Microsoft.Office.Interop.Excel.Rangerange=sheet.get_Range(this.GetAix(x1,y1),this.GetAix(x2,y2));

            range.Merge(true);

        }

 

        publicMicrosoft.Office.Interop.Excel.RangegetRange(intx1,inty1,intx2,inty2)

        {

            Microsoft.Office.Interop.Excel.Rangerange=sheet.get_Range(this.GetAix(x1,y1),this.GetAix(x2,y2));

            returnrange;

        }

 

        privateobjectmiss=Missing.Value;//忽略的参数OLENULL

        privateMicrosoft.Office.Interop.Excel.Applicationm_objExcel;//Excel应用程序实例

        privateMicrosoft.Office.Interop.Excel.Workbooksm_objBooks;//工作表集合

        privateMicrosoft.Office.Interop.Excel.Workbookm_objBook;//当前操作的工作表

        privateMicrosoft.Office.Interop.Excel.Worksheetsheet;//当前操作的表格

 

        publicMicrosoft.Office.Interop.Excel.WorksheetCurrentSheet

        {

            get

            {

                returnsheet;

            }

            se

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1