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

下載本文檔

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

文檔簡介

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

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

3、.MicrosoftDataAccessComponent2.6以上版本(MDAC2.6)(4).Office2000套件二VisualC讀取Excel表格中的數(shù)據(jù):本節(jié)將通過一個程序來介紹VisualC讀取Excel表格中的數(shù)據(jù),并把數(shù)據(jù)以DataGrid的形式顯示出來。(1).如何讀取數(shù)據(jù)其實讀取Excel表格中的數(shù)據(jù)和讀取數(shù)據(jù)庫中的數(shù)據(jù)是非常類似的,因為在某種程度上Excel表格可以看成是一張一張的數(shù)據(jù)表。其二者的主要區(qū)別在于所使用的數(shù)據(jù)引擎不一樣。在本文的程序中,通過下列代碼實現(xiàn)讀取Excel表格數(shù)據(jù),具體如下:/創(chuàng)建一個數(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ù)鏈接,得到一個數(shù)據(jù)集OleDbDataAdaptermyCommand=newOleDbDataAdapter(strCom,myConn);file:/創(chuàng)建一個DataSet對象myDataSet=newDataSet();file:/得到自己的D

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

6、顯示出來的程序代碼(Read.cs)和程序運行的界面掌握了上面二點,水到渠成就可以得到以下代碼: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:/初始化窗體中的各個組件InitializeComponent();file:/打開數(shù)據(jù)鏈接,得到數(shù)據(jù)集GetConnect();file:/清除程序中使用過的資源protectedoverridevoidDispose(booldisposing)if(disposing)if(components!=null)components.Dispose();base.Dispose(disposing);privatevoidGetConnect()fi

8、le:/創(chuàng)建一個數(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ù)鏈接,得到一個數(shù)據(jù)集OleDbDataAdaptermyCommand=newOleDbDataAdapter(strCom,myConn);file:/創(chuàng)建一個Data

9、Set對象myDataSet=newDataSet();file:/得到自己的DataSet對象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顯示出來!;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ù),對于其他Sheet中的內(nèi)容,可以參照讀取Sheet1中的程序,只作一點修改就可以了,譬如要讀取Sheet2中的內(nèi)容,只需要把Read.cs程序中的Sheet1$改成Sheet2$就可以了。三VisualC調(diào)用Excel表格,并在Excel表格中存儲數(shù)據(jù):在VisualC中調(diào)用Excel表格,并不像讀取Excel表格中的數(shù)據(jù)那么容易了,因為在VisualC中調(diào)用Excel表格要使用到Excel的COM組件。如果你安裝Office套件在C盤,那么在C:ProgramFilesMicrosoftOfficeOffice可以找到這個COM組件EXCEL9.OLB,在VisualC

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

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

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

17、據(jù)的程序代碼(Excel.cs):了解了上面的這些知識,得到完成上述功能的程序代碼就顯得比較容易了,具體如下: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:/初始化窗體中的各個組件InitializeComponent();file:/清除程序中使用的各個資源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).編譯源程序和程序運行界面:在經(jīng)過了下列命令編譯后: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,運行后界面如下四VisualC處理Office套件中的其他成員程序:本文雖然只介紹了V

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

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

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

25、Path,stringOriginalPath)this.OriginalPath=OriginalPath;this.CurrentPath=CurrentPath;publicvoidOperatorExcel()/GC.Collect();Excel.Applicationexcel;/聲明excel對象beforeTime=DateTime.Now;/獲取excel開始啟動時間excel=newExcel.ApplicationClass();/創(chuàng)建對象實例,這時在系統(tǒng)進(jìn)程中會多出一個excel進(jìn)程afterTime=DateTime.Now;/獲取excel啟動結(jié)束的時間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開始計數(shù)的Excel.WorksheetmySheet=(Excel.Worksheet)myBook.Worksheets3;/從1開始計數(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對象,但在AWeb程序中只有轉(zhuǎn)向另一個頁面的時候進(jìn)程才結(jié)束/可以考慮使用KillExcelProcess()殺掉進(jìn)程/ReleaseComObject方法遞減運行庫可調(diào)用包裝的引用計數(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,暫時只能判斷進(jìn)程啟動時間foreach(System.Diagnostics.ProcessmyProcessinmyProces

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

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

33、Time=DateTime.Now;/獲取excel啟動結(jié)束的時間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的活動工作表(最上層的工作表)。mySheet.Cells1,1=朝A,1單元格寫入值;/SaveAsPathmySheet.SaveAs(path,missing,missing,missing,missing,missing,missing,missing,missing,missing);/釋放Excel對象,但在AWeb程序中只有轉(zhuǎn)向另一個頁面的時候進(jìn)程才結(jié)束/可以考慮使用KillExcelProcess()殺掉進(jìn)程/ReleaseComObject方法遞減運行庫可調(diào)用包裝的引用計數(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,暫時只能判斷進(jìn)程啟動時間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的摘要說明。/-2006.08.31Peter-/Excel程序的工作簿(workbook)常用方法屬性介紹/在做完操作之后立刻結(jié)束excel進(jìn)程,并保存excel文件/-End-/publicclassExample3privateDateTimebeforeTime;/Excel啟動之前時間privateDateTimeafterTime;/Excel啟動之后時間privatestringpath;publicExample3(strin

39、gpath)this.path=path;publicvoidOperatorExcel()/GC.Collect();Excel.Applicationexcel;/聲明excel對象beforeTime=DateTime.Now;/獲取excel開始啟動時間excel=newExcel.ApplicationClass();/創(chuàng)建對象實例,這時在系統(tǒng)進(jìn)程中會多出一個excel進(jìn)程afterTime=DateTime.Now;/獲取excel啟動結(jié)束的時間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;/獲取活動工作表(最上層的工作表)。stringmyBookFullName=myBook.FullName.ToString();/獲取對象的名稱,包括其磁盤路徑。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對象,但在AWeb程序中只有轉(zhuǎn)向另一個頁面的時候進(jìn)程才結(jié)束/可以考慮使用KillExcelProcess()殺掉進(jìn)程/ReleaseComObject方法遞減運行庫可調(diào)用包裝的

43、引用計數(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,暫時只能判斷進(jìn)程啟動時間foreach(S

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

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

47、pplicationClass();/創(chuàng)建對象實例,這時在系統(tǒng)進(jìn)程中會多出一個excel進(jìn)程afterTime=DateTime.Now;/獲取excel啟動結(jié)束的時間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;/在第一個位置添加工作表mySheet=(_Worksheet)myBook.Sheets.Add(missing,missing,missing,missing);mySheet.Name=MySheetFirst;/在第一個位置后面添家一個工作表_WorksheetmySheet1=(_Worksheet)myBook.Sheets.Add(missing,myBook.Sheets1,missing,missing);mySheet1.Name=MySheetEnd;/Add方法允許您將一個

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

50、個頁面的時候進(jìn)程才結(jié)束/可以考慮使用KillExcelProcess()殺掉進(jìn)程/ReleaseComObject方法遞減運行庫可調(diào)用包裝的引用計數(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,暫時只能判斷進(jìn)程啟動時間foreach(System.Diagnostics.ProcessmyProcessinmyProcesses

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

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

55、teTime.Now;/獲取excel啟動結(jié)束的時間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(這是第一個單元格);/增加批注/r.ClearContents();/保留格式清除內(nèi)容r.HorizontalA

58、lignment=Excel.XlHAlign.xlHAlignCenter;/設(shè)置水平對齊方式r.VerticalAlignment=Excel.XlVAlign.xlVAlignBottom;/設(shè)置垂直對齊方式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對象,但在AWeb程序中只有轉(zhuǎn)向另一個頁面的時候進(jìn)程才結(jié)束/可以考慮使用KillExcelProcess()殺掉進(jìn)程/ReleaseComObject方法遞減運行庫可調(diào)用包裝的引用計數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論