![C語(yǔ)言操作Excel復(fù)習(xí)過(guò)程_第1頁(yè)](http://file4.renrendoc.com/view/ea1353b2c59d2f604d61bef070c3f521/ea1353b2c59d2f604d61bef070c3f5211.gif)
![C語(yǔ)言操作Excel復(fù)習(xí)過(guò)程_第2頁(yè)](http://file4.renrendoc.com/view/ea1353b2c59d2f604d61bef070c3f521/ea1353b2c59d2f604d61bef070c3f5212.gif)
![C語(yǔ)言操作Excel復(fù)習(xí)過(guò)程_第3頁(yè)](http://file4.renrendoc.com/view/ea1353b2c59d2f604d61bef070c3f521/ea1353b2c59d2f604d61bef070c3f5213.gif)
![C語(yǔ)言操作Excel復(fù)習(xí)過(guò)程_第4頁(yè)](http://file4.renrendoc.com/view/ea1353b2c59d2f604d61bef070c3f521/ea1353b2c59d2f604d61bef070c3f5214.gif)
![C語(yǔ)言操作Excel復(fù)習(xí)過(guò)程_第5頁(yè)](http://file4.renrendoc.com/view/ea1353b2c59d2f604d61bef070c3f521/ea1353b2c59d2f604d61bef070c3f5215.gif)
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 木質(zhì)地板采購(gòu)合同(2篇)
- 機(jī)器學(xué)習(xí)資源共享合同(2篇)
- 2025年山東商務(wù)職業(yè)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點(diǎn)試題含答案解析
- 2025年嘉興南洋職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點(diǎn)試題含答案解析
- 古代文明的互動(dòng)與影響-第1篇-深度研究
- 數(shù)字經(jīng)濟(jì)對(duì)城市經(jīng)濟(jì)的影響-深度研究
- 漿細(xì)胞白血病并發(fā)癥預(yù)防-深度研究
- 分布式頭結(jié)點(diǎn)管理-深度研究
- 二零二五年度企業(yè)退休人員兼職管理合同
- 2025年度汽車運(yùn)輸合同環(huán)境保護(hù)及節(jié)能減排協(xié)議
- 2025年山西國(guó)際能源集團(tuán)限公司所屬企業(yè)招聘43人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 青海省海北藏族自治州(2024年-2025年小學(xué)六年級(jí)語(yǔ)文)統(tǒng)編版隨堂測(cè)試(上學(xué)期)試卷及答案
- 江蘇省無(wú)錫市2023-2024學(xué)年高三上學(xué)期期終教學(xué)質(zhì)量調(diào)研測(cè)試語(yǔ)文試題(解析版)
- 《民航安全檢查(安檢技能實(shí)操)》課件-第一章 民航安全檢查員職業(yè)道德
- DB34T4826-2024畜禽養(yǎng)殖業(yè)污染防治技術(shù)規(guī)范
- 腰麻課件教學(xué)課件
- 石油化工企業(yè)環(huán)境保護(hù)管理制度預(yù)案
- 2024年甘肅省高考?xì)v史試卷(含答案解析)
- 2024年山東省煙臺(tái)市初中學(xué)業(yè)水平考試地理試卷含答案
- 抗腫瘤治療所致惡心嘔吐護(hù)理
- 農(nóng)業(yè)行政執(zhí)法現(xiàn)狀及相關(guān)法律法規(guī)課件
評(píng)論
0/150
提交評(píng)論