C語(yǔ)言操作Excel復(fù)習(xí)過(guò)程_第1頁(yè)
C語(yǔ)言操作Excel復(fù)習(xí)過(guò)程_第2頁(yè)
C語(yǔ)言操作Excel復(fù)習(xí)過(guò)程_第3頁(yè)
C語(yǔ)言操作Excel復(fù)習(xí)過(guò)程_第4頁(yè)
C語(yǔ)言操作Excel復(fù)習(xí)過(guò)程_第5頁(yè)
已閱讀5頁(yè),還剩58頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Good is good, but better carries it.精益求精,善益求善。C語(yǔ)言操作Excel-VisualC的Excel編程前言Excel是微軟公司辦公自動(dòng)化套件中的一個(gè)軟件,他主要是用來(lái)處理電子表格。Excel以其功能強(qiáng)大,界面友好等受到了許多用戶的歡迎。在辦公的時(shí)候,正是由于Excel的這么多的優(yōu)點(diǎn),許多重要的數(shù)據(jù),往往以Excel電子表格的形式存儲(chǔ)起來(lái)。這樣就給程序員帶來(lái)了一個(gè)問題,雖然Excel功能比較強(qiáng)大,但畢竟不是數(shù)據(jù)庫(kù),在程序中處理數(shù)據(jù)庫(kù)中的數(shù)據(jù)比其處理Excel表格中的數(shù)據(jù)容易許多。那么如何用VisualC讀取Excel表格中的數(shù)據(jù)?在以前用Delphi編程

2、的時(shí)候,對(duì)于不同的用戶,他們對(duì)于打印的需求是不一樣的,如果要使得程序中的打印功能適用于每一個(gè)用戶,可以想象程序設(shè)計(jì)是十分復(fù)雜的。這時(shí)想到Excel,由于Excel表格的功能強(qiáng)大,又由于幾乎每一臺(tái)機(jī)器都安裝了它,如果把程序處理的結(jié)果放到Excel表格中,這樣每一個(gè)用戶就可以根據(jù)自己的需要在Excel中定制自己的打印。這樣不僅使得程序設(shè)計(jì)簡(jiǎn)單,而且又滿足了諸多用戶的要求,更加實(shí)用了。那么用VisualC如何調(diào)用Excel,如何又把數(shù)據(jù)存放到Excel表格中?本文就來(lái)探討一下上述問題的解決辦法。一程序設(shè)計(jì)及運(yùn)行環(huán)境(1).微軟視窗2000服務(wù)器版(2).NetFrameworkSDKBeta2(3)

3、.MicrosoftDataAccessComponent2.6以上版本(MDAC2.6)(4).Office2000套件二VisualC讀取Excel表格中的數(shù)據(jù):本節(jié)將通過(guò)一個(gè)程序來(lái)介紹VisualC讀取Excel表格中的數(shù)據(jù),并把數(shù)據(jù)以DataGrid的形式顯示出來(lái)。(1).如何讀取數(shù)據(jù)其實(shí)讀取Excel表格中的數(shù)據(jù)和讀取數(shù)據(jù)庫(kù)中的數(shù)據(jù)是非常類似的,因?yàn)樵谀撤N程度上Excel表格可以看成是一張一張的數(shù)據(jù)表。其二者的主要區(qū)別在于所使用的數(shù)據(jù)引擎不一樣。在本文的程序中,通過(guò)下列代碼實(shí)現(xiàn)讀取Excel表格數(shù)據(jù),具體如下:/創(chuàng)建一個(gè)數(shù)據(jù)鏈接stringstrCon=Provider=Micros

4、oft.Jet.OLEDB.4.0;DataSource=c:sample.xls;ExtendedProperties=Excel8.0;OleDbConnectionmyConn=newOleDbConnection(strCon);stringstrCom=SELECT*FROMSheet1$;myConn.Open();file:/打開數(shù)據(jù)鏈接,得到一個(gè)數(shù)據(jù)集OleDbDataAdaptermyCommand=newOleDbDataAdapter(strCom,myConn);file:/創(chuàng)建一個(gè)DataSet對(duì)象myDataSet=newDataSet();file:/得到自己的D

5、ataSet對(duì)象myCommand.Fill(myDataSet,Sheet1$);file:/關(guān)閉此數(shù)據(jù)鏈接myConn.Close();怎么樣讀取Excel表格中的數(shù)據(jù)其實(shí)和讀取數(shù)據(jù)庫(kù)中的數(shù)據(jù)沒有什么實(shí)質(zhì)上的區(qū)別。注釋:這里讀取的是C盤根目錄下的Sample.xls文件。(2).用DataGrid來(lái)顯示得到的數(shù)據(jù)集在得到DataSet對(duì)象后,只需要通過(guò)下列二行代碼,就可以把數(shù)據(jù)集用DataGrid顯示出來(lái)了:DataGrid1.DataMember=Sheet1$;DataGrid1.DataSource=myDataSet;(3).用VisualC讀取Excel表格,并用DataGrid

6、顯示出來(lái)的程序代碼(Read.cs)和程序運(yùn)行的界面掌握了上面二點(diǎn),水到渠成就可以得到以下代碼:usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;usingSystem.Data.OleDb;publicclassForm1:FormprivateButtonbutton1;privateSystem.Data.DataSetmyDataSet;privateDataGridDataGrid1;

7、privateSystem.ComponentModel.Containercomponents=null;publicForm1()file:/初始化窗體中的各個(gè)組件InitializeComponent();file:/打開數(shù)據(jù)鏈接,得到數(shù)據(jù)集GetConnect();file:/清除程序中使用過(guò)的資源protectedoverridevoidDispose(booldisposing)if(disposing)if(components!=null)components.Dispose();base.Dispose(disposing);privatevoidGetConnect()fi

8、le:/創(chuàng)建一個(gè)數(shù)據(jù)鏈接stringstrCon=Provider=Microsoft.Jet.OLEDB.4.0;DataSource=c:sample.xls;ExtendedProperties=Excel8.0;OleDbConnectionmyConn=newOleDbConnection(strCon);stringstrCom=SELECT*FROMSheet1$;myConn.Open();file:/打開數(shù)據(jù)鏈接,得到一個(gè)數(shù)據(jù)集OleDbDataAdaptermyCommand=newOleDbDataAdapter(strCom,myConn);file:/創(chuàng)建一個(gè)Data

9、Set對(duì)象myDataSet=newDataSet();file:/得到自己的DataSet對(duì)象myCommand.Fill(myDataSet,Sheet1$);file:/關(guān)閉此數(shù)據(jù)鏈接myConn.Close();privatevoidInitializeComponent()DataGrid1=newDataGrid();button1=newButton();SuspendLayout();DataGrid1.Name=DataGrid1;DataGrid1.Size=newSystem.Drawing.Size(400,200);button1.Location=newSystem

10、.Drawing.Point(124,240);button1.Name=button1;button1.TabIndex=1;button1.Text=讀取數(shù)據(jù);button1.Size=newSystem.Drawing.Size(84,24);button1.Click+=newSystem.EventHandler(this.button1_Click);this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);this.ClientSize=newSystem.Drawing.Size(400,280);this.Controls.Add

11、(button1);this.Controls.Add(DataGrid1);this.Name=Form1;this.Text=讀取Excle表格中的數(shù)據(jù),并用DataGrid顯示出來(lái)!;this.ResumeLayout(false);privatevoidbutton1_Click(objectsender,System.EventArgse)DataGrid1.DataMember=Sheet1$;DataGrid1.DataSource=myDataSet;staticvoidMain()Application.Run(newForm1();(4).總結(jié)以上只是讀取了Excel表格中

12、Sheet1中的數(shù)據(jù),對(duì)于其他Sheet中的內(nèi)容,可以參照讀取Sheet1中的程序,只作一點(diǎn)修改就可以了,譬如要讀取Sheet2中的內(nèi)容,只需要把Read.cs程序中的Sheet1$改成Sheet2$就可以了。三VisualC調(diào)用Excel表格,并在Excel表格中存儲(chǔ)數(shù)據(jù):在VisualC中調(diào)用Excel表格,并不像讀取Excel表格中的數(shù)據(jù)那么容易了,因?yàn)樵赩isualC中調(diào)用Excel表格要使用到Excel的COM組件。如果你安裝Office套件在C盤,那么在C:ProgramFilesMicrosoftOfficeOffice可以找到這個(gè)COM組件EXCEL9.OLB,在VisualC

13、如何使用ActiveX組件一文中,這些COM組件都是非受管代碼的,要在VisualC中使用這些非受管代碼的COM組件,就必須把他們轉(zhuǎn)換成受管代碼的類庫(kù)。所以在用VisualC調(diào)用Excel表格之前,必須完成從COM組件的非受管代碼到受管代碼的類庫(kù)的轉(zhuǎn)換。(1).非受管代碼COM組件轉(zhuǎn)換成受管代碼的類庫(kù)首先把COM組件EXCEL9.OLB拷貝到C盤的根目錄下,然后輸入下列命令:tlbimpexcel9.olb這樣在C盤的根目錄下面就產(chǎn)生了三個(gè)DLL文件:Excel.dll、Office.dll、VBIDE.dll。在產(chǎn)生了上面的三個(gè)文件后,這種轉(zhuǎn)換就成功完成了。在下面的程序中,就可以利用這轉(zhuǎn)換好

14、的三個(gè)類庫(kù)編寫和Excel表格相關(guān)的各種操作了。注釋:1在安裝的程序中或許找不到excel9.olb,可以利用下面的命令格式獲取dll文件Tlbimpexecel.exe也可以生成文件Excel.dll,VBIDE.dll2也可以使用VisualS2003或其以上版本添加引用找到Excel.exe文件,會(huì)自動(dòng)轉(zhuǎn)化為excel.dll文件,然后在程序中添加包含即可例如:usingExcel;請(qǐng)根據(jù)包的不同情況添加(2).VisualC打開Excel表格:在Excel.dll中定義了一個(gè)命名空間Excel,在差命名空間中封裝了一個(gè)類Application,這個(gè)類和啟動(dòng)Excel表格有非常重要的關(guān)系

15、,在VisualC中,只需要下列三行代碼就可以完成打開Excel表格的工作,具體如下:Excel.Applicationexcel=newExcel.ApplicationClass();excel.Application.Workbooks.Add(true);excel.Visible=true;但此時(shí)的Excel表格是一個(gè)空的表格,沒有任何內(nèi)容,下面就來(lái)介紹如何往Excel表格中輸入數(shù)據(jù)。(3).往Excel表格中輸入數(shù)據(jù):在命名空間Excel中,還定義了一個(gè)類Cell,這個(gè)類所代表的就是Excel表格中的一個(gè)下單元。通過(guò)給差Cell賦值,從而實(shí)現(xiàn)往Excel表格中輸入相應(yīng)的數(shù)據(jù),下列代

16、碼功能是打開Excel表格,并且往表格輸入一些數(shù)據(jù)。Excel.Applicationexcel=newExcel.ApplicationClass();excel.Application.Workbooks.Add(true);excel.Cells1,1=第一行第一列;excel.Cells1,2=第一行第二列;excel.Cells2,1=第二行第一列;excel.Cells2,2=第二行第二列;excel.Cells3,1=第三行第一列;excel.Cells3,2=第三行第二列;excel.Visible=true;(4).VisualC調(diào)用Excel表格,并在Excel表格中存儲(chǔ)數(shù)

17、據(jù)的程序代碼(Excel.cs):了解了上面的這些知識(shí),得到完成上述功能的程序代碼就顯得比較容易了,具體如下:usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;usingSystem.Data.SqlClient;publicclassForm1:FormprivateButtonbutton1;privateSystem.ComponentModel.Containercomponents=n

18、ull;publicForm1()file:/初始化窗體中的各個(gè)組件InitializeComponent();file:/清除程序中使用的各個(gè)資源protectedoverridevoidDispose(booldisposing)if(disposing)if(components!=null)components.Dispose();base.Dispose(disposing);privatevoidInitializeComponent()button1=newButton();SuspendLayout();button1.Location=newSystem.Drawing.Po

19、int(32,72);button1.Name=button1;button1.Size=newSystem.Drawing.Size(100,30);button1.TabIndex=0;button1.Text=調(diào)用Excel文件!;button1.Click+=newSystem.EventHandler(button1_Click);AutoScaleBaseSize=newSystem.Drawing.Size(5,13);this.ClientSize=newSystem.Drawing.Size(292,273);this.Controls.Add(button1);this.N

20、ame=Form1;this.Text=如何用VisualC調(diào)用Excel表格!;this.ResumeLayout(false);staticvoidMain()Application.Run(newForm1();privatevoidbutton1_Click(objectsender,System.EventArgse)Excel.Applicationexcel=newExcel.Application();excel.Application.Workbooks.Add(true);excel.Cells1,1=第一行第一列;excel.Cells1,2=第一行第二列;excel.C

21、ells2,1=第二行第一列;excel.Cells2,2=第二行第二列;excel.Cells3,1=第三行第一列;excel.Cells3,2=第三行第二列;excel.Visible=true;(5).編譯源程序和程序運(yùn)行界面:在經(jīng)過(guò)了下列命令編譯后:Csc.exe/r:system.dll/r:system.windows.forms.dll/r:system.drawing.dll/r:excel.dll/r:office.dll/r:vbide.dllexcel.cs就可以得到Excel.exe,運(yùn)行后界面如下四VisualC處理Office套件中的其他成員程序:本文雖然只介紹了V

22、isualC在處理Excel表格中經(jīng)常遇到的一些問題的解決方法,但其實(shí)對(duì)Office套件的其他成員也有很強(qiáng)的借鑒意義,譬如VisualC來(lái)處理Word文檔,在調(diào)用Word文檔的時(shí)候,必須先完成COM組件從非受管代碼到受管代碼的轉(zhuǎn)換,Word的COM組件位MSWORD9.OLB,經(jīng)過(guò)轉(zhuǎn)換后也會(huì)產(chǎn)生三個(gè)DLL文件,但分別是Word.dll、Office.dll、VBIDE.dll。其實(shí)在VisualC中調(diào)用Word,也非常容易。只需要把調(diào)用Excel表格中的代碼換成調(diào)用Word的代碼就可以了,具體如下:Word.Applicationword=newWord.Application();word.

23、Application.Visible=true;不信你試一下,看看是否達(dá)到你的要求。對(duì)于針對(duì)Word的其他的操作,總體來(lái)說(shuō)和對(duì)Excel表格的操作相類似。由于針對(duì)Word只是一個(gè)文檔,程序?qū)ord進(jìn)行的操作是比較少的,所以就不一一介紹了。五總結(jié):本文介紹VisualC來(lái)處理Excel表格的幾種最常遇到的情況,雖然針對(duì)的只是Excel表格,但對(duì)其他Office套件中的成員也具有十分的借鑒意義。程序示例及常見問題:前提:首先要把Excel加入到引用,加入方法見:非受管代碼COM組件轉(zhuǎn)換成受管代碼的類庫(kù)示例1:讀取一個(gè)模板e(cuò)xcel文件另存為另外一個(gè)excel文件usingSystem;usin

24、gExcel;namespaceExcelOperator.ClassExcel/Example1的摘要說(shuō)明。/-2006.08.31Peter-/讀取一個(gè)模板e(cuò)xcel文件另存為另外一個(gè)excel文件/在做完操作之后立刻結(jié)束excel進(jìn)程/-End-/publicclassExample1privateDateTimebeforeTime;/Excel啟動(dòng)之前時(shí)間privateDateTimeafterTime;/Excel啟動(dòng)之后時(shí)間privatestringOriginalPath;privatestringCurrentPath;publicExample2(stringCurrent

25、Path,stringOriginalPath)this.OriginalPath=OriginalPath;this.CurrentPath=CurrentPath;publicvoidOperatorExcel()/GC.Collect();Excel.Applicationexcel;/聲明excel對(duì)象beforeTime=DateTime.Now;/獲取excel開始啟動(dòng)時(shí)間excel=newExcel.ApplicationClass();/創(chuàng)建對(duì)象實(shí)例,這時(shí)在系統(tǒng)進(jìn)程中會(huì)多出一個(gè)excel進(jìn)程afterTime=DateTime.Now;/獲取excel啟動(dòng)結(jié)束的時(shí)間tryobj

26、ectmissing=System.Reflection.Missing.Value;/Missing用于調(diào)用帶默認(rèn)參數(shù)的方法。objectreadOnly=true;excel.Visible=false;/是否顯示excel文檔/OpenOriginalExcelFileexcel.Application.Workbooks.Open(OriginalPath,missing,readOnly,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);Ex

27、cel.WorkbookmyBook=excel.Workbooks1;/Workbooks從1開始計(jì)數(shù)的Excel.WorksheetmySheet=(Excel.Worksheet)myBook.Worksheets3;/從1開始計(jì)數(shù)的Excel.Ranger=mySheet.get_Range(mySheet.Cells1,17,mySheet.Cells65231,17);/獲取矩形選擇框r.NumberFormatLocal=XlColumnDataType.xlTextFormat;/設(shè)置該矩形框的文本格式/SaveAsOriginalExcelFileToCurrentPathm

28、ySheet.SaveAs(CurrentPath,missing,missing,missing,missing,missing,missing,missing,missing,missing);/釋放Excel對(duì)象,但在AWeb程序中只有轉(zhuǎn)向另一個(gè)頁(yè)面的時(shí)候進(jìn)程才結(jié)束/可以考慮使用KillExcelProcess()殺掉進(jìn)程/ReleaseComObject方法遞減運(yùn)行庫(kù)可調(diào)用包裝的引用計(jì)數(shù)。詳細(xì)信息見MSDNSystem.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);System.Runtime.InteropServi

29、ces.Marshal.ReleaseComObject(mySheet);System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);System.Runtime.InteropServices.Marshal.ReleaseComObject(r);myBook.Close(null,null,null);excel.Workbooks.Close();r=null;mySheet=null;myBook=null;missing=null;readOnly=null;excel.Quit();excel=null;catc

30、hKillExcelProcess();/殺掉進(jìn)程finally/可以把KillExcelProcess();放在該處從而殺掉Excel的進(jìn)程privatevoidKillExcelProcess()System.Diagnostics.ProcessmyProcesses;DateTimestartTime;myProcesses=System.Diagnostics.Process.GetProcessesByName(Excel);/得不到Excel進(jìn)程ID,暫時(shí)只能判斷進(jìn)程啟動(dòng)時(shí)間foreach(System.Diagnostics.ProcessmyProcessinmyProces

31、ses)startTime=myProcess.StartTime;if(startTimebeforeTime&startTimeafterTime)myProcess.Kill();示例2:創(chuàng)建一個(gè)空文檔,朝某一單元格寫入值,并保存該excel文檔usingSystem;usingExcel;namespaceExcelOperator.ClassExcel/Example1的摘要說(shuō)明。/-2006.08.31Peter-/創(chuàng)建一個(gè)空文檔,朝某一單元格寫入值,并保存該excel文檔/做完操作之后立刻關(guān)閉excel進(jìn)程/-End-/publicclassExample2privateDate

32、TimebeforeTime;/Excel啟動(dòng)之前時(shí)間privateDateTimeafterTime;/Excel啟動(dòng)之后時(shí)間privatestringpath;publicExample2(stringpath)this.path=path;publicvoidOperatorExcel()/GC.Collect();Excel.Applicationexcel;/聲明excel對(duì)象beforeTime=DateTime.Now;/獲取excel開始啟動(dòng)時(shí)間excel=newExcel.ApplicationClass();/創(chuàng)建對(duì)象實(shí)例,這時(shí)在系統(tǒng)進(jìn)程中會(huì)多出一個(gè)excel進(jìn)程after

33、Time=DateTime.Now;/獲取excel啟動(dòng)結(jié)束的時(shí)間tryobjectmissing=System.Reflection.Missing.Value;/Missing用于調(diào)用帶默認(rèn)參數(shù)的方法。excel.Visible=false;/是否顯示excel文檔/OpenOriginalExcelFileexcel.Application.Workbooks.Add(true);_WorkbookmyBook;/聲明Workbook類_WorksheetmySheet;/聲明Worksheet類myBook=excel.Workbooks1;/獲取excel程序的工作簿mySheet=

34、(Worksheet)myBook.ActiveSheet;/獲取Workbook的活動(dòng)工作表(最上層的工作表)。mySheet.Cells1,1=朝A,1單元格寫入值;/SaveAsPathmySheet.SaveAs(path,missing,missing,missing,missing,missing,missing,missing,missing,missing);/釋放Excel對(duì)象,但在AWeb程序中只有轉(zhuǎn)向另一個(gè)頁(yè)面的時(shí)候進(jìn)程才結(jié)束/可以考慮使用KillExcelProcess()殺掉進(jìn)程/ReleaseComObject方法遞減運(yùn)行庫(kù)可調(diào)用包裝的引用計(jì)數(shù)。詳細(xì)信息見MSDNS

35、ystem.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);System.Runtime.InteropServices.Marshal.ReleaseComObject(mySheet);System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);myBook.Close(null,null,null);excel.Workbooks.Close();mySheet=null;myBook=null;missing=null;excel.Quit();excel

36、=null;catchKillExcelProcess();/殺掉進(jìn)程finally/可以把KillExcelProcess();放在該處從而殺掉Excel的進(jìn)程KillExcelProcess();privatevoidKillExcelProcess()System.Diagnostics.ProcessmyProcesses;DateTimestartTime;myProcesses=System.Diagnostics.Process.GetProcessesByName(Excel);/得不到Excel進(jìn)程ID,暫時(shí)只能判斷進(jìn)程啟動(dòng)時(shí)間foreach(System.Diagnosti

37、cs.ProcessmyProcessinmyProcesses)startTime=myProcess.StartTime;if(startTimebeforeTime&startTimeafterTime)myProcess.Kill();示例3:Excel程序的工作簿(workbook)常用方法屬性介紹更多的workbook的方法和屬性:HYPERLINK/zh-CN/library/microsoft.office.tools.excel.workbook_members.aspx/zh-CN/library/microsoft.office.tools.excel.workbook_

38、members.aspxusingSystem;usingExcel;namespaceExcelOperator.ClassExcel/Example1的摘要說(shuō)明。/-2006.08.31Peter-/Excel程序的工作簿(workbook)常用方法屬性介紹/在做完操作之后立刻結(jié)束excel進(jìn)程,并保存excel文件/-End-/publicclassExample3privateDateTimebeforeTime;/Excel啟動(dòng)之前時(shí)間privateDateTimeafterTime;/Excel啟動(dòng)之后時(shí)間privatestringpath;publicExample3(strin

39、gpath)this.path=path;publicvoidOperatorExcel()/GC.Collect();Excel.Applicationexcel;/聲明excel對(duì)象beforeTime=DateTime.Now;/獲取excel開始啟動(dòng)時(shí)間excel=newExcel.ApplicationClass();/創(chuàng)建對(duì)象實(shí)例,這時(shí)在系統(tǒng)進(jìn)程中會(huì)多出一個(gè)excel進(jìn)程afterTime=DateTime.Now;/獲取excel啟動(dòng)結(jié)束的時(shí)間tryobjectmissing=System.Reflection.Missing.Value;/Missing用于調(diào)用帶默認(rèn)參數(shù)的方法

40、。excel.Visible=false;/是否顯示excel文檔excel.Application.Workbooks.Add(true);_WorkbookmyBook;/聲明Workbook類_WorksheetmySheet;/聲明Worksheet類myBook=excel.Workbooks1;/+/+Workbook常用方法和屬性+myBook.Author=Peter;/獲取或設(shè)置工作簿的作者。stringmyBookApplication=myBook.Application.ToString();/獲取表示工作簿創(chuàng)建者的Microsoft.Office.Interop.Ex

41、cel.Application。mySheet=(_Worksheet)myBook.ActiveSheet;/獲取活動(dòng)工作表(最上層的工作表)。stringmyBookFullName=myBook.FullName.ToString();/獲取對(duì)象的名稱,包括其磁盤路徑。stringmyBookFileFormat=myBook.FileFormat.ToString();/獲取工作簿的文件格式和類型。stringmyBookName=myBook.Name.ToString();/獲取工作簿的名稱。/其他詳細(xì)屬性見:/zh-CN/library/microsoft.office.tool

42、s.excel.workbook_members.aspx/+End+/+/SaveAsOriginalExcelFileToCurrentPathmyBook.SaveAs(path,missing,missing,missing,missing,missing,XlSaveAsAccessMode.xlNoChange,missing,missing,missing,missing,missing);/釋放Excel對(duì)象,但在AWeb程序中只有轉(zhuǎn)向另一個(gè)頁(yè)面的時(shí)候進(jìn)程才結(jié)束/可以考慮使用KillExcelProcess()殺掉進(jìn)程/ReleaseComObject方法遞減運(yùn)行庫(kù)可調(diào)用包裝的

43、引用計(jì)數(shù)。詳細(xì)信息見MSDNSystem.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);System.Runtime.InteropServices.Marshal.ReleaseComObject(mySheet);System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);myBook.Close(null,null,null);excel.Workbooks.Close();mySheet=null;myBook=null;missing=null;exc

44、el.Quit();excel=null;catchKillExcelProcess();/殺掉進(jìn)程finally/可以把KillExcelProcess();放在該處從而殺掉Excel的進(jìn)程KillExcelProcess();privatevoidKillExcelProcess()System.Diagnostics.ProcessmyProcesses;DateTimestartTime;myProcesses=System.Diagnostics.Process.GetProcessesByName(Excel);/得不到Excel進(jìn)程ID,暫時(shí)只能判斷進(jìn)程啟動(dòng)時(shí)間foreach(S

45、ystem.Diagnostics.ProcessmyProcessinmyProcesses)startTime=myProcess.StartTime;if(startTimebeforeTime&startTimeafterTime)myProcess.Kill();示例4:在工作簿(workbook)中添加刪除工作表(worksheet)usingSystem;usingExcel;namespaceExcelOperator.ClassExcel/Example1的摘要說(shuō)明。/-2006.08.31Peter-/工作表(worksheet)的添加和刪除/在做完操作之后立刻結(jié)束exce

46、l進(jìn)程,并保存excel文件/-End-/publicclassExample4privateDateTimebeforeTime;/Excel啟動(dòng)之前時(shí)間privateDateTimeafterTime;/Excel啟動(dòng)之后時(shí)間privatestringpath;publicExample4(stringpath)this.path=path;publicvoidOperatorExcel()/GC.Collect();Excel.Applicationexcel;/聲明excel對(duì)象beforeTime=DateTime.Now;/獲取excel開始啟動(dòng)時(shí)間excel=newExcel.A

47、pplicationClass();/創(chuàng)建對(duì)象實(shí)例,這時(shí)在系統(tǒng)進(jìn)程中會(huì)多出一個(gè)excel進(jìn)程afterTime=DateTime.Now;/獲取excel啟動(dòng)結(jié)束的時(shí)間tryobjectmissing=System.Reflection.Missing.Value;/Missing用于調(diào)用帶默認(rèn)參數(shù)的方法。excel.Visible=false;/是否顯示excel文檔excel.Application.Workbooks.Add(true);_WorkbookmyBook;/聲明Workbook類_WorksheetmySheet;/聲明Worksheet類myBook=excel.Work

48、books1;objectmySheetEnd=(int)myBook.Sheets.Count;/在第一個(gè)位置添加工作表mySheet=(_Worksheet)myBook.Sheets.Add(missing,missing,missing,missing);mySheet.Name=MySheetFirst;/在第一個(gè)位置后面添家一個(gè)工作表_WorksheetmySheet1=(_Worksheet)myBook.Sheets.Add(missing,myBook.Sheets1,missing,missing);mySheet1.Name=MySheetEnd;/Add方法允許您將一個(gè)

49、新表添加到工作簿中的表集合中,并且可以接受四個(gè)可選參數(shù),這些參數(shù)可以指明表的位置、要添加的表數(shù)和表的類型(工作表、圖表等):/刪除第三個(gè)工作表(Worksheet)myBook.Sheets3).Delete();/SaveAsOriginalExcelFileToCurrentPathmyBook.SaveAs(path,missing,missing,missing,missing,missing,XlSaveAsAccessMode.xlNoChange,missing,missing,missing,missing,missing);/釋放Excel對(duì)象,但在AWeb程序中只有轉(zhuǎn)向另一

50、個(gè)頁(yè)面的時(shí)候進(jìn)程才結(jié)束/可以考慮使用KillExcelProcess()殺掉進(jìn)程/ReleaseComObject方法遞減運(yùn)行庫(kù)可調(diào)用包裝的引用計(jì)數(shù)。詳細(xì)信息見MSDNSystem.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);System.Runtime.InteropServices.Marshal.ReleaseComObject(mySheet);System.Runtime.InteropServices.Marshal.ReleaseComObject(mySheetEnd);System.Runtime.Inte

51、ropServices.Marshal.ReleaseComObject(mySheet1);System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);myBook.Close(null,null,null);excel.Workbooks.Close();mySheet=null;mySheetEnd=null;mySheet1=null;/mySheetAfter=null;myBook=null;missing=null;excel.Quit();excel=null;catchKillExcelProcess();/殺

52、掉進(jìn)程finally/可以把KillExcelProcess();放在該處從而殺掉Excel的進(jìn)程KillExcelProcess();privatevoidKillExcelProcess()System.Diagnostics.ProcessmyProcesses;DateTimestartTime;myProcesses=System.Diagnostics.Process.GetProcessesByName(Excel);/得不到Excel進(jìn)程ID,暫時(shí)只能判斷進(jìn)程啟動(dòng)時(shí)間foreach(System.Diagnostics.ProcessmyProcessinmyProcesses

53、)startTime=myProcess.StartTime;if(startTimebeforeTime&startTimeafterTime)myProcess.Kill();示例5:工作表(worksheet)和Range對(duì)象的操作usingSystem;usingExcel;namespaceExcelOperator.ClassExcel/Example1的摘要說(shuō)明。/-2006.08.31Peter-/工作表(worksheet)的操作/在做完操作之后立刻結(jié)束excel進(jìn)程,并保存excel文件/-End-/publicclassExample5privateDateTimebef

54、oreTime;/Excel啟動(dòng)之前時(shí)間privateDateTimeafterTime;/Excel啟動(dòng)之后時(shí)間privatestringpath;publicExample5(stringpath)this.path=path;publicvoidOperatorExcel()/GC.Collect();Excel.Applicationexcel;/聲明excel對(duì)象beforeTime=DateTime.Now;/獲取excel開始啟動(dòng)時(shí)間excel=newExcel.ApplicationClass();/創(chuàng)建對(duì)象實(shí)例,這時(shí)在系統(tǒng)進(jìn)程中會(huì)多出一個(gè)excel進(jìn)程afterTime=Da

55、teTime.Now;/獲取excel啟動(dòng)結(jié)束的時(shí)間tryobjectmissing=System.Reflection.Missing.Value;/Missing用于調(diào)用帶默認(rèn)參數(shù)的方法。excel.Visible=false;/是否顯示excel文檔excel.Application.Workbooks.Add(true);_WorkbookmyBook;/聲明Workbook類_WorksheetmySheet;/聲明Worksheet類myBook=excel.Workbooks1;mySheet=(Worksheet)myBook.ActiveSheet;mySheet.Cells

56、1,1=123;/給某一單元格賦值Excel.Ranger=excel.ActiveCell;Excel.Ranger1=mySheet.get_Range(mySheet.Cells1,1,mySheet.Cells1,4);/Excel.Ranger1=mySheet.get_Range(A1:A10,missing);Excel.Ranger2=(Excel.Range)mySheet.Cells2,1;Excel.Ranger3=(Excel.Range)mySheet.Rows1,Type.Missing;Excel.Ranger4=(Excel.Range)mySheet.Colu

57、mnsType.Missing,5;r.Font.Bold=true;/設(shè)置字體r.Font.Color=System.Drawing.Color.Yellow.ToArgb();/設(shè)置字體顏色r.Cells.Interior.Color=System.Drawing.Color.Red.ToArgb();/設(shè)置背景顏色r.Borders.Color=55;/設(shè)置邊框r.Borders.Weight=Excel.XlBorderWeight.xlThick;r.AddComment(這是第一個(gè)單元格);/增加批注/r.ClearContents();/保留格式清除內(nèi)容r.HorizontalA

58、lignment=Excel.XlHAlign.xlHAlignCenter;/設(shè)置水平對(duì)齊方式r.VerticalAlignment=Excel.XlVAlign.xlVAlignBottom;/設(shè)置垂直對(duì)齊方式r1.Merge(true);/合并單元格mySheet.Cells2,1=1;/使用函數(shù)mySheet.Cells3,1=1;mySheet.Cells4,1=sum(A2:A3);r3.NumberFormat=XlColumnDataType.xlDMYFormat;/設(shè)置文本格式/SaveAsOriginalExcelFileToCurrentPathmyBook.SaveA

59、s(path,missing,missing,missing,missing,missing,XlSaveAsAccessMode.xlNoChange,missing,missing,missing,missing,missing);/釋放Excel對(duì)象,但在AWeb程序中只有轉(zhuǎn)向另一個(gè)頁(yè)面的時(shí)候進(jìn)程才結(jié)束/可以考慮使用KillExcelProcess()殺掉進(jìn)程/ReleaseComObject方法遞減運(yùn)行庫(kù)可調(diào)用包裝的引用計(jì)數(shù)。詳細(xì)信息見MSDNSystem.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);System.R

60、untime.InteropServices.Marshal.ReleaseComObject(mySheet);System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);System.Runtime.InteropServices.Marshal.ReleaseComObject(r);System.Runtime.InteropServices.Marshal.ReleaseComObject(r1);System.Runtime.InteropServices.Marshal.ReleaseComObject(r2);S

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論