C++抽取文檔標題

如何抽取>3級標題

自動抽取的結果是到三級標題爲止,這樣遠遠不能滿足對文章內容了查詢瞭解。

查看了一下代碼:

				/////////////////處理文檔////////////////////

				//m_Path.SetWindowText(strPath);		//顯示文件路徑
		bool bReleased=false;
		_Application app;	
		Documents docs,ndocs;
		_Document doc,ndoc;//注意這裏1
		Range range,nrange;
		Selection sel,nsel;
		TablesOfContents tocs;//注意這裏2
		CString str ;
				
	
				CComVariant a (_T(strFilePath)),b(false),c(0),d(true),e(_T(""));
		try
			{	
	

			//	CComVariant a (_T("d:\\test.docx")),b(false),c(0),d(true),e(_T(""));



				//初始化連接
				app.CreateDispatch("word.Application");
				docs.AttachDispatch(app.GetDocuments());
				
				doc.AttachDispatch(docs.Add(&a,&b,&c,&d));
				
	
				sel.AttachDispatch(app.GetSelection());
				range.AttachDispatch(sel.GetRange());
				tocs.AttachDispatch(doc.GetTablesOfContents());//注意這裏3

				tocs.Add(range,&_variant_t(true),&_variant_t((long)1),&_variant_t((long)2)
					,&_variant_t(false),&_variant_t(""),&_variant_t(true),&_variant_t(true)
					,&_variant_t(""),&_variant_t(false),&_variant_t(false));//注意這裏4
		
				Paragraphs pgraphs;
				pgraphs.AttachDispatch(doc.GetParagraphs());

				CString szText = "";
				long pgraphCount = pgraphs.GetCount();
				str = strFilePath;
				nFilesCnt++;
				CString strNum;
				strNum.Format("%d",nFilesCnt); 
				str= "\n\n\n\n=========== Files No : "+strNum+"   ==========================================\n"+str;
				MyTableFile.Write(str,::strlen(str)+1);	
				for (long i = 1; i<= pgraphCount; i++)
				{
					Paragraph pgraph;
					pgraph.AttachDispatch(pgraphs.Item(i));
					Range pragRange;
					pragRange.AttachDispatch(pgraph.GetRange());
					_ParagraphFormat format;
					format.AttachDispatch(pragRange.GetParagraphFormat());
					CComVariant value;

					Style style;
		
					value = format.GetStyle();
					style.AttachDispatch(value.pdispVal);
			
					CString szHeaderName = style.GetNameLocal();
					char  szName[10] = {0};
					strncpy(szName, szHeaderName.GetBuffer(0), 6);
					szHeaderName.ReleaseBuffer(0);
					if (strcmp(szName, "目錄 1") != 0 && strcmp(szName, "目錄 2") != 0 
						&& strcmp(szName, "目錄 3") != 0)
					{
						
						sel.SetRange(0,i);
						range.AttachDispatch(sel.GetRange());
						str = range.GetText();
						str += "\n";


						MyTableFile.Write(str,::strlen(str)+1);		

						range.Cut();
						nrange.AttachDispatch(doc.GetContent());
						nrange.Paste();
						i = pgraphCount + 1;
					}
					pgraph.ReleaseDispatch();
					pragRange.ReleaseDispatch();
					format.ReleaseDispatch();
					style.ReleaseDispatch();

				}
				
			
				app.SetVisible(false);
				app.Quit(&b,&c,&c);
				range.ReleaseDispatch();
				nrange.ReleaseDispatch();
				doc.ReleaseDispatch();
				docs.ReleaseDispatch();
				app.ReleaseDispatch();
				bReleased = true;
	
			}	
			
				catch(...)
				{
					int iii=0;
					if(!bReleased)
					{
						app.SetVisible(false);
						app.Quit(&b,&c,&c);
						range.ReleaseDispatch();
						nrange.ReleaseDispatch();
						doc.ReleaseDispatch();
						docs.ReleaseDispatch();
						app.ReleaseDispatch();
						bReleased = true;
					 
					}
				}






				////////////////////處理文檔End//////////////////////////

看代碼當中註明的“//注意這裏i”,關鍵點就是對對象_Document的操作:

單文檔對象_Document,目錄集合對象TablesOfContents,目錄對象TableOfContents及Range對象。操作流程如下:
使用_Document:: GetTablesOfContents返回TablesOfContents對象。
TablesOfContents::Add返回TableOfContents對象。
LPDISPATCH TablesOfContents::Add(LPDISPATCH Range, VARIANT* UseHeadingStyles, VARIANT* UpperHeadingLevel, VARIANT* LowerHeadingLevel, VARIANT* UseFields, VARIANT* TableID, VARIANT* RightAlignPageNumbers, VARIANT* IncludePageNumbers, VARIANT* AddedStyles, VARIANT* UseHyperlinks, VARIANT* HidePageNumbersInWeb, VARIANT* UseOutlineLevels)
參數說明如下:
Range 插入目錄的Range對象。通常目錄是文檔生成結束時進行插入的,因此必須事先指定插入目錄的區域Range對象。
UseHeadingStyles 使用製表符前導符,設爲TRUE
UpperHeadingLevel 頂級目錄,通常設爲1
LowerHeadingLevel 底級目錄,根據需要賦值
UseFields 使用區域,設爲FALSE
TableID 目錄索引,以1起始
RightAlignPageNumbers 頁碼右對齊,設爲TRUE
IncludePageNumbers 包含頁碼,
AddedStyles 增加類型,設爲NULL
UseHyperlinks 使用超鏈接,設爲TRUE
HidePageNumbersInWeb Web頁中隱藏頁碼,設爲TRUE
UseOutlineLevels 使用大綱級別,設爲TRUE
使用TableOfContents:: GetRange獲取區域對象,進行其他例如文字大小控制等操作。
TableOfContents:: UpdatePageNumbers更新頁碼。

可見,重點就是修改
“UpperHeadingLevel 頂級目錄,通常設爲1
LowerHeadingLevel 底級目錄,根據需要賦值”
好吧,修改一下,將LowerHeadingLevel修改成6,好啦,結果很美好!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章