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,好啦,结果很美好!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值