版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第11章學(xué)習(xí)情境:
書(shū)店管理系統(tǒng)數(shù)據(jù)的導(dǎo)入與導(dǎo)出11.1
學(xué)習(xí)情境引入11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔11.3基本知識(shí):使用Word文檔11.4決策與計(jì)劃11.5實(shí)施11.6檢查與評(píng)價(jià)11.1
學(xué)習(xí)情境引入在書(shū)店管理系統(tǒng)中,經(jīng)常涉及數(shù)據(jù)的處理、報(bào)表以及文本的編輯等功能。除了使用應(yīng)用程序本身進(jìn)行顯示、處理之外,還經(jīng)常使用到Word和Excel等辦公軟件。11.1.1項(xiàng)目需求本模塊主要實(shí)現(xiàn)以下功能?!?導(dǎo)出圖書(shū)信息表、入庫(kù)表等數(shù)據(jù)到Excel表中。● 讀取已有的Excel文檔并導(dǎo)入到書(shū)店管理系統(tǒng)指定的某個(gè)表中,例如圖書(shū)信息表?!?將書(shū)店管理系統(tǒng)數(shù)據(jù)庫(kù)中根據(jù)銷(xiāo)售員分類(lèi)的表單數(shù)據(jù)導(dǎo)出到Word文檔。11.1.2展示圖11?1導(dǎo)入導(dǎo)出界面MicrosoftExcel是MicrosoftOffice的一個(gè)組件,是功能強(qiáng)大的電子表格處理軟件,很多文檔就是以Excel的形式保存的。11.1
學(xué)習(xí)情境引入在程序設(shè)計(jì)中,我們往往要?jiǎng)?chuàng)建、訪問(wèn)Excel文件來(lái)獲得數(shù)據(jù)。通過(guò)舉例,簡(jiǎn)要地介紹一下C#
如何使用Excel軟件,設(shè)計(jì)界面如圖11?1
所示。圖11?1導(dǎo)入導(dǎo)出界面
MicrosoftWord也是MicrosoftOffice的一個(gè)重要組件,它是最受歡迎的辦公軟件。它可以幫助我們快速排版、編輯、創(chuàng)建、制表、打印等各類(lèi)用途的文檔。在程序設(shè)計(jì)中,我們往往需要?jiǎng)?chuàng)建Word文檔或把數(shù)據(jù)存儲(chǔ)到Word文檔中。同樣舉例簡(jiǎn)要地介紹一下C#如何使用Word軟件,導(dǎo)出的界面如圖11?2所示。11.1
學(xué)習(xí)情境引入圖11?2導(dǎo)出的Word文檔11.1
學(xué)習(xí)情境引入11.1.3技術(shù)分解無(wú)論多么復(fù)雜的導(dǎo)入、導(dǎo)出數(shù)據(jù)操作,從技術(shù)角度分析,都要遵循這幾步。(1)添加引用。引用庫(kù)位于“COM”選項(xiàng)卡下,名稱(chēng)為MicrosoftExcel12.0ObjectLibrary(MicrosoftWord2007對(duì)應(yīng)的版本號(hào)為12.0)或MicrosoftWord12.0ObjectLibrary(MicrosoftWord2007對(duì)應(yīng)的版本號(hào)為12.0)。(2)數(shù)據(jù)獲取技術(shù)。①使用數(shù)據(jù)庫(kù)中的數(shù)據(jù)獲取技術(shù)。參見(jiàn)第6章。②要讀取Excel文檔中的數(shù)據(jù)。需要添加一個(gè)名稱(chēng)空間System.Data.Oledb。11.1
學(xué)習(xí)情境引入a.用連接字符串參數(shù)實(shí)例化OleDbConnection組件,以連接到Excel文檔。b.用SQL命令參數(shù)實(shí)例化OleDbCommand組件(并指明使用上述SqlConnection組件實(shí)例連接Excel文檔),以執(zhí)行特定的SQL命令。c.用上述OleDbCommand實(shí)例來(lái)實(shí)例化OledbDataAdapter組件。d.實(shí)例化DataSet或DataTable。e.調(diào)用OledbDataAdapter實(shí)例的Fill方法獲取數(shù)據(jù),填充到DataSet或DataTable。11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔
.NET強(qiáng)大的功能使得訪問(wèn)Excel文檔成為了一件相對(duì)簡(jiǎn)單的事情。11.2.1創(chuàng)建Excel文檔若要開(kāi)發(fā)使用MicrosoftOfficeExcel的解決方案,可以與Excel對(duì)象模型提供的對(duì)象進(jìn)行交互。下面介紹最重要的幾個(gè)對(duì)象。(1)Application對(duì)象。ExcelApplication對(duì)象表示整個(gè)應(yīng)用程序。Application對(duì)象公開(kāi)了大量有關(guān)正在運(yùn)行的應(yīng)用程序、應(yīng)用于該實(shí)例的選項(xiàng)以及在該實(shí)例中打開(kāi)的當(dāng)前用戶(hù)的對(duì)象的信息。(2)Workbook對(duì)象。Workbook類(lèi)表示Excel應(yīng)用程序中的單個(gè)工作簿。VisualStudioToolsforOffice通過(guò)提供Microsoft.Office.Tools.Excel.Workbook類(lèi)(使用該類(lèi)可以訪問(wèn)Workbooks集合的所有成員)以及數(shù)據(jù)綁定功能和附加事件來(lái)擴(kuò)展Microsoft.Office.Interop.Excel.Workbook類(lèi)。11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔
(3)Worksheet對(duì)象。Worksheet對(duì)象是Worksheets集合的成員。Worksheets類(lèi)表示Excel應(yīng)用程序中的單個(gè)工作表,Worksheet的許多屬性、方法和事件與Application或Workbook類(lèi)提供的成員完全相同或相似。(4)Range對(duì)象。Range對(duì)象是Excel應(yīng)用程序中最常用的對(duì)象。在能夠處理Excel內(nèi)的任何范圍之前,必須將它表示為Range對(duì)象,并處理該對(duì)象的方法和屬性。Range對(duì)象表示一個(gè)單元格、一行、一列、包含一個(gè)或多個(gè)單元格塊(可以連續(xù),也可以不連續(xù))的單元格選定范圍,甚至多個(gè)工作表中的一組單元格。下面介紹幾個(gè)常用的方法。(1)Add()創(chuàng)建新工作簿。11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔【例11-1】
使用Add()創(chuàng)建新工作簿。this.Application.ApplicationexcelApp;this.Application.WorkbookexcelDoc;
excelApp=newMicrosoft.Office.Interop.Excel.ApplicationClass();
ObjectNothing=Missing.Value;excelDoc=excelApp.Workbooks.Add(Nothing);(2)Open()打開(kāi)現(xiàn)有工作簿?!纠?1-2】使用Open()打開(kāi)現(xiàn)有的C:\Mybook.xls工作簿。this.Application.Workbooks.Open(@"C:\Mybook.xls",missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,
missing,missing);(3)Save()保存工作簿?!纠?1-3】保存所有打開(kāi)的工作簿。foreach(Excel.Workbookwkbinthis.Application.Workbooks){wkb.Save();}11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔(4)SaveAs()保存工作簿如果工作簿以前沒(méi)有保存過(guò),則應(yīng)該改為調(diào)用SaveAs方法,SaveAs方法比Save方法復(fù)雜,使用此方法可以將指定的工作簿保存到新位置,或以新名稱(chēng)保存,并可選擇指定文件格式、密碼、訪問(wèn)模式等。在調(diào)用SaveAs方法之前,可能需要將DisplayAlerts屬性設(shè)置為False,因?yàn)橐阅承└袷奖4鏁r(shí)需要交互。將此屬性設(shè)置為False后,Excel會(huì)全部使用默認(rèn)值?!纠?1-4】
例如SaveAs()保存工作簿。this.SaveAs(@"C:\Book1.xml",Excel.XlFileFormat.xlWorkbookDefault,missing,missing,missing,missing,Excel.XlSaveAsAccessMode.xlNoChange,missing,missing,missing,missing,missing);(5)使用Sheets集合的Add方法,向工作簿中添加新工作表?!纠?1-5】Add方法,向工作簿中添加新工作表。Excel.WorksheetnewWorksheet;newWorksheet=(Excel.Worksheet)Globals.ThisWorkbook.Worksheets.Add(missing,missing,missing,missing);11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔(6)通過(guò)Sheets集合的索引號(hào)引用表,使用Delete()從工作簿中刪除工作表?!纠?1-6】
使用Delete()從工作簿中刪除索引號(hào)為4的工作表。((Excel.Worksheet)this.Application.ActiveWorkbook.Sheets[4]).Delete();(7)通過(guò)Range()和該方法的Value2屬性,獲得A1處的單元格,并賦值?!纠?1-7】獲得A1處的單元格,并賦值為4。
this.Application.Ranger;r=ws.get_Range("A1","A1");r.Value2="4";通過(guò)Cells()單元格的引用【例11-8】建立Worksheets[1]表,并獲取該表B2處的單元格。Microsoft.Office.Interop.Excel.Worksheetworksheet=(Microsoft.Office.Interop.Excel.Worksheet)
workbook.Worksheets[1];worksheet.Cells[1,2];11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔(8)關(guān)閉文檔對(duì)象?!纠?1-9】
關(guān)閉excelDoc文檔。excelDoc.Close(Nothing,Nothing,Nothing);(9)關(guān)閉應(yīng)用程序?qū)ο?。【?1-10】
關(guān)閉excelApp組件。excelApp.Quit();【例11-11】
下面通過(guò)實(shí)例介紹如何創(chuàng)建Excel文檔。(實(shí)現(xiàn)在C盤(pán)根目錄下創(chuàng)建一個(gè)MyExcel.xls文檔。)操作步驟如下所示。①創(chuàng)建一個(gè)Windows窗體應(yīng)用程序,命名為CreateExcelDemo。②設(shè)置窗體和控件屬性如表11?1所示。11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔表11?1 窗體控件屬性表③添加引用如圖11?3所示。引用庫(kù)位于“COM”選項(xiàng)卡下,名稱(chēng)為MicrosoftExcel12.0ObjectLibrary(MicrosoftWord2007對(duì)應(yīng)的版本號(hào)為12.0)。添加后在“解決方案資源管理器”面板的引用項(xiàng)中自動(dòng)多出了3個(gè)引用,如圖11?4所示,分別為Microsoft.Office.Core、Microsoft.Office.Interop.Excel和VBIDE。控件類(lèi)型屬性設(shè)置ButtonName:ButtonCreateText:新建11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔
圖11?3添加引用
圖11?4“解決方案資源管理器”面板11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔④編輯代碼。選中“新建”按鈕雙擊。首先添加如下命名空間。usingMSExcel=Microsoft.Office.Interop.Excel;usingSystem.IO; usingSystem.Reflection;其次在ButtonCreate_Click事件中添加如下代碼。privatevoidButtonCreate_Click(objectsender,EventArgse){objectpath;
//文件路徑變量
MSExcel.ApplicationexcelApp;
//Excel應(yīng)用程序變量
MSExcel.WorkbookexcelDoc;
//Excel文檔變量
path=@"C:\MyExcel.xlsx";
//路徑
excelApp=newMSExcel.ApplicationClass();
//初始化
//如果已存在,則刪除
if(File.Exists((string)path)){File.Delete((string)path);}//由于使用的是COM庫(kù),因此有許多變量需要用Nothing代替
ObjectNothing=Missing.Value;excelDoc=excelApp.Workbooks.Add(Nothing);11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔//使用第一個(gè)工作表作為插入數(shù)據(jù)的工作表
MSExcel.Worksheetws=(MSExcel.Worksheet)excelDoc.Sheets[1];//聲明一個(gè)MSExcel.Range類(lèi)型的變量rMSExcel.Ranger;//獲得A1處的表格,并賦值
r=ws.get_Range("A1","A1");r.Value2="C#基礎(chǔ)教程";//獲得A2處的表格,并賦值
r=ws.get_Range("B2","B2");r.Value2="C#提高教程";//WdSaveFormat為Excel文檔的保存格式
objectformat=MSExcel.XlFileFormat.xlWorkbookDefault;//將excelDoc文檔對(duì)象的內(nèi)容保存為XLS文檔
excelDoc.SaveAs(path,format,Nothing,Nothing,Nothing,Nothing,MSExcel.XlSaveAsAccessMode.xlExclusive,Nothing,Nothing,Nothing,Nothing,Nothing);//關(guān)閉excelDoc文檔對(duì)象
excelDoc.Close(Nothing,Nothing,Nothing);//關(guān)閉excelApp組件對(duì)象
excelApp.Quit();MessageBox.Show(path+"創(chuàng)建完畢");
}⑤運(yùn)行結(jié)果。運(yùn)行程序,結(jié)果如圖11?5所示。打開(kāi)C盤(pán)根目錄下的MyExcel.xls文件,如圖11?6所示。11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔
圖11?5運(yùn)行結(jié)果
圖11?6MyExcel.xls文檔可以看到,已經(jīng)成功地創(chuàng)建了一個(gè)名為MyExcel.xls的Excel文檔。該文檔是以MicrosoftExcel2007默認(rèn)的文檔格式保存的,大小約為8KB。11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔11.2.2訪問(wèn)已有的Excel文檔為了讀取Excel文檔,我們必須了解名稱(chēng)空間System.Data.Oledb。System.Data.Oledb中有3個(gè)對(duì)象分別是OleDbConnection,OleDbCommand,OledbDataAdapter。● OleDbConnection對(duì)象主要是提供連接方式?!?OleDbCommand對(duì)象提供對(duì)目標(biāo)的具體操作方法?!?OledbDataAdapter對(duì)象是對(duì)對(duì)象進(jìn)行不同操作后的返回?cái)?shù)據(jù)集。為了讀取C盤(pán)下MyExcel.xls文件只要以下語(yǔ)句就可以完成。下面就通過(guò)一個(gè)例子來(lái)具體說(shuō)明.NET是如何訪問(wèn)Excel文檔的?!纠?1-12】
讀出C:\MyExcel文件下Sheet1$的內(nèi)容,并用DataGrid控件顯示出來(lái)11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔操作步驟如下:①創(chuàng)建一個(gè)Windows窗體應(yīng)用程序,命名為ExportExcelDemo。②設(shè)置窗體如圖11?7所示及控件屬性設(shè)置如表11?2所示。表11?2窗體控件屬性表圖11?7數(shù)據(jù)界面控件類(lèi)型屬
性
設(shè)
置FormText:訪問(wèn)Excel數(shù)據(jù)ButtonName:ButtonDisplayText:顯示DataGridName:DataGridImport11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔③添加引用同【例11?21】。④編輯代碼。選中“導(dǎo)入”按鈕雙擊。首先添加如下命名空間。usingSystem.Data.OleDb;usingSystem.Data.SqlClient其次在ButtonDisplay_Click事件中添加如下代碼。privatevoidButtonDisplay_Click(objectsender,EventArgse){stringstrCon="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=c:\\MyExcel;ExtendedProperties=Excel8.0;";
OleDbConnectionmyConn=newOleDbConnection(strCon);
OleDbCommandmyComm=newOleDbCommand("SELECT*
FROM[Sheet1$]",myConn);OleDbDataAdaptermyData=newOleDbDataAdapter(myComm);
DataSetmyds=newDataSet();myData.Fill(myds);DataGridImport.DataSource=myds.Tables[0].DefaultView;}11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔⑤運(yùn)行結(jié)果如圖11?8所示。
圖11?8運(yùn)行結(jié)果如果想讀出Sheet2的內(nèi)容,把Sheet1$改成Sheet2$即可。11.2.3演練1.實(shí)驗(yàn)名稱(chēng).NET對(duì)Excel文檔的訪問(wèn)。11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔2.實(shí)驗(yàn)?zāi)康膱D11?9運(yùn)行界面● 熟悉使用C#創(chuàng)建一個(gè)Excel文檔的方法?!?熟悉訪問(wèn)已存在的Excel文檔的方法。3.實(shí)驗(yàn)內(nèi)容使用C#創(chuàng)建Excel文檔并訪問(wèn)該文檔。運(yùn)行界面如圖11?9所示。實(shí)驗(yàn)指導(dǎo):參考【例11?31】和【例11?42】。4.實(shí)驗(yàn)步驟由讀者寫(xiě)出。5.實(shí)驗(yàn)總結(jié)由讀者寫(xiě)出。
圖11?9運(yùn)行界面11.2基本知識(shí)1:使用C#創(chuàng)建Excel文檔11.2.4自測(cè)1.填空題(1)在.NET中訪問(wèn)Excel文檔,需要為項(xiàng)目添加對(duì)
的引用。(2)為了讀取Excel文檔,基本的連接字符串是
。2.思考題(1)在.NET中訪問(wèn)Excel文檔的有哪些常用的方法?11.3基本知識(shí):使用Word文檔11.3.1Word文檔的幾個(gè)交互對(duì)象以及常用方法若要開(kāi)發(fā)使用MicrosoftOfficeWord的解決方案,可以與Word對(duì)象模型提供的對(duì)象進(jìn)行交互。Word提供了數(shù)百個(gè)可與之交互的對(duì)象。下面簡(jiǎn)單介紹幾個(gè)頂級(jí)交互對(duì)象。(1)Application對(duì)象。Application對(duì)象表示整個(gè)應(yīng)用程序,是其他所有對(duì)象的父級(jí)。可以使用該對(duì)象的屬性和方法來(lái)控制Word環(huán)境。(2)Document對(duì)象。每個(gè)Document對(duì)象表示單個(gè)Word文檔,當(dāng)用戶(hù)打開(kāi)文檔或創(chuàng)建新文檔時(shí),就創(chuàng)建了新的Microsoft.Office.Interop.Word.Document對(duì)象。下面是幾個(gè)基本方法。①Add()方法創(chuàng)建新文檔。11.3基本知識(shí):使用Word文檔【例11-13】創(chuàng)建新文檔。this.Application.Documents.Add(refmissing,refmissing,refmissing,refmissing);②Open()方法打開(kāi)已有的文檔?!纠?1-14】打開(kāi)C:\MyDocument.doc"文檔。objectfileName=@"C:\MyDocument.doc";this.Application.Documents.Open(reffileName,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing);③Save()保存對(duì)指定Document所做的更改?!纠?1-15】
保存與項(xiàng)目關(guān)聯(lián)的文檔。this.Save();【例11-16】
保存活動(dòng)文檔。this.Application.ActiveDocument.Save();④SaveAs()可以用一個(gè)不同的文件名保存文檔。此方法要求指定新的文件名,但其他參數(shù)是可選的。11.3基本知識(shí):使用Word文檔【例11-17】
保存C:\MyDocument.doc"文檔。objectfileName=@"C:\Test\MyDocument.doc";this.SaveAs(reffileName,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing);注意:●如果該文件夾中已存在同名稱(chēng)的文件,則會(huì)改寫(xiě)該文件而不顯示任何提示。●若要使用默認(rèn)名稱(chēng)保存文檔,則在C:驅(qū)動(dòng)器上名為T(mén)est的目錄中必須存在一個(gè)名為MyDocument.doc的文檔?!袢粢褂眯旅Q(chēng)保存文檔,則在C:驅(qū)動(dòng)器上必須存在一個(gè)名為T(mén)est的目錄。(3)Range對(duì)象。Range對(duì)象用來(lái)定義范圍,該對(duì)象表示文檔中的一個(gè)連續(xù)的區(qū)域,由一個(gè)起始字符位置和一個(gè)結(jié)束字符位置定義。在向一個(gè)范圍的末尾插入文本時(shí),Word會(huì)自動(dòng)擴(kuò)展該范圍以包含插入的文本。【例11-18】
創(chuàng)建包括文檔中頭六個(gè)字符的新Range對(duì)象。objectstart=0;objectend=6;Word.Rangerng=this.Range(refstart,refend);11.3基本知識(shí):使用Word文檔下面介紹常用的Select()方法?!纠?1-19】
使用Range的Select方法選擇整個(gè)文檔。objectstart=this.Content.Start;objectend=this.Content.End;this.Range(refstart,refend).Select();(4)Selection對(duì)象。Selection對(duì)象表示MicrosoftOfficeWord2003文檔中當(dāng)前選定的區(qū)域。在Word用戶(hù)界面中執(zhí)行某項(xiàng)操作(例如,對(duì)文本進(jìn)行加粗)時(shí),應(yīng)首先選擇或突出顯示目標(biāo)文本,然后應(yīng)用格式設(shè)置??稍诖a中以相同的方式使用Selection對(duì)象:先定義Selection,然后執(zhí)行操作??梢允褂肧election對(duì)象選擇、操作和打印文檔中的文本以及設(shè)置文本的格式。Selection對(duì)象始終存在于文檔中。如果未選中任何對(duì)象,它表示插入點(diǎn)。11.3基本知識(shí):使用Word文檔Selection對(duì)象與Range對(duì)象共享著很多成員。二者之間的主要區(qū)別在于:Selection對(duì)象始終在用戶(hù)界面中返回對(duì)所選內(nèi)容的引用,而Range對(duì)象允許在用戶(hù)界面中不顯示范圍的情況下處理文本。Range對(duì)象的主要優(yōu)勢(shì)有3點(diǎn)。● Range對(duì)象通常只需要較少行數(shù)的代碼就能完成給定任務(wù)?!?Range對(duì)象不會(huì)引起與Word必須移動(dòng)或改變活動(dòng)文檔中的突出顯示相關(guān)的系統(tǒng)開(kāi)銷(xiāo)?!?Range對(duì)象比Selection對(duì)象的功能更強(qiáng)。①Tables集合。Tables集合是Document、Selection和Range對(duì)象的成員,通過(guò)它可以創(chuàng)建一個(gè)表。②Add()在指定的范圍添加表。11.3基本知識(shí):使用Word文檔【例11-20】
使用Add方法在文檔開(kāi)頭添加一個(gè)由三行四列的表。objectstart=0;objectend=0;Word.RangetableLocation=this.Range(refstart,refend);this.Tables.Add(tableLocation,3,4,refmissing,refmissing);【例11-21】
向表中添加行。objectbeforeRow=this.Tables[1].Rows[1];this.Tables[1].Rows.Add(refbeforeRow);【例11-22】
向表中添加列。objectbeforeColumn=this.Tables[1].Columns[1];this.Tables[1].Columns.Add(refbeforeColumn);
通過(guò)Range屬性可以設(shè)置表的格式?!纠?1-23】
使用Style屬性對(duì)表應(yīng)用Word內(nèi)置樣式之一。objectstyleName="TableGrid8";this.Tables[1].Range.Font.Size=8;this.Tables[1].set_Style(refstyleName);11.3基本知識(shí):使用Word文檔③Cell()單元格的引用?!纠?1-24】
向第一單元格中添加文本并設(shè)置右對(duì)齊格式。Word.Cellcell=this.Tables[1].Cell(1,1);cell.Range.Text="你好";cell.Range.ParagraphFormat.Alignment=Word.WdParagraphAlignment.wdAlignParagraphRight;11.3.2用VisualStudio創(chuàng)建和訪問(wèn)已有的Word文檔下面通過(guò)實(shí)例來(lái)演示.NET如何創(chuàng)建和訪問(wèn)已有的Word文檔。【例11-25】下面通過(guò)完整實(shí)例演示如何創(chuàng)建Word2007版本的Word文檔并輸入文本內(nèi)容。如圖11?11和圖11?12所示。
圖11?11圖11?12
創(chuàng)建Word文檔的界面運(yùn)行結(jié)果11.3基本知識(shí):使用Word文檔操作步驟如下所示。①創(chuàng)建一個(gè)Windows窗體應(yīng)用程序,命名為CreateWordDemo。②設(shè)置窗體及控件屬性如表11?3所示。表11?3 窗體控件屬性表③添加引用。引用的庫(kù)位于“COM”選項(xiàng)卡下,名稱(chēng)為MicrosoftWord12.0ObjectLibrary(MicrosoftWord2007對(duì)應(yīng)的版本號(hào)為12.0)。控件類(lèi)型屬性設(shè)置FormText:創(chuàng)建Word文檔ButtonName:ButtonCreateText:創(chuàng)建11.3基本知識(shí):使用Word文檔添加后“解決方案資源管理器”面板的引用項(xiàng)中自動(dòng)多出了3個(gè)引用,如圖11?13和圖11?14所示。分別為Microsoft.Office.Core、Word和VBIDE。
圖11?13添加引用圖11?14“解決方案資源管理器”面板11.3基本知識(shí):使用Word文檔④編輯代碼。選中“創(chuàng)建”按鈕雙擊。首先添加如下命名空間。usingMSWord=Microsoft.Office.Interop.Word;usingSystem.IO;usingSystem.Reflection;其次ButtonCreate_Click事件中添加如下代碼。
privatevoidButtonCreate_Click(objectsender,EventArgse)
{
stringstrContent;objectpath;
//文件路徑變量
MSWord.ApplicationwordApp;
//Word應(yīng)用程序變量
MSWord.DocumentwordDoc;
//Word文檔變量
path=@"C:\MyWord.doc";
//路徑
wordApp=newMSWord.ApplicationClass();
//初始化
//如果已存在,則刪除
if(File.Exists((string)path))
{
File.Delete((string)path);
}
//由于使用的是COM庫(kù),因此有許多變量需要用Missing.Value代替ObjectNothing=Missing.Value;
wordDoc=wordApp.Documents.Add(refNothing,refNothing,refNothing,refNothing);strContent="使用C#向Word文檔中寫(xiě)入第一行文本\n";11.3基本知識(shí):使用Word文檔wordDoc.Paragraphs.Last.Range.Text=strContent;
strContent="向Word文檔中寫(xiě)入第二行文本";
wordDoc.Paragraphs.Last.Range.Text=strContent;
//WdSaveFormat為Word文檔的保存格式
objectformat=MSWord.WdSaveFormat.wdFormatDocument;
//將wordDoc文檔對(duì)象的內(nèi)容保存為DOC文檔
wordDoc.SaveAs(refpath,refformat,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing);
//關(guān)閉wordDoc文檔對(duì)象
wordDoc.Close(refNothing,refNothing,refNothing);
//關(guān)閉wordApp組件對(duì)象
wordApp.Quit(refNothing,refNothing,refNothing);
MessageBox.Show(path+"創(chuàng)建完畢");
}⑤運(yùn)行結(jié)果。運(yùn)行程序,結(jié)果彈出窗口如圖11?15所示。打開(kāi)C盤(pán)根目錄,如圖11?16所示。11.3基本知識(shí):使用Word文檔
圖11?15提示信息圖11?16創(chuàng)建文檔打開(kāi)C盤(pán)根目錄下的MyWord.doc,如圖11?17所示??梢钥吹?,已經(jīng)成功地創(chuàng)建了一個(gè)名為MyWord.doc的Word文檔并輸入了文本內(nèi)容。該文檔是以MicrosoftWord2003默認(rèn)的文檔格式保存的,大小約為22KB。11.3基本知識(shí):使用Word文檔打開(kāi)C盤(pán)根目錄下的MyWord.doc,如圖11?17所示。可以看到,已經(jīng)成功地創(chuàng)建了一個(gè)名為MyWord.doc的Word文檔并輸入了文本內(nèi)容。該文檔是以MicrosoftWord2003默認(rèn)的文檔格式保存的,大小約為22KB?!纠?1-26】下面通過(guò)在數(shù)據(jù)庫(kù)bookstore的out_info表中,根據(jù)指定的經(jīng)辦人導(dǎo)出其經(jīng)辦的出庫(kù)記錄來(lái)演示如何在Word文檔中創(chuàng)建一個(gè)表格。運(yùn)行界面如圖11?18所示。圖11?17運(yùn)行結(jié)果圖11?18運(yùn)行界面11.3基本知識(shí):使用Word文檔操作步驟如下所示。①創(chuàng)建一個(gè)Windows窗體應(yīng)用程序,命名為ExportWordDemo。②設(shè)置窗體及控件屬性如表11?4所示。表11?4 窗體控件屬性表控件類(lèi)型屬性設(shè)置控件類(lèi)型屬性設(shè)置FormText:導(dǎo)出Word文檔labelName:labelAgentText:經(jīng)辦人ButtonName:ButtonDisplayText:顯示textBoxName:SqlTextBoxAgentNameButtonName:ButtonExportText:導(dǎo)出dataGridViewName:dataGridViewDisplay11.3基本知識(shí):使用Word文檔添加對(duì)MicrosoftWord12.0ObjectLibrary的引用。如圖11.10和11.11所示。編輯代碼。usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Data.SqlClient;usingOffice=Microsoft.Office.Core;usingMSWord=Microsoft.Office.Interop.Word;usingSystem.IO;usingSystem.Reflection;namespaceExportWordDemo{publicpartialclassForm1:Form{DataTabledt=newDataTable();stringmc;//經(jīng)辦人名稱(chēng)變量
publicForm1()
11.3基本知識(shí):使用Word文檔
{InitializeComponent();}privatevoidButtonDisplay_Click(objectsender,EventArgse){SqlConnectionconn=newSqlConnection(@"server=.\SQLEXPRESS;database=bookstore;IntegratedSecurity=sspi;");conn.Open();mc=SqlTextBoxAgentName.Text;SqlDataAdapterda=newSqlDataAdapter("select*fromout_infowhere經(jīng)辦人LIKE'"+mc+"'",conn);da.Fill(dt);dataGridViewDisplay.DataSource=dt;conn.Close();}privatevoidButtonExport_Click(objectsender,EventArgse){objectpath;//文件路徑變量
MSWord.ApplicationwordApp;//Word應(yīng)用程序變量
MSWord.DocumentwordDoc;//Word文檔變量
path=@"C:\MyWord.doc";//指定文件路徑
wordApp=newMSWord.ApplicationClass();//初始化
//如果已存在,則刪除
11.3基本知識(shí):使用Word文檔if(File.Exists((string)path)){File.Delete((string)path);}ObjectNothing=Missing.Value;wordDoc=wordApp.Documents.Add(refNothing,refNothing,refNothing,refNothing);//定義一個(gè)Word中的表格對(duì)象MSWord.Tabletable=wordDoc.Tables.Add(wordApp.Selection.Range,dt.Rows.Count+1,dt.Columns.Count,refNothing,refNothing);for(intk=0;k<dataGridView1.Columns.Count;k++)table.Cell(1,k+1).Range.Text=this.dataGridView1.Columns[k].HeaderText.ToString();//使用兩層循環(huán)填充表格的內(nèi)容
for(inti=2;i<=dt.Rows.Count+1;i++){for(intj=1;j<dt.Columns.Count+1;j++){MSWord.Cellcell=table.Cell(i,j);cell.Range.ParagraphFormat.Alignment=MSWord.WdParagraphAlignment.wdAlignParagraphLeft;table.Cell(i,j).Range.Text=this.dt.Rows[i-2][j-1].ToString();}}
11.3基本知識(shí):使用Word文檔wordDoc.Paragraphs.Last.Range.Text="日期:"+DateTime.Now.ToString();;wordDoc.Paragraphs.Last.Range.ParagraphFormat.Alignment=MSWord.WdParagraphAlignment.wdAlignParagraphRight;//文檔右對(duì)齊
objectformat=MSWord.WdSaveFormat.wdFormatDocument;wordDoc.SaveAs(refpath,refformat,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing,refNothing);wordDoc.Close(refNothing,refNothing,refNothing);wordApp.Quit(refNothing,refNothing,refNothing);MessageBox.Show(path+"創(chuàng)建完畢");}}}打開(kāi)C盤(pán)根目錄下的MyWord.doc文檔,結(jié)果如圖11?19所示。圖11?19MyWord.doc文檔11.3基本知識(shí):使用Word文檔很多時(shí)候,會(huì)有很多信息存放在Word文檔中,有時(shí)我們需要訪問(wèn)這些信息另作它用?!纠?1-27】下面通過(guò)完整實(shí)例演示如何訪問(wèn)已有的Word文檔,如圖11?20和圖11?21所示。
圖11?20創(chuàng)建Word文檔的界面圖11?21運(yùn)行結(jié)果操作步驟如下所示。①創(chuàng)建一個(gè)Windows窗體應(yīng)用程序,命名為AcessWordDemo。②設(shè)置窗體及控件屬性如表11?5所示。11.3基本知識(shí):使用Word文檔表11?5 窗體控件屬性表③添加對(duì)MicrosoftWord12.0ObjectLibrary的引用。如圖11-10和11-11所示。④編輯代碼。選中“訪問(wèn)”按鈕雙擊。首先添加如下命名空間。usingMSWord=Microsoft.Office.Interop.Word;usingSystem.IO;usingSystem.Reflection;控件類(lèi)型屬性設(shè)置FormText:訪問(wèn)Word文檔ListBoxName:listBoxDisplayMultiLine:TrueButtonName:ButtonVisitText:訪問(wèn)11.3基本知識(shí):使用Word文檔其次buttonVisit_Click事件中添加如下代碼。
privatevoidbuttonVisit_Click(objectsender,EventArgse){OpenFileDialogopd=newOpenFileDialog();if(opd.ShowDialog()==DialogResult.OK){MSWord.ApplicationClasswordApp=newWord.ApplicationClass();MSWord.Documentworddoc=null;objectmissing=System.Reflection.Missing.Value;objectFileName=opd.FileName;worddoc=wordapp.Documents.Open(refFileName,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing);this.listBoxDisplay.Text=worddoc.Content.Text;
worddoc.Close(refmissing,refmissing,refmissing);
wordapp.Quit(refmissing,refmissing,refmissing);}}11.3基本知識(shí):使用Word文檔如果想要讀取一段或一句內(nèi)容,只要把語(yǔ)句this.textBox1.Text=worddoc.Content.Text;改為doc.Paragraphs[i].Range.Text.Trim();或docdoc.Sentences[i].Range.Text.Trim();即可。對(duì)于Word文檔的其他操作,可參考相關(guān)書(shū)籍。11.3.3演練1.實(shí)驗(yàn)名稱(chēng)圖11?23運(yùn)行界面.NET創(chuàng)建并訪問(wèn)Word文檔2.實(shí)驗(yàn)?zāi)康摹?熟悉使用C#創(chuàng)建一個(gè)Word文檔● 熟悉將數(shù)據(jù)庫(kù)中符合條件的記錄導(dǎo)出到Word文檔中。3.實(shí)驗(yàn)內(nèi)容11.3基本知識(shí):使用Word文檔根據(jù)經(jīng)辦人分類(lèi)導(dǎo)出入庫(kù)單中不同經(jīng)辦人的入庫(kù)記錄。界面如圖11?23所示。4.實(shí)驗(yàn)步驟由讀者寫(xiě)出。5.實(shí)驗(yàn)總結(jié)由讀者寫(xiě)出。11.3.4自測(cè)1.填空題圖11?23運(yùn)行界面(1)在.NET中訪問(wèn)Word文檔,需要為項(xiàng)目添加對(duì)
的引用。(2)為了讀取Excel文檔,基本的連接字符串是
。2.思考題(1)在.NET中訪問(wèn)Word文檔的有哪些對(duì)象及常用的方法和屬性?11.4決策與計(jì)劃本部分主要學(xué)習(xí)了.NET對(duì)Excel文檔和Word文檔的使用。本小節(jié)通過(guò)一個(gè)案例來(lái)學(xué)習(xí).NET對(duì)Excel文檔導(dǎo)入和導(dǎo)出。主要包括兩大操作,一方面是訪問(wèn)已存在的Excel文檔并把數(shù)據(jù)導(dǎo)入到已建好的數(shù)據(jù)庫(kù)中,另一方面是把數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出到Excel文檔中。導(dǎo)入部分,首先是訪問(wèn)已經(jīng)存在的Excel文檔,把數(shù)據(jù)讀到緩存表中,然后是將緩存表的數(shù)據(jù)寫(xiě)入到數(shù)據(jù)庫(kù)中;導(dǎo)出剛好相反,首先是把數(shù)據(jù)庫(kù)中的數(shù)據(jù)讀到緩存中,然后是將緩存表的數(shù)據(jù)寫(xiě)入到Excel文檔中?!纠?1-28】通過(guò)實(shí)例演示.NET對(duì)Excel文檔導(dǎo)入和導(dǎo)出。單擊【讀取Excel】按鈕,彈出窗口如圖11?25所示。單擊【導(dǎo)出Excel】按鈕,彈出窗口圖11?26所示。11.4決策與計(jì)劃
圖11?25讀取界面圖11?26導(dǎo)出界面單擊【導(dǎo)入Sql】按鈕,可導(dǎo)入數(shù)據(jù)庫(kù)中。11.5實(shí)施操作步驟如下:①創(chuàng)建一個(gè)Windows窗體應(yīng)用程序,命名為ExcelDataDemo。②設(shè)置窗體及控件屬性如表11?6所示。表11?6 窗體控件屬性表控件類(lèi)型屬性設(shè)置控件類(lèi)型屬性設(shè)置FormText:Excel數(shù)據(jù)的導(dǎo)入導(dǎo)出ButtonButtonName:excelButtonReadText:讀ExceldataGridViewName:dataGridViewDisplayButtonName:ExcelButtonExportText:導(dǎo)出Excel11.5實(shí)施③添加對(duì)MicrosoftExcel11.0ObjectLibrary的引用。④編輯代碼。完整代碼如下所示。usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingExcel=Microsoft.Office.Interop.Excel;usingOffice=Microsoft.Office.Core;usingSystem.Reflection;usingSystem.Data.OleDb;usingSystem.Data.SqlClient;usingSystem.IO;namespaceExcelApplication{publicpartialclassForm1:Form{
11.5實(shí)施DataTabledt=newDataTable();publicForm1(){InitializeComponent();}privatevoidexcelButtonRead_Click(objectsender,EventArgse){stringstrCon;stringfName;//文檔路徑變量
OpenFileDialogofd=newOpenFileDialog();ofd.Title="請(qǐng)選擇將導(dǎo)出的EXCEL文件存放路徑";ofd.Filter="Excel文檔(*.xls)|*.xls";if(ofd.ShowDialog()==DialogResult.OK){fName=ofd.FileName.Substring(0,ofd.FileName.IndexOf("."));strCon="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+fName+";ExtendedProperties=Excel8.0;";OleDbConnectionolecon=newOleDbConnection(strCon);OleDbDataAdapteroda=newOleDbDataAdapter("SELECT*FROM[Sheet1$]",strCon);oda.Fill(dt);dataGridViewDisplay.DataSource=dt;}}11.5實(shí)施privatevoidsqlButtonImport_Click(objectsender,EventArgse){SqlConnectionconn=newSqlConnection(@"server=.\SQLEXPRESS;database=bookstore;
IntegratedSecurity=sspi;");conn.Open();for(inti=0;i<dt.Rows.Count;i++){intid=Convert.ToInt32(this.dt.Rows[i][0].ToString());stringmc=Convert.ToString(this.dt.Rows[i][1].ToString());stringzz=Convert.ToString(this.dt.Rows[i][2].ToString());stringcbsz=Convert.ToString(this.dt.Rows[i][3].ToString());stringcbsj=Convert.ToString(this.dt.Rows[i][4].ToString());stringisbn=Convert.ToString(this.dt.Rows[i][5].ToString());stringdj=Convert.ToString(this.dt.Rows[i][6].ToString());stringkb=Convert.ToString(this.dt.Rows[i][7].ToString());stringbc=Convert.ToString(this.dt.Rows[i][8].ToString());stringjj=Convert.ToString(this.dt.Rows[i][9].ToString())
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 介紹居間合同模板
- 會(huì)議公司合同范例
- 委托代辦案件合同范例
- 房東終止租房合同范例
- 培訓(xùn)教育股東合同范例
- 修改利用合同范例
- 學(xué)生兼職工合同范例
- 廣告物料加工合同范例
- 子女撫養(yǎng)合同模板
- 北京勞動(dòng)合同模板1998
- 物業(yè)服務(wù)集團(tuán)全員品質(zhì)督導(dǎo)策劃方案
- 建筑設(shè)計(jì)基礎(chǔ)(ppt)課件
- 半導(dǎo)體芯片項(xiàng)目商業(yè)計(jì)劃書(shū)范文參考
- 邯鄲市政府采購(gòu)辦事指南
- 智能交通控制的課程設(shè)計(jì)
- 城市初期雨水污染治理
- 在護(hù)林員培訓(xùn)班上的講話(huà)護(hù)林員會(huì)議講話(huà)稿.doc
- 材料科學(xué)基礎(chǔ)-第7章-三元相圖
- (完整word版)高頻變壓器的設(shè)計(jì)
- 公路工程2018各項(xiàng)費(fèi)用的計(jì)算程序及計(jì)算方式
- 戶(hù)外急救知識(shí)(必備)
評(píng)論
0/150
提交評(píng)論