如何抽取>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,好啦,結果很美好!