• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    自動(dòng)化技術(shù)在生成數(shù)據(jù)報(bào)告中的應(yīng)用

    2018-01-29 07:36:50孫海民姜學(xué)東計(jì)大杰于萬(wàn)國(guó)
    實(shí)驗(yàn)室研究與探索 2017年12期
    關(guān)鍵詞:報(bào)告方法

    孫海民, 姜學(xué)東, 計(jì)大杰, 于萬(wàn)國(guó)

    (河北民族師范學(xué)院 數(shù)字與計(jì)算機(jī)科學(xué)學(xué)院,河北 承德 067000)

    0 引 言

    隨著大數(shù)據(jù)產(chǎn)業(yè)發(fā)展,在可視化數(shù)據(jù)結(jié)果時(shí),人們希望將分析結(jié)果如文本、圖片、表格、數(shù)字等保存到文件,自動(dòng)生成數(shù)據(jù)分析報(bào)告。筆者調(diào)查90%以上的數(shù)據(jù)分析管理系統(tǒng)存在這樣需求。文獻(xiàn)調(diào)研發(fā)現(xiàn)90%的MS Office自動(dòng)化客戶端項(xiàng)目都使用VBA開(kāi)發(fā),如《基于Excel VBA的漁具選擇性分析SELECT模型實(shí)現(xiàn)》[1]《基于Excel的水泵性能試驗(yàn)數(shù)據(jù)處理的VBA開(kāi)發(fā)》[2]《利用VBA技術(shù)和EndNote軟件建立查新報(bào)告數(shù)據(jù)庫(kù)》[3]。使用C++開(kāi)發(fā)Microsoft Office自動(dòng)化客戶端研究很少,并且存在設(shè)計(jì)缺陷。以VC開(kāi)發(fā)環(huán)境下生成Word文件為例,有人提出將數(shù)據(jù)分析結(jié)果寫(xiě)入臨時(shí)文件,再通過(guò)VBA從臨時(shí)文件中讀取數(shù)據(jù)并寫(xiě)入Word中[4]。由于使用臨時(shí)文件和VBA會(huì)造成應(yīng)用程序工作效率降低,究其原因是人們對(duì)自動(dòng)化(Automation)技術(shù)研究不足。C++作為主流軟件開(kāi)發(fā)語(yǔ)言在開(kāi)發(fā)MS Office自動(dòng)化客戶端方面研究不足。另外,已有文獻(xiàn)關(guān)于自動(dòng)化技術(shù)和MS Office組件對(duì)象模型研究不夠全面和深入。深入研究自動(dòng)化技術(shù)、MS Office組件對(duì)象模型,將數(shù)據(jù)結(jié)果自動(dòng)保存到文件中的技術(shù)具有現(xiàn)實(shí)意義。本文將結(jié)合理論知識(shí)和實(shí)踐應(yīng)用兩個(gè)方面,提出一種基于自動(dòng)化技術(shù)自動(dòng)生成數(shù)據(jù)報(bào)告文件的解決方案。

    1 自動(dòng)化技術(shù)

    1.1 COM技術(shù)

    MS Office組件是基于自動(dòng)化技術(shù)的,開(kāi)發(fā)人員利用這項(xiàng)技術(shù)可以在應(yīng)用程序中調(diào)用組件方法和服務(wù),利用現(xiàn)有組件功能達(dá)到自己的目的[5]。例如在應(yīng)用程序中調(diào)用Excel對(duì)象插入圖表實(shí)現(xiàn)數(shù)據(jù)可視化。自動(dòng)化技術(shù)中提供服務(wù)的部分稱服務(wù)器(也稱為自動(dòng)化組件)例如Word、Excel等,調(diào)用自動(dòng)化組件服務(wù)的應(yīng)用程序稱為客戶端。自動(dòng)化組件由通過(guò)COM接口為客戶端提供服務(wù),每個(gè)自動(dòng)化對(duì)象都會(huì)對(duì)外公開(kāi)COM接口,對(duì)客戶端來(lái)說(shuō)組件接口是已知的。一個(gè)COM接口包含了功能上相關(guān)的一組函數(shù),客戶端獲得COM接口指針后,便可以調(diào)用自己所期望的函數(shù)以利用其功能。IUnknown是COM的基本接口,所有COM接口都從該接口繼承。它有QueryInterface、AddRef和Release三個(gè)方法,第一個(gè)方法用來(lái)查詢COM對(duì)象的其它接口,第二第三個(gè)方法用于對(duì)象引用計(jì)數(shù)。生存期控制和接口查詢是IUnknown接口兩個(gè)重要功能[6]。

    1.2 自動(dòng)化技術(shù)

    自動(dòng)化是基于IDispatch接口的COM,IDispatch接口繼承IUnknown接口。自動(dòng)化技術(shù)繼承COM優(yōu)點(diǎn),簡(jiǎn)化COM底層細(xì)節(jié),還提供一組專用于自動(dòng)化的數(shù)據(jù)類型等[7]。自動(dòng)化對(duì)象是實(shí)現(xiàn)IDispatch接口的COM對(duì)象,該接口包含GetIDsOfNames、GetTypeInfo、GetTypeInfoCount和Invoke 4個(gè)方法。通過(guò)GetTypeInfoCount方法可以判斷對(duì)象是否提供類型信息,如果對(duì)象提供類型信息,客戶端調(diào)用GetTypeInfo方法就可以獲取到類型信息,如CLSID、接口ID、成員函數(shù)等。GetIDsOfNames方法的功能是根據(jù)名字返回方法或者屬性的DISPID,客戶端以DISPID調(diào)用Invoke方法從而獲得對(duì)象提供的功能。圖1所示一個(gè)自動(dòng)化對(duì)象模型。

    圖1 自動(dòng)化對(duì)象示例圖

    1.3 類型庫(kù)

    客戶端在調(diào)用自動(dòng)化組件功能時(shí),必須獲取自動(dòng)化組件對(duì)象屬性和方法的相關(guān)信息[8]。自動(dòng)化技術(shù)使用類型庫(kù)(tlb文件類型)來(lái)保存這些信息。除此之外,OCX、OlB、DLL和EXE等文件也可以保存類型信息。使用OLE Object Viewer可查看組件類型庫(kù)信息。

    1.4 調(diào)用方式

    客戶端調(diào)用自動(dòng)化組件對(duì)象有早綁定和晚綁定兩種方式。早綁定是在編譯期間就確定了調(diào)用組件對(duì)象相關(guān)信息,如方法名、參數(shù)等,通過(guò)導(dǎo)入類型庫(kù)來(lái)實(shí)現(xiàn),是靜態(tài)綁定。晚綁定是應(yīng)用程序在運(yùn)行時(shí)根據(jù)對(duì)象屬性或方法名調(diào)用GetIDsOfNames方法獲取DISPID,再調(diào)用接口的Invoke方法,是動(dòng)態(tài)綁定。

    1.5 事件通知

    自動(dòng)化組件能否將自身狀態(tài)變化通知給客戶端?例如當(dāng)切換EXCEL工作表時(shí),客戶端能夠感知到EXCEL組件對(duì)象的狀態(tài)變化,以便做出相應(yīng)處理,如保存當(dāng)前工作表數(shù)據(jù)防止丟失。在自動(dòng)化技術(shù)中通過(guò)事件通知(Events)來(lái)實(shí)現(xiàn)。

    事件通知傳出接口,它包含一組函數(shù),每個(gè)函數(shù)對(duì)應(yīng)一個(gè)事件。事件通知的接口實(shí)現(xiàn)是由客戶端的捕獲器來(lái)完成的。自動(dòng)化技術(shù)中通過(guò)IConnectionPointContainer和IConnectionPoint接口以連接點(diǎn)的方式來(lái)實(shí)現(xiàn)事件通知和處理。第1個(gè)接口用于對(duì)連接點(diǎn)的管理,該接口FindConnectionPoint方法根據(jù)事件通知接口ID返回第2個(gè)接口指針,將事件通知與第2個(gè)接口關(guān)聯(lián)起來(lái)。第2個(gè)接口的Advise方法將客戶端的事件捕獲器關(guān)聯(lián)起來(lái),這樣就形成“事件通知-連接點(diǎn)-捕獲器”的關(guān)聯(lián)。當(dāng)組件對(duì)象狀態(tài)改變時(shí),事件捕獲器收到事件并進(jìn)行處理。圖2所示客戶端處理自動(dòng)化組件事件通知的過(guò)程。

    2 MFC對(duì)自動(dòng)化技術(shù)的支持

    2.1 自動(dòng)化對(duì)象開(kāi)發(fā)

    如果從頭開(kāi)始開(kāi)發(fā)C++自動(dòng)化對(duì)象不僅效率低而且非常繁瑣[9][10]。VC++可以創(chuàng)建支持自動(dòng)化特性的工程,該工程會(huì)維護(hù)一個(gè)idl文件,該文件記錄了工程中所有自動(dòng)化對(duì)象、接口及其屬性方法等信息。利用MFC添加類型向?qū)r(shí),開(kāi)發(fā)者可以指定“自動(dòng)化”選項(xiàng),從而創(chuàng)建自動(dòng)化接口及從CCmdTarget類派生的自動(dòng)化類。MFC封裝了所有自動(dòng)化對(duì)象所必須的一些代碼,簡(jiǎn)化了開(kāi)發(fā)自動(dòng)化對(duì)象過(guò)程。

    圖2 自動(dòng)化客戶端處理組件事件通知時(shí)序圖

    2.2 自動(dòng)化對(duì)象調(diào)用

    MFC提供了COleDispatchDriver類實(shí)現(xiàn)對(duì)自動(dòng)化對(duì)象IDispatch接口的處理。當(dāng)用Class Wizard導(dǎo)入組件類型庫(kù)時(shí),Wizard自動(dòng)創(chuàng)建組件接口的COleDispatchDriver包裝類,組件接口的屬性和方法被轉(zhuǎn)換為該類的成員函數(shù),其操作過(guò)程如下:

    (1)在Class View視圖右擊,在級(jí)聯(lián)菜點(diǎn)擊“添加”,鼠標(biāo)指向“類”。

    (2)在“添加類”對(duì)話框左邊窗格中,選擇“Visual C++|MFC”選項(xiàng),在右邊窗格中選擇“TypeLib中的MFC類”,點(diǎn)擊“打開(kāi)”按鈕。

    (3)在“從類型庫(kù)添加類向?qū)А睂?duì)話框選擇從“注冊(cè)表”來(lái)源添加可用的類型庫(kù),在“可用的類型庫(kù)”列表框中選擇類型庫(kù),“接口”窗格就會(huì)顯示該類型庫(kù)的接口,雙擊接口則會(huì)自動(dòng)創(chuàng)建接口對(duì)應(yīng)的類名稱及生成對(duì)應(yīng)的頭文件。圖3使用類型庫(kù)向?qū)閼?yīng)用程序添加Excel Object Library引用。

    圖3 VC++中導(dǎo)入類型庫(kù)圖

    自動(dòng)化技術(shù)中使用VARIANT數(shù)據(jù)類型傳遞數(shù)據(jù),MFC提供了COleVariant類實(shí)現(xiàn)對(duì)VARIANT數(shù)據(jù)結(jié)構(gòu)的封裝。

    3 Microsoft Office組件對(duì)象模型

    MS Office提供了一個(gè)可編程對(duì)象集合,開(kāi)發(fā)者可以通過(guò)可編程對(duì)象來(lái)調(diào)用Office組件功能[11]。這將極大加速應(yīng)用程序開(kāi)發(fā),我們以Word為例講解MS Office組件對(duì)象模型。

    3.1 組件對(duì)象模型

    MS Office組件對(duì)象以樹(shù)狀層級(jí)結(jié)構(gòu)排列,Word的任何元素,如文檔、表格、書(shū)簽等都是對(duì)象。每個(gè)對(duì)象都有一個(gè)父對(duì)象(Application除外),包含多個(gè)子對(duì)象。圖4所示,Word形成以Application對(duì)象為根節(jié)點(diǎn)的樹(shù)狀層級(jí)結(jié)構(gòu)[12]。

    圖4 Word對(duì)象模型圖

    Application對(duì)象包含Documents集合對(duì)象,通過(guò)其Item屬性就可以得到單個(gè)Document對(duì)象。通過(guò)Document對(duì)象又可以得到Range、Sections、Sentences和Paragraphs等對(duì)象。每個(gè)對(duì)象都有屬性和方法,屬性是對(duì)自動(dòng)化對(duì)象的某種狀態(tài)的描述,Document對(duì)象有段落、背景、保存等屬性。方法是指自動(dòng)化對(duì)象提供的服務(wù),如Document對(duì)象Undo和Redo方法執(zhí)行撤銷和恢復(fù)功能。集合對(duì)象是一組同類對(duì)象的容器,通過(guò)枚舉的方法可以得到該集合中的對(duì)象,圖4背景為白色的對(duì)象都是集合對(duì)象。如Dialogs集合對(duì)象。通過(guò)Item方可以得到集合中的每個(gè)對(duì)象。

    Word版本不同其對(duì)象模型有所差異,隨著Word版本的不斷提高,不斷有新的對(duì)象加入到模型中[13]。例如,在Word2003中新增了Break(s)等對(duì)象。版本變化也會(huì)帶來(lái)對(duì)象的屬性和方法的會(huì)更新,如Word 2010版中Application對(duì)象放棄了MountVolume等方法和屬性。在開(kāi)發(fā)中使用OLE編程標(biāo)識(shí)符(ProgID)創(chuàng)建自動(dòng)化對(duì)象[14],Word使用“Application”作為編程標(biāo)識(shí)符,PPT使用“PowerPoint.Application”作為編程標(biāo)識(shí)符。

    3.2 幾個(gè)重要對(duì)象

    3.2.1Application對(duì)象

    Application表示W(wǎng)ord應(yīng)用程序,是其它所有對(duì)象的根。在這些成員對(duì)象中可以通過(guò)get_Application方法直接得到Application對(duì)象[15]。當(dāng)用戶啟動(dòng)了Word應(yīng)用程序時(shí),也就創(chuàng)建了Application對(duì)象,創(chuàng)建Application對(duì)象代碼如下:

    CApplication app;

    app.CreateDispatch("Word.Application")));

    下面代碼演示W(wǎng)ord退出時(shí)的函數(shù)調(diào)用過(guò)程,在代碼中調(diào)用ReleaseDispatch方法釋放資源。

    CComVariant save(false),origFmt,doc;

    app.Quit(&save,&origFmt,&doc);

    app.ReleaseDispatch();

    可以使用Application對(duì)象的屬性和方法來(lái)設(shè)置和獲取Word環(huán)境信息。例如下面代碼將Word窗口可視化并設(shè)置為最大化。

    app.putVisible(TRUE);

    app.putWindowState(1);

    3.2.2Document對(duì)象

    新建Word文檔時(shí)就創(chuàng)建了一個(gè)Document對(duì)象,該對(duì)象被添加到Documents集合中。Document對(duì)象Avtive方法用于設(shè)置對(duì)象為活動(dòng)狀態(tài)。調(diào)用對(duì)象Open和Add方法打開(kāi)和創(chuàng)建的文檔都具有活動(dòng)文檔屬性。下面代碼示意關(guān)閉文檔。

    CComVariant varSave(-2),varDoc(1),varRoute(FALSE);

    doc.Close(&varSave,&varDoc,&varRoute);

    Documents是Docment的集合對(duì)象,調(diào)用Add方法創(chuàng)建一個(gè)新的Document對(duì)象并加入該集合;Open方法打開(kāi)一個(gè)Word文檔并加入該集合;Item返回一個(gè)文檔對(duì)象;Close方法關(guān)閉指定文檔;Save方法保存所有的文檔。

    3.2.3Selection對(duì)象

    操作Word文檔主要是通過(guò)Selection對(duì)象來(lái)實(shí)現(xiàn)。Selection對(duì)象表示當(dāng)前選擇的區(qū)域,例如設(shè)置文本顏色時(shí)被選中的文本就是一個(gè)Selection對(duì)象。Selection對(duì)象始終存在于文檔中,如果用戶沒(méi)有選擇文本則它表示插入點(diǎn),表1所示該對(duì)象的主要屬性。

    應(yīng)用程序有且只能有一個(gè)活動(dòng)的Selection對(duì)象。下面代碼示意為所選中的每個(gè)段落添加矩形邊框,

    CPphs pahs = selection.get_Paragraphs();

    CBorders borders = pahs.get_Borders();

    borders.put_Enable(TRUE);

    3.2.4Range對(duì)象

    Range對(duì)象通過(guò)開(kāi)始和結(jié)束字符的位置來(lái)來(lái)引用

    表1 Selection對(duì)象常用屬性

    文檔中某一連續(xù)區(qū)域。Word組件模型中多個(gè)對(duì)象具有Range屬性。下面代碼演示Range對(duì)象引用文檔中第四段落,設(shè)置段落格式為右對(duì)齊且選中該段落。

    CPphs pahs = doc.get_Paragraphs();

    CPphs pah = pahs.Item(4);

    CRange range = pah.get_Range();

    CPahFormat pahFormat = pah.get_Format();

    pahFormat.put_Alignment(2);

    range.Select();

    3.2.53個(gè)屬性對(duì)象

    Information、Type和Flag對(duì)象通常用于獲取和設(shè)置對(duì)象的屬性信息。Information對(duì)象返回Selection或range對(duì)象的有關(guān)信息。如頁(yè)碼、節(jié)、表格列號(hào)等。下面代碼示意如何獲得當(dāng)前光標(biāo)所處的行號(hào)。

    CComVariant varLineNum=selection.get_Information(10);

    Type對(duì)象用于返回Selection、Document、Window等對(duì)象的屬性。Type的屬性依對(duì)象不同而不相同。如Selection對(duì)象具有wdSelectionIP等屬性值。開(kāi)發(fā)人員通過(guò)操作對(duì)象屬性而修改對(duì)象特征,下面代碼將一個(gè)圖片從嵌入型版式修改為浮于文字上方。

    if(wdSelectionInlineShape==selection.get_Type()){

    CnlineShapes inlineShapes=selection.get_InlineShapes();

    CnlineShape inlineShape = inlineShapes.Item(1);

    inlineShape.ConvertToShape();}

    Flag屬性僅用于Selection對(duì)象,該屬性可讀寫(xiě),屬性值包括wdSelStartActive等。當(dāng)向一個(gè)Word文檔輸入文本時(shí),若希望設(shè)置編輯為插入狀態(tài),代碼示意如下:

    if (wdSelOvertype&selection.get_Flags()){

    selection.put_Flags(wdSelReplace);}

    4 自動(dòng)化客戶端開(kāi)發(fā)實(shí)例

    我們以VC環(huán)境下開(kāi)發(fā)Word(2003版)組件客戶端為例,詳細(xì)講解自動(dòng)化組件的客戶端開(kāi)發(fā)過(guò)程。開(kāi)發(fā)情境如下:在一個(gè)油田井下測(cè)試數(shù)據(jù)分析平臺(tái)中需要將數(shù)據(jù)分析結(jié)果保存到Word中,自動(dòng)生成數(shù)據(jù)分析報(bào)告。數(shù)據(jù)分析報(bào)告包括封面、目錄、正文部分(包括章節(jié)、正文、表格、圖片、正文等)、頁(yè)眉等。數(shù)據(jù)分析報(bào)告可以分為固定項(xiàng)目和插入項(xiàng)目?jī)蓚€(gè)部分。固定項(xiàng)目是指每次創(chuàng)建文件時(shí)不需要更改的部分,如封面格式、目錄、頁(yè)眉、不變的文本、正文格式、表格屬性、圖片屬性、正文章節(jié)層級(jí)結(jié)構(gòu)、插入圖片的位置和表格的位置等。插入部分是指平臺(tái)產(chǎn)生的數(shù)據(jù)、文本、圖片、表格中的數(shù)據(jù)等,要利用Word組件對(duì)象的功能將這部分內(nèi)容插入到指定位置。因此需要?jiǎng)?chuàng)建一個(gè)文檔模版,設(shè)置封皮樣式、頁(yè)眉頁(yè)腳、目錄結(jié)構(gòu)、插入字體格式、表格屬性和圖片屬性等。生成Word報(bào)告時(shí),創(chuàng)建Word組件對(duì)象客戶端,打開(kāi)文檔模版并向其中添加數(shù)據(jù),完成后另存文檔。

    4.1 編制Word報(bào)告模版

    (1)封皮。設(shè)置報(bào)告題目“……報(bào)告”黑體一號(hào)字加粗,“單位:……”宋體一號(hào)字,“報(bào)告人:……”宋體一號(hào)字,“完成日期:……”宋體一號(hào)字,插入分頁(yè)符。

    (2)頁(yè)眉頁(yè)腳。添加頁(yè)眉“……”,在頁(yè)腳添加頁(yè)碼。

    (3)目錄。目錄便于用戶快速定位該報(bào)告的內(nèi)容。在報(bào)告模版中預(yù)留目錄空間,當(dāng)完成報(bào)告后動(dòng)態(tài)添加目錄。在目錄位置輸入“目 錄”設(shè)置宋體一號(hào)字,插入分頁(yè)符。

    (4)目錄結(jié)構(gòu)設(shè)置。根據(jù)報(bào)告的需要設(shè)置目錄的格式,形成遞進(jìn)的層級(jí)結(jié)構(gòu)。

    (5)錄入固定不變的內(nèi)容。將每次生成Word報(bào)告都相同的內(nèi)容包括文字、圖片和表格等保存在模版中,并預(yù)留插入文本、圖片的位置。在生成Word報(bào)告時(shí),在預(yù)留的位置中添加數(shù)據(jù)處理結(jié)果包括文本、數(shù)字和圖片等。

    (6)設(shè)置表格和圖片。在模版中添加表格并設(shè)置表格屬性。這種方法不需要在VC中動(dòng)態(tài)生成表格,開(kāi)發(fā)人員只需要向表格內(nèi)添加數(shù)據(jù)。如果表格行數(shù)不確定(大于2行),則只需要在模版中添加標(biāo)題行和一個(gè)空行就可以了。在程序中根據(jù)具體情況動(dòng)態(tài)添加表格行。在模版中預(yù)留插入圖片的位置并設(shè)置格式,報(bào)告中插入的圖片基本都是嵌入型版式且水平居中對(duì)齊,由程序添加圖名稱和表名稱。

    (7)設(shè)置模版密碼。為增加模版安全性,為該模版設(shè)置密碼保護(hù),防止被意外修改。另外,開(kāi)發(fā)人員根據(jù)具體情況決定是否進(jìn)行頁(yè)面設(shè)置等。

    4.2 封裝Word對(duì)象接口

    為提高開(kāi)發(fā)速度減少重復(fù)代碼,在開(kāi)發(fā)中對(duì)Word接口的包裝類進(jìn)行封裝。由于在Word文檔中幾乎所有的操作都通過(guò)Selection對(duì)象來(lái)完成,所以我們將在Word中的所有操作都封裝在一個(gè)CMySelection類中,該類主要實(shí)現(xiàn)以下功能:①插入符操作:移動(dòng)插入符至文檔開(kāi)始結(jié)束位置、行首、行尾、向上下左右移動(dòng)和換行。②字符串操作:查找、刪除、插入和替換。③表格操作:創(chuàng)建表格、添加數(shù)據(jù)、刪除表格和添加表標(biāo)題。④圖片操作:插入、刪除圖片和添加圖標(biāo)題;復(fù)制和粘貼。⑤創(chuàng)建目錄。圖5所示生成Word報(bào)告模塊的靜態(tài)類圖,COperateMSWord類中組合了CMySelection、CAppliction和CDocuments類。在COperateMSWord類中按照生成Word報(bào)告文檔內(nèi)容的先后順序依次聲明方法,在這些方法中調(diào)用CMySelection類的有關(guān)方法實(shí)現(xiàn)對(duì)文本、數(shù)字、圖片、表格、目錄等內(nèi)容的添加。

    圖5 操作Word對(duì)象類圖

    4.3 關(guān)鍵技術(shù)

    (1)打開(kāi)和保存文檔。打開(kāi)文檔代碼如下,該模版設(shè)置密碼保護(hù),所以在Open函數(shù)的參數(shù)中包含了模版的密碼。為防止在生成報(bào)告過(guò)程中,用戶更改插入符的位置,設(shè)置文檔窗口為不可視狀態(tài)。

    if (FALSE == word.CreateDispatch(_T("Word.Application"))){

    return;

    }

    word.put_Visible(FALSE);

    m_docsWord = word.get_Documents();

    CString strReportTem = GetExecutePath();

    strReportTem += _T("Report-template.doc");

    CComVariant varFile(strReportTem),varT(TRUE),varF(FALSE),varNull(_T("")),varFmt(0),varDire(0),varPwd(_T("shm"));

    m_docsWord.Open(&varFile,&varF,&varF,&varF,&varPwd,&varNull,&varF,&varPwd,&varNull,&varFmt,&varF,&varT,&varT,&varDire,&varT,&varNull);

    當(dāng)報(bào)告生成后調(diào)用Document對(duì)象SaveAs方法將報(bào)告保存,同時(shí)釋放Word對(duì)象資源,代碼與前面相似不再給出。

    (2)插入文字。CMySelection類實(shí)現(xiàn)了InsertStringAfter和InsertStringBefore兩個(gè)插入字符串的方法。根據(jù)不同情況調(diào)用相應(yīng)的方法在當(dāng)前選定的字符串之前或者之后插入字符串。這兩個(gè)函數(shù)都有兩個(gè)參數(shù),一個(gè)參數(shù)是用于確定插入字符串位置的待查找字符串,另一個(gè)參數(shù)是待插入的字符串。在這兩個(gè)方法中,首先執(zhí)行查找操作,將光標(biāo)定位到插入字符的位置,然后調(diào)用Selection對(duì)象的InsertAfter或者InsertBefore方法插入字符串。CMySelection類的FindString函數(shù)中封裝了Word的查找和替換操作,在Word對(duì)象模型中Find對(duì)象實(shí)現(xiàn)查找和替換功能。在FindString函數(shù)中首先調(diào)用Selection對(duì)象的get_Find方法得到Find對(duì)象,然后清除格式信息,最后調(diào)用Find對(duì)象的Execute方法執(zhí)行查找操作。

    CFind findWord = m_selWord.get_Find();

    findWord.ClearFormatting();

    CComVariant varFindText(strFind),varF(FALSE),varT(TRUE),varWrap(1),varNull;

    findWord.Execute(&varFindText,&varT,&varT,&varF,&varF,&varF,&varT,&varWrap,&varF,&varF,&varNull,&varF, &varF, &varF, &varF);

    用于確定插入字符串位置的字符串,在報(bào)告模版中必須具有唯一性。替代這種字符串查找的另外一種方式是使用書(shū)簽。由于書(shū)簽內(nèi)容在編輯模版時(shí)不能清晰顯示出來(lái),不利于模版文檔的維護(hù),故在開(kāi)發(fā)中未采用這種方法。Find對(duì)象實(shí)現(xiàn)查找和替換功能,通過(guò)Find對(duì)象可以得到Replacement對(duì)象,該對(duì)象是執(zhí)行替換操作時(shí)的替換條件,為該對(duì)象賦值后(替換的字符串),該調(diào)用Find對(duì)象Excute方法執(zhí)行替換操作。

    (3)添加圖片。CMySelection類InsertPicture方法實(shí)現(xiàn)向文檔中插入圖片功能。在模版中預(yù)留了插入圖片的位置,在圖片位置的正下方是該圖片的名稱。該函數(shù)首先調(diào)用FindString方法找到圖片名稱,然后調(diào)用MoveUp方法將插入符向上移動(dòng)到插入圖片的位置,然后調(diào)用AddPicture方法插入圖片,最后為圖片添加題注。報(bào)告文檔中的圖片都是嵌入型的,在Word對(duì)象模型中InlineShape對(duì)象表示嵌入型圖片。在AddPicture方法中通過(guò)Selection對(duì)象得到InlineShapes集合對(duì)象,然后調(diào)用該對(duì)象AddPicture方法將圖片添加到文檔中。

    CnlineShapes inlineShapes=m_selWord.get_InlineShapes();

    CComVariant varLinkToFile(false),varSave (true);

    CRange range = m_selWord.get_Range();

    inlineShapes.AddPicture(szFilePath,&varLinkToFile, &varSave, &CComVariant(range));

    使用題注的方法為圖片和表格命名是很有實(shí)用價(jià)值的,在CMySelection類中也封裝了插入題注的功能。在該類中首先添加圖標(biāo)簽,然后調(diào)用Selection對(duì)象的InsertCaption方法為插入的圖添加題注。

    CCaptionLabels captionLabels = appWord.get_CaptionLabels();

    captionLabels.Add(_T("圖"));

    CComVariant varLab(T("圖")),varTle(_T("")),varTleAuTxt(""),varPos(wdCaptionPositionBelow),varEx(false);

    selection.InsertCaption(&varLab,&varTle,&varTleAuTxt,&varPos,&varEx);

    (4)添加表格數(shù)據(jù)。在報(bào)告模版中已經(jīng)插入了表格和表名稱(在表格的正上方),所以首先調(diào)用FindString函數(shù)找到表名稱并為該表加入題注,然后將光標(biāo)下移到需要插入數(shù)據(jù)的位置,插入數(shù)據(jù)。這時(shí)需要判斷當(dāng)前的插入符是否在表格內(nèi),必要時(shí)還需要判斷插入符所在的行和列。通過(guò)Selection對(duì)象的Information屬性實(shí)現(xiàn)此項(xiàng)功能。

    CComVariant varBInTle(true);

    i(varBInTl==election.get_Information(12)){

    CComVariant varCol=selection.get_Information(16);

    CComVariant varRow=selection.get_Information(13);}

    如果插入到表格中數(shù)據(jù)數(shù)量不確定,則該表格行數(shù)就不確定。這就要求程序根據(jù)數(shù)據(jù)長(zhǎng)度動(dòng)態(tài)添加表格行。在程序中使用MFC的CStringList類保存插入的數(shù)據(jù),該類是一個(gè)由字符串構(gòu)成的鏈表。當(dāng)插入符移動(dòng)到表格右下角的單元格時(shí),按下Tab鍵會(huì)在最后一行下面增加一空行。下面代碼為表格增加一空行。

    CComVariant

    varUnit(wdCell),varCut(1),varN;

    selection.MoveRight(&varUnit,&varCut,&varN);

    使用這種方法插入表格行的優(yōu)點(diǎn)是,當(dāng)插入空行后,插入符會(huì)自動(dòng)移動(dòng)到該行的第一個(gè)單元格,這樣就可以繼續(xù)插入數(shù)據(jù)。

    (5)創(chuàng)建目錄。創(chuàng)建目錄的方法比較簡(jiǎn)單,Word中TablesOfContents對(duì)象的Add方法實(shí)現(xiàn)該功能。該函數(shù)參數(shù)比較多包括Appliction、Document、Range等對(duì)象。創(chuàng)建目錄時(shí)選擇使用點(diǎn)填充目錄項(xiàng)目與頁(yè)碼之間空白,并設(shè)置目錄內(nèi)容按照級(jí)別遞增索引,代碼如下所示。

    CApplication app = word.get_Application();

    CDoc actDoc=app.get_ActiveDocument();

    CTablesOfContents tabsOfCtets = actDoc.get_TablesOfContents();

    CRange range = m_selWord.get_Range();

    CComVariant varF(false),varT(true),varUp(1),varLow(3),varNull;

    CTableOfContents table= tabsOfCtets.Add(range,&varT,&varUp,&varLow,&varF,&varNul,&varT,&varT,&varNul,&varT,&varT,&varT);

    table.put_TabLeader(1);

    tabsOfCtets.put_Format(0);

    由于Word報(bào)告中存在格式相同的內(nèi)容,例如表格1、表格2……,這些表格的格式都一樣,標(biāo)題行也一樣,只是填充的內(nèi)容不同。通過(guò)調(diào)用selection對(duì)象Copy和Paste/PasteAndFormat方法執(zhí)行復(fù)制和粘貼操作。這樣解決了在報(bào)告中格式相同而內(nèi)容不同的問(wèn)題。由于創(chuàng)建的Word報(bào)告內(nèi)容比較多時(shí)間長(zhǎng),為了告知用戶當(dāng)前創(chuàng)建報(bào)告的進(jìn)度,我們使用一個(gè)進(jìn)度條顯示當(dāng)前生成報(bào)告的狀態(tài)。

    5 結(jié) 語(yǔ)

    本文以Microsoft Office組件為開(kāi)發(fā)對(duì)象,提出一種基于自動(dòng)化技術(shù)生成數(shù)據(jù)報(bào)告文件的解決方案,詳細(xì)講解了自動(dòng)化技術(shù)知識(shí),MFC對(duì)自動(dòng)化技術(shù)的支持,Microsoft Office組件對(duì)象模型,最后以一個(gè)項(xiàng)目詳細(xì)說(shuō)明了VC環(huán)境下開(kāi)發(fā)自動(dòng)化組件客戶端的過(guò)程,希望本文能夠給人們提供一個(gè)很好的幫助。

    [1] 金宇鋒,張 健.基于Excel VBA的漁具選擇性分析SELECT模型實(shí)現(xiàn)[J].實(shí)驗(yàn)室研究與探索,2014(3):154-158.

    [2] 湯 躍,趙 坤,許文博.基于Excel的水泵性能試驗(yàn)數(shù)據(jù)處理的VBA開(kāi)發(fā)[J].排灌機(jī)械工程學(xué)報(bào),2011(2):123-126.

    [3] 王 磊,張仁瓊.利用VBA技術(shù)和EndNote軟件建立查新報(bào)告數(shù)據(jù)庫(kù)[J].現(xiàn)代情報(bào),2015(8):131-136,140.

    [4] 朱 敏,沈同圣,王學(xué)偉.VC++與VBA結(jié)合實(shí)現(xiàn)復(fù)雜報(bào)表[J]. 計(jì)算機(jī)應(yīng)用與軟件,2005(2):42-43+101.

    [5] 葉 明,張 諍.基于C#.NET的Word報(bào)告生成功能開(kāi)發(fā)[J].計(jì)算機(jī)工程與應(yīng)用,2008(9):104-106.

    [6] 潘愛(ài)民.COM原理與應(yīng)用[M].北京:清華大學(xué)出版社,1999:334.

    [7] 朱 敏,沈同圣.VC++與VBA結(jié)合實(shí)現(xiàn)復(fù)雜報(bào)表[J].計(jì)算機(jī)應(yīng)用與軟件,2005(2):42.

    [8] 湯克明,陳 崚.Word自動(dòng)閱卷系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與應(yīng)用,2008(35):69-72.

    [9] 孔令彥,董蓬勃,姜青香.使用Visual Basic操縱Microsoft Word對(duì)象生成報(bào)表文檔[J].計(jì)算機(jī)工程與應(yīng)用,2003(36):115-117.

    [10] 趙宏亮,楊鶴標(biāo).面向領(lǐng)域的語(yǔ)義搜索引擎的應(yīng)用研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2012,(05):1801-1805.

    [11] 冉 沛,楊吉云,譚金勇.一種新的Word電子文檔完整性保護(hù)方案[J].計(jì)算機(jī)工程與應(yīng)用,2013(13):76-79+148.

    [12] MSDN.Office development[EB/OL].https://msdn.microsoft.com/en-us/library/fp161347.aspx, 2016-12-1.

    [13] 朱 敏,方登建,王 哲. Word模板數(shù)據(jù)自校驗(yàn)設(shè)計(jì)與信息提取技術(shù)[J]. 實(shí)驗(yàn)室研究與探索,2012(3):75-78.

    [14] 楊德明,郭 盛. 基于Word文檔的數(shù)據(jù)隱藏方法[J].計(jì)算機(jī)應(yīng)用與軟件,2015(5):314-318.

    [15] 高麗萍,郭棟彬,鄭博文. Co-Word中圖文混排的文檔一致性研究[J].計(jì)算機(jī)應(yīng)用研究,2017(11):1-10.

    猜你喜歡
    報(bào)告方法
    學(xué)習(xí)方法
    一圖看懂十九大報(bào)告
    報(bào)告
    可能是方法不對(duì)
    用對(duì)方法才能瘦
    Coco薇(2016年2期)2016-03-22 02:42:52
    報(bào)告
    報(bào)告
    四大方法 教你不再“坐以待病”!
    Coco薇(2015年1期)2015-08-13 02:47:34
    賺錢方法
    捕魚(yú)
    久久女婷五月综合色啪小说| 九色亚洲精品在线播放| 性少妇av在线| 午夜av观看不卡| 国产一区二区三区av在线| 亚洲九九香蕉| 最近最新中文字幕大全免费视频 | 91国产中文字幕| 国产免费现黄频在线看| 国产欧美亚洲国产| 国产在线视频一区二区| 亚洲中文av在线| 欧美黄色片欧美黄色片| 久久久欧美国产精品| 久久久精品免费免费高清| 久热这里只有精品99| 亚洲视频免费观看视频| 亚洲,欧美精品.| 国产一卡二卡三卡精品| 亚洲第一青青草原| 亚洲,欧美精品.| www.av在线官网国产| 午夜福利免费观看在线| 精品国产一区二区久久| 欧美乱码精品一区二区三区| 国产真人三级小视频在线观看| 大陆偷拍与自拍| 国产欧美日韩综合在线一区二区| 丝袜美足系列| 91成人精品电影| 亚洲成色77777| 99香蕉大伊视频| 久久久久久久久免费视频了| 欧美日韩亚洲高清精品| 女性生殖器流出的白浆| 国产成人91sexporn| 在线观看免费高清a一片| 老司机靠b影院| 深夜精品福利| 亚洲人成电影免费在线| 9191精品国产免费久久| 丝瓜视频免费看黄片| www.av在线官网国产| 精品熟女少妇八av免费久了| 精品久久久精品久久久| 国产亚洲av片在线观看秒播厂| 久久精品人人爽人人爽视色| 国产一区亚洲一区在线观看| 在现免费观看毛片| 欧美在线黄色| 精品免费久久久久久久清纯 | 日韩电影二区| 一级片免费观看大全| 午夜老司机福利片| 亚洲综合色网址| 91精品伊人久久大香线蕉| 丰满少妇做爰视频| 国产又爽黄色视频| 男女免费视频国产| 激情五月婷婷亚洲| 少妇粗大呻吟视频| 成在线人永久免费视频| 777米奇影视久久| 超碰成人久久| 国产欧美日韩一区二区三 | 成人黄色视频免费在线看| av天堂久久9| 国产亚洲av高清不卡| 久久天堂一区二区三区四区| 久久精品亚洲av国产电影网| xxxhd国产人妻xxx| 伊人久久大香线蕉亚洲五| 国产精品九九99| 免费在线观看黄色视频的| 99国产精品99久久久久| 欧美av亚洲av综合av国产av| 丝袜人妻中文字幕| 欧美大码av| 亚洲成人免费电影在线观看 | 搡老乐熟女国产| 丝袜美足系列| 久久久久网色| 亚洲伊人色综图| 欧美黑人欧美精品刺激| 夫妻性生交免费视频一级片| 久久精品国产亚洲av高清一级| 日韩av在线免费看完整版不卡| 超色免费av| 免费在线观看黄色视频的| 欧美日韩亚洲国产一区二区在线观看 | 亚洲,欧美精品.| 色网站视频免费| 交换朋友夫妻互换小说| 日本av免费视频播放| 国产成人免费观看mmmm| 久久国产精品人妻蜜桃| 啦啦啦啦在线视频资源| 成人亚洲精品一区在线观看| 大码成人一级视频| 久久精品久久久久久久性| 日韩,欧美,国产一区二区三区| 精品熟女少妇八av免费久了| 王馨瑶露胸无遮挡在线观看| 无遮挡黄片免费观看| av视频免费观看在线观看| 亚洲国产欧美一区二区综合| 成人影院久久| 国产爽快片一区二区三区| 色94色欧美一区二区| 亚洲国产av新网站| 曰老女人黄片| 在线天堂中文资源库| 视频区图区小说| 亚洲欧美一区二区三区久久| 精品视频人人做人人爽| 日本色播在线视频| av国产久精品久网站免费入址| 精品人妻一区二区三区麻豆| 美女大奶头黄色视频| 男女国产视频网站| 妹子高潮喷水视频| 香蕉丝袜av| 啦啦啦在线观看免费高清www| 手机成人av网站| 少妇被粗大的猛进出69影院| 亚洲天堂av无毛| 国产1区2区3区精品| 亚洲av在线观看美女高潮| 你懂的网址亚洲精品在线观看| 日韩伦理黄色片| 久久午夜综合久久蜜桃| 曰老女人黄片| 午夜福利,免费看| 婷婷色综合大香蕉| 国产免费一区二区三区四区乱码| 美女午夜性视频免费| 1024视频免费在线观看| 99国产精品99久久久久| 人妻 亚洲 视频| 大香蕉久久成人网| 夜夜骑夜夜射夜夜干| 久久狼人影院| 十八禁人妻一区二区| 国产99久久九九免费精品| 女人高潮潮喷娇喘18禁视频| 纵有疾风起免费观看全集完整版| 青青草视频在线视频观看| 狠狠精品人妻久久久久久综合| 99精国产麻豆久久婷婷| 大片电影免费在线观看免费| 国产成人欧美| 国产成人精品无人区| 成人影院久久| 亚洲国产精品国产精品| 国产成人影院久久av| 在线观看免费高清a一片| 国产日韩欧美在线精品| 欧美成狂野欧美在线观看| 黄色a级毛片大全视频| 自线自在国产av| 黄频高清免费视频| 国产99久久九九免费精品| 无遮挡黄片免费观看| 中国美女看黄片| 黄色毛片三级朝国网站| 免费看不卡的av| 别揉我奶头~嗯~啊~动态视频 | av天堂在线播放| 国产成人精品无人区| 精品一区在线观看国产| 十八禁高潮呻吟视频| 大型av网站在线播放| 丰满迷人的少妇在线观看| 国产爽快片一区二区三区| 大话2 男鬼变身卡| 啦啦啦中文免费视频观看日本| 在线观看人妻少妇| 成年人黄色毛片网站| 一区二区三区乱码不卡18| 日韩精品免费视频一区二区三区| 亚洲国产av新网站| 在线观看www视频免费| 精品久久久久久久毛片微露脸 | 国产一区二区 视频在线| 亚洲中文字幕日韩| 最近最新中文字幕大全免费视频 | 亚洲精品美女久久久久99蜜臀 | 80岁老熟妇乱子伦牲交| 少妇人妻久久综合中文| 国产日韩欧美视频二区| 肉色欧美久久久久久久蜜桃| 啦啦啦在线免费观看视频4| 一个人免费看片子| 免费观看a级毛片全部| 人妻人人澡人人爽人人| 啦啦啦 在线观看视频| 成人三级做爰电影| 自线自在国产av| 天天躁夜夜躁狠狠久久av| 免费一级毛片在线播放高清视频 | 亚洲av在线观看美女高潮| 国产女主播在线喷水免费视频网站| 天堂8中文在线网| 男女午夜视频在线观看| 成人黄色视频免费在线看| 国产精品久久久久成人av| 亚洲成人国产一区在线观看 | 日韩精品免费视频一区二区三区| 色婷婷av一区二区三区视频| 亚洲av综合色区一区| 亚洲欧美精品自产自拍| 啦啦啦在线观看免费高清www| 国产精品久久久久久精品电影小说| 国产精品久久久久久精品电影小说| 精品人妻1区二区| 国产精品av久久久久免费| 国产97色在线日韩免费| 午夜福利影视在线免费观看| 飞空精品影院首页| 少妇被粗大的猛进出69影院| 久久99一区二区三区| 成人国语在线视频| 国产成人a∨麻豆精品| 飞空精品影院首页| 99国产精品免费福利视频| 久久性视频一级片| 国产高清videossex| 黄色视频在线播放观看不卡| 国产淫语在线视频| 少妇裸体淫交视频免费看高清 | 久久人妻熟女aⅴ| 午夜免费鲁丝| av视频免费观看在线观看| 亚洲伊人久久精品综合| 一边摸一边做爽爽视频免费| 黄频高清免费视频| 9191精品国产免费久久| 亚洲国产精品999| 成年女人毛片免费观看观看9 | 99国产精品99久久久久| 久久毛片免费看一区二区三区| 性少妇av在线| 18禁观看日本| 嫁个100分男人电影在线观看 | 丝袜人妻中文字幕| 99国产精品一区二区三区| 在线精品无人区一区二区三| 黑人猛操日本美女一级片| 又大又黄又爽视频免费| 欧美人与性动交α欧美软件| 免费高清在线观看日韩| 国产1区2区3区精品| 亚洲视频免费观看视频| 久久久久国产一级毛片高清牌| 丰满饥渴人妻一区二区三| 黑丝袜美女国产一区| 久久午夜综合久久蜜桃| 国产av一区二区精品久久| 国产麻豆69| 久热爱精品视频在线9| 久久国产精品大桥未久av| 男女国产视频网站| 在线观看人妻少妇| 99精品久久久久人妻精品| 精品福利观看| 国产伦人伦偷精品视频| 中文字幕av电影在线播放| 男人添女人高潮全过程视频| 极品人妻少妇av视频| 婷婷色av中文字幕| 久久精品成人免费网站| 亚洲国产精品成人久久小说| 中文字幕另类日韩欧美亚洲嫩草| 久久99热这里只频精品6学生| 考比视频在线观看| 中文精品一卡2卡3卡4更新| 亚洲图色成人| av福利片在线| 超碰97精品在线观看| cao死你这个sao货| 老司机深夜福利视频在线观看 | 观看av在线不卡| 欧美精品亚洲一区二区| 亚洲七黄色美女视频| 午夜日韩欧美国产| 性高湖久久久久久久久免费观看| 国产av国产精品国产| 久久久欧美国产精品| 91麻豆av在线| 无遮挡黄片免费观看| 国产极品粉嫩免费观看在线| 婷婷成人精品国产| 伊人亚洲综合成人网| 一本大道久久a久久精品| 成人免费观看视频高清| 国产精品 欧美亚洲| 国产欧美日韩一区二区三区在线| 国产精品九九99| 免费在线观看完整版高清| 最黄视频免费看| av国产久精品久网站免费入址| 中文字幕亚洲精品专区| av有码第一页| 在线观看国产h片| 亚洲国产成人一精品久久久| 久久人妻熟女aⅴ| 久久影院123| 国产又爽黄色视频| 亚洲男人天堂网一区| bbb黄色大片| 国产激情久久老熟女| 亚洲精品国产区一区二| 捣出白浆h1v1| 国产成人91sexporn| 中文乱码字字幕精品一区二区三区| 久久精品熟女亚洲av麻豆精品| 亚洲七黄色美女视频| 亚洲精品国产色婷婷电影| 蜜桃国产av成人99| 国产成人精品在线电影| 91麻豆av在线| 韩国高清视频一区二区三区| 性高湖久久久久久久久免费观看| 国产成人91sexporn| 欧美日韩精品网址| 深夜精品福利| 女警被强在线播放| 亚洲国产最新在线播放| 亚洲,欧美,日韩| 免费久久久久久久精品成人欧美视频| 国产主播在线观看一区二区 | 精品人妻一区二区三区麻豆| 一级毛片 在线播放| 久久久久久久国产电影| 亚洲欧洲国产日韩| 亚洲专区中文字幕在线| 18禁黄网站禁片午夜丰满| 婷婷色av中文字幕| 别揉我奶头~嗯~啊~动态视频 | 日本黄色日本黄色录像| 日日夜夜操网爽| 捣出白浆h1v1| 99国产精品99久久久久| 天天添夜夜摸| 热re99久久国产66热| 欧美日本中文国产一区发布| 脱女人内裤的视频| 国产精品.久久久| 黑人欧美特级aaaaaa片| 高清视频免费观看一区二区| 欧美日韩视频高清一区二区三区二| 亚洲国产精品999| 国产精品一区二区在线不卡| 国产午夜精品一二区理论片| 两个人看的免费小视频| 深夜精品福利| 日日爽夜夜爽网站| 色94色欧美一区二区| 校园人妻丝袜中文字幕| 天天影视国产精品| 亚洲精品自拍成人| 国产成人免费无遮挡视频| 日本欧美视频一区| 香蕉国产在线看| 男男h啪啪无遮挡| 涩涩av久久男人的天堂| 国产黄色免费在线视频| 热re99久久国产66热| 亚洲人成网站在线观看播放| 观看av在线不卡| 久久久久网色| 美女中出高潮动态图| 国产精品偷伦视频观看了| 看免费av毛片| 精品人妻1区二区| 男女免费视频国产| 久久99热这里只频精品6学生| 国产在线观看jvid| 一区二区三区精品91| 精品久久久精品久久久| 亚洲精品一二三| 精品久久久久久电影网| 少妇 在线观看| 国产高清不卡午夜福利| av天堂久久9| 久久久国产欧美日韩av| 免费高清在线观看视频在线观看| 丝袜美足系列| 精品人妻在线不人妻| 欧美精品一区二区免费开放| 国产在视频线精品| 国产一卡二卡三卡精品| 亚洲免费av在线视频| 欧美成人午夜精品| 大陆偷拍与自拍| 久久ye,这里只有精品| 天天躁夜夜躁狠狠躁躁| 久热这里只有精品99| 国产欧美日韩综合在线一区二区| 欧美日韩av久久| 最近中文字幕2019免费版| 国产视频首页在线观看| 女人高潮潮喷娇喘18禁视频| 两人在一起打扑克的视频| 韩国精品一区二区三区| 精品久久蜜臀av无| 美女午夜性视频免费| 男女边吃奶边做爰视频| 熟女av电影| 成人影院久久| www.av在线官网国产| 高清不卡的av网站| 国产熟女欧美一区二区| 亚洲精品日本国产第一区| 天天躁夜夜躁狠狠久久av| 国产黄色视频一区二区在线观看| 欧美精品一区二区免费开放| 嫩草影视91久久| 色婷婷av一区二区三区视频| 亚洲成人免费av在线播放| 亚洲精品乱久久久久久| 成人午夜精彩视频在线观看| 亚洲国产精品一区三区| 在线天堂中文资源库| 99久久综合免费| 肉色欧美久久久久久久蜜桃| 一二三四在线观看免费中文在| 亚洲av国产av综合av卡| 亚洲精品中文字幕在线视频| 麻豆国产av国片精品| 三上悠亚av全集在线观看| 国产成人av教育| 波多野结衣av一区二区av| 亚洲精品国产一区二区精华液| 蜜桃在线观看..| 国产精品一区二区免费欧美 | 欧美亚洲 丝袜 人妻 在线| 老汉色∧v一级毛片| 日本wwww免费看| 亚洲欧美色中文字幕在线| 欧美国产精品一级二级三级| 老汉色av国产亚洲站长工具| 午夜日韩欧美国产| 国产女主播在线喷水免费视频网站| 国产黄色视频一区二区在线观看| 麻豆国产av国片精品| 亚洲伊人色综图| 婷婷丁香在线五月| 热99久久久久精品小说推荐| 日日夜夜操网爽| 视频区欧美日本亚洲| 日日夜夜操网爽| 中文字幕人妻丝袜一区二区| 制服诱惑二区| 亚洲精品久久久久久婷婷小说| 日韩 亚洲 欧美在线| 亚洲av日韩在线播放| 99国产精品一区二区三区| 久久亚洲国产成人精品v| 久久精品久久久久久噜噜老黄| 成年人午夜在线观看视频| 中文字幕另类日韩欧美亚洲嫩草| 脱女人内裤的视频| 美女高潮到喷水免费观看| 亚洲情色 制服丝袜| 午夜福利乱码中文字幕| www.熟女人妻精品国产| 青春草视频在线免费观看| 成人黄色视频免费在线看| 亚洲熟女毛片儿| 亚洲一区二区三区欧美精品| 99国产精品一区二区三区| 日韩,欧美,国产一区二区三区| 久久人人爽av亚洲精品天堂| 热99久久久久精品小说推荐| 久久午夜综合久久蜜桃| 人人妻人人爽人人添夜夜欢视频| 久久人人97超碰香蕉20202| 99国产综合亚洲精品| 久久精品久久精品一区二区三区| 欧美老熟妇乱子伦牲交| 黑人欧美特级aaaaaa片| 精品国产一区二区三区四区第35| e午夜精品久久久久久久| 人人妻,人人澡人人爽秒播 | 日韩中文字幕视频在线看片| 少妇粗大呻吟视频| 成年人黄色毛片网站| 高清欧美精品videossex| 久久国产精品大桥未久av| 国产成人精品久久二区二区免费| 成年人免费黄色播放视频| 国产高清videossex| 亚洲第一青青草原| 一级毛片女人18水好多 | 制服人妻中文乱码| 熟女av电影| 亚洲精品国产色婷婷电影| 国产真人三级小视频在线观看| 七月丁香在线播放| 超碰97精品在线观看| 国产欧美日韩综合在线一区二区| av天堂在线播放| 菩萨蛮人人尽说江南好唐韦庄| 亚洲 国产 在线| 亚洲av成人精品一二三区| 亚洲精品国产av蜜桃| 国产极品粉嫩免费观看在线| 国产爽快片一区二区三区| 亚洲伊人久久精品综合| 巨乳人妻的诱惑在线观看| 999精品在线视频| 久久亚洲国产成人精品v| 精品少妇内射三级| a级毛片在线看网站| 国产精品久久久久久精品古装| 极品人妻少妇av视频| 日韩 欧美 亚洲 中文字幕| 亚洲欧美日韩高清在线视频 | 好男人电影高清在线观看| 两人在一起打扑克的视频| 国产不卡av网站在线观看| 两个人看的免费小视频| 十八禁网站网址无遮挡| 女性被躁到高潮视频| 麻豆国产av国片精品| 亚洲第一av免费看| 久久青草综合色| 大话2 男鬼变身卡| 每晚都被弄得嗷嗷叫到高潮| 首页视频小说图片口味搜索 | 9191精品国产免费久久| 视频在线观看一区二区三区| 男人舔女人的私密视频| 亚洲国产欧美在线一区| 久久鲁丝午夜福利片| 国产老妇伦熟女老妇高清| 美女高潮到喷水免费观看| 啦啦啦视频在线资源免费观看| 久久人人97超碰香蕉20202| 亚洲中文av在线| 我的亚洲天堂| 国产成人一区二区在线| 国产精品人妻久久久影院| 亚洲国产毛片av蜜桃av| 精品一区二区三区四区五区乱码 | 亚洲国产看品久久| 免费久久久久久久精品成人欧美视频| 男人添女人高潮全过程视频| svipshipincom国产片| 热99久久久久精品小说推荐| 久久国产精品人妻蜜桃| 在线精品无人区一区二区三| 日日摸夜夜添夜夜爱| 日韩,欧美,国产一区二区三区| 少妇猛男粗大的猛烈进出视频| 成人亚洲欧美一区二区av| 欧美人与性动交α欧美软件| 久久99一区二区三区| 一二三四在线观看免费中文在| 在线观看免费日韩欧美大片| 婷婷成人精品国产| 亚洲欧洲国产日韩| 天天躁狠狠躁夜夜躁狠狠躁| av网站在线播放免费| 久久久欧美国产精品| 欧美日韩视频高清一区二区三区二| 深夜精品福利| 国产1区2区3区精品| 久久国产精品大桥未久av| 免费日韩欧美在线观看| 麻豆av在线久日| 美女视频免费永久观看网站| 99香蕉大伊视频| 欧美97在线视频| 日日夜夜操网爽| a级毛片在线看网站| av在线app专区| 丰满迷人的少妇在线观看| 亚洲七黄色美女视频| 天天躁夜夜躁狠狠躁躁| 中文字幕最新亚洲高清| 精品国产一区二区三区久久久樱花| 超碰97精品在线观看| 免费久久久久久久精品成人欧美视频| 波野结衣二区三区在线| 97精品久久久久久久久久精品| 日韩大片免费观看网站| 久久鲁丝午夜福利片| 久久久久国产精品人妻一区二区| 久久这里只有精品19| 蜜桃在线观看..| 欧美性长视频在线观看| 亚洲欧洲国产日韩| 久久av网站| 亚洲一区中文字幕在线| 菩萨蛮人人尽说江南好唐韦庄| 高清视频免费观看一区二区| 丝袜脚勾引网站| 亚洲av男天堂| 看免费成人av毛片| 日韩 亚洲 欧美在线| 一本—道久久a久久精品蜜桃钙片| 欧美人与善性xxx| 水蜜桃什么品种好| 欧美黄色淫秽网站| 日本黄色日本黄色录像| 久久国产精品影院| 十分钟在线观看高清视频www| 啦啦啦 在线观看视频| 99热全是精品| 又粗又硬又长又爽又黄的视频| 看十八女毛片水多多多| 丰满饥渴人妻一区二区三| 婷婷丁香在线五月|