本文所描述的Word文档格式验证,程序可以进行标书的文档格式验证。由于本人编写仓促,可能有不完善的地方,作为一个例子,让大家参考下吧,毕竟,程序在我手里发霉了。
先是word操作类文件WordWriter.cpp。
// WordOffice.cpp: implementation of the CWordWriter class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "WordWriter.h"
//#include "cstringt.h"
#define wdWithInTable 12
#define wdStartOfRangeRowNumber 13
#define wdEndOfRangeRowNumber 14
#define wdMaximumNumberOfRows 15
#define wdStartOfRangeColumnNumber 16
#define wdEndOfRangeColumnNumber 17
#define wdMaximumNumberOfColumns 18
#define wdHorizontalPositionRelativeToPage 5
#define wdVerticalPositionRelativeToPage 6
#define wdActiveEndPageNumber 3
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CWordWriter::CWordWriter()
{
m_bIsNewApp = FALSE;
}
CWordWriter::~CWordWriter()
{
CloseApp();
}
//操作
BOOL CWordWriter::CreateApp()
{
CLSID clsid;
HRESULT hr;
hr=::CLSIDFromProgID(L"Word.Application",&clsid); //通过ProgID取得CLSID
if(FAILED(hr))
{
AfxMessageBox(_T("没有安装OFFICE"));
return FALSE;
}
IUnknown *pUnknown=NULL;
IDispatch *pDispatch=NULL;
hr=::GetActiveObject(clsid,NULL,&pUnknown); //查找是否有WORD程序在运行
if(FAILED(hr)) // 没有正在运行的,则启动新应用
{
if(m_wdApp.m_lpDispatch==NULL)
{
if (FALSE == m_wdApp.CreateDispatch(L"Word.Application"))
{
/*DWORD nErrorNo = get_LastError ( ); // 得到错误代码
LPSTR lpBuffer;
FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_IGNORE_INSERTS |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
nErrorNo, // 此乃错误代码,通常在程序中可由 get_LastError()得之
LANG_NEUTRAL,
(LPTSTR) & lpBuffer,
0 ,
NULL );
CString strErrorCause = lpBuffer ? _T(lpBuffer) : _T( " Sorry, cannot find this error info. " );
AfxMessageBox(strErrorCause);*/
AfxMessageBox(_T("Application创建失败,请确保安装了word 2000或以上版本!"), MB_OK|MB_ICONWARNING);
return FALSE;
}
m_bIsNewApp = TRUE;
return TRUE;
}
}
// 否则,获得当前程序
try
{
hr=pUnknown->QueryInterface(IID_IDispatch,(LPVOID *)&m_wdApp);
if(FAILED(hr)) throw(_T("没有取得IDispatchPtr"));
pUnknown->Release(); pUnknown=NULL;
m_bIsNewApp = FALSE;
}
catch(LPCTSTR lpErr)
{
AfxMessageBox(lpErr);
}
return TRUE;
}
BOOL CWordWriter::CreateDocuments()
{
if (FALSE == CreateApp())
{
return FALSE;
}
m_wdDocs.AttachDispatch(m_wdApp.get_Documents());
if (!m_wdDocs.m_lpDispatch)
{
AfxMessageBox(_T("Documents创建失败!"), MB_OK|MB_ICONWARNING);
return FALSE;
}
return TRUE;
}
BOOL CWordWriter::InitVariabels()
{
/*COleVariant vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
//得到selection变量
selectDocument();
m_wdSel = m_wdApp.get_Selection();
if (!m_wdSel.m_lpDispatch)
{
AfxMessageBox(_T("Select获取失败!"), MB_OK|MB_ICONWARNING);
return FALSE;
}
//得到全部DOC的Range变量
m_wdRange = m_wdDoc.Range(vOptional,vOptional);
if(!m_wdRange.m_lpDispatch)
{
AfxMessageBox(_T("Range获取失败!"), MB_OK|MB_ICONWARNING);
return FALSE;
}
m_wdTable = m_wdDoc.get_Tables();
if(!m_wdTable.m_lpDispatch)
{
AfxMessageBox(_T("Table获取失败!"), MB_OK|MB_ICONWARNING);
return FALSE;
}*/
return TRUE;
}
BOOL CWordWriter::CreateDocument()
{
if (!m_wdDocs.m_lpDispatch)
{
AfxMessageBox(_T("Documents为空!"), MB_OK|MB_ICONWARNING);
return FALSE;
}
COleVariant varTrue(short(1),VT_BOOL),vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
CComVariant Template(_T("")); //没有使用WORD的文档模板
CComVariant NewTemplate(false),DocumentType(0),Visible(true);
this->m_preDocsCount=m_wdDocs.get_Count();
m_wdDocs.Add(&Template,&NewTemplate,&DocumentType,&Visible);
this->m_afterDocsCount=m_wdDocs.get_Count();
//得到document变量
m_wdDoc = m_wdApp.get_ActiveDocument();
if (!m_wdDoc.m_lpDispatch)
{
AfxMessageBox(_T("Document获取失败!"), MB_OK|MB_ICONWARNING);
return FALSE;
}
InitVariabels();
return TRUE;
}
BOOL CWordWriter::CreateDocument(const CString& modelFile)
{
if (!m_wdDocs.m_lpDispatch)
{
AfxMessageBox(_T("Documents为空!"), MB_OK|MB_ICONWARNING);
return FALSE;
}
COleVariant varTrue(short(1),VT_BOOL),vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
COleVariant vFalse((short)FALSE);
CComVariant Template(modelFile); //没有使用WORD的文档模板
CComVariant NewTemplate(false),DocumentType(0),Visible(false);
this->m_preDocsCount=m_wdDocs.get_Count();
m_wdDoc=m_wdDocs.Add(&Template,&NewTemplate,&DocumentType,&Visible);
this->m_afterDocsCount=m_wdDocs.get_Count();
//得到document变量
//m_wdDoc = m_wdApp.get_ActiveDocument();
//Window tmpWnd=m_wdDoc.get_ActiveWindow();
//tmpWnd.SetVisible(false);
if (!m_wdDoc.m_lpDispatch)
{
AfxMessageBox(_T("Document获取失败!"), MB_OK|MB_ICONWARNING);
return FALSE;
}
InitVariabels();
return TRUE;
}
BOOL CWordWriter::Create()
{
if (FALSE == CreateDocuments())
{
return FALSE;
}
return CreateDocument();
}
void CWordWriter::ShowApp()
{
m_wdApp.put_Visible(TRUE);
}
void CWordWriter::HideApp()
{
m_wdApp.put_Visible(FALSE);
}
BOOL CWordWriter::OpenDocument(const CString& fileName)
{
if (!m_wdDocs.m_lpDispatch)
{
AfxMessageBox(_T("Documents为空!"), MB_OK|MB_ICONWARNING);
return FALSE;
}
CComVariant ConfirmConversions(FALSE), ReadOnly(FALSE);
CComVariant AddToRecentFiles(FALSE), PasswordDocument(_T(""));
CComVariant PasswordTemplate(_T("")), Revert(FALSE);
CComVariant WritePasswordDocument(_T("")), WritePasswordTemplate(_T(""));
CComVariant Format(0), XMLTransform(_T("")),Visible(FALSE); //true才可以读出内容来
COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR),
vZ((short)0);
COleVariant vFileName=COleVariant(fileName,VT_BSTRT);
IDispatch *dispatch=NULL;
//得到document变量
long docsCount;
// try{
try
{
docsCount=m_wdDocs.get_Count();
this->m_preDocsCount=docsCount;
dispatch=m_wdDocs.Open(vFileName,&ConfirmConversions,
&ReadOnly,&AddToRecentFiles,
&PasswordDocument,&PasswordTemplate,
&Revert,&WritePasswordDocument,
&WritePasswordTemplate,&Format,vOptional,&Visible,vFalse, // OpenAndRepair
vZ, // DocumentDirection wdDocumentDirection LeftToRight
vFalse, // NoEncodingDialog
&XMLTransform);
/*dispatch=m_wdDocs.Open(
vFileName, // FileName
vTrue, // Confirm Conversion.
vFalse, // ReadOnly.
vFalse, // AddToRecentFiles.
vOptional, // PasswordDocument.
vOptional, // PasswordTemplate.
vOptional, // Revert.
vOptional, // WritePasswordDocument.
vOptional, // WritePasswordTemplate.
vOptional, // Format. // Last argument for Word 97
vOptional, // Encoding // New for Word 2000/2002
vFalse, // Visible
vOptional, // OpenAndRepair
vZ, // DocumentDirection wdDocumentDirection LeftToRight
vOptional, // NoEncodingDialog
vOptional
) ; // Close Open parameters; */
this->m_afterDocsCount=m_wdDocs.get_Count();
}
catch (COleDispatchException* e)
{
unsigned short code=e->m_wCode;
if(code==0)
{
COleVariant vTrue((short)TRUE),
vFalse((short)FALSE);
long i=m_wdDocs.get_Count();
COleVariant i1((long)1);
CString fileName2;
m_wdDoc.AttachDispatch(m_wdDocs.Item(i1));
fileName2=m_wdDoc.get_FullName();
if((i==docsCount+1)&&(fileName2==fileName))
{
m_wdDoc.Close(vFalse,vTrue,vFalse);
m_wdDoc.ReleaseDispatch();
e->ReportError();
e->Delete();
return FALSE;
}
else{
throw(e);
return FALSE;
}
}
else{
throw(e);
return FALSE;
}
}
if(dispatch!=NULL)
{
m_wdDoc.AttachDispatch(dispatch);
}
else return FALSE;
if (!m_wdDoc.m_lpDispatch)
{
AfxMessageBox(_T("Document获取失败!"), MB_OK|MB_ICONWARNING);
return FALSE;
}
InitVariabels();
return TRUE;
}
BOOL CWordWriter::Open(const CString& fileName)
{
if (FALSE == CreateDocuments())
{
return FALSE;
}
return OpenDocument(fileName);
}
BOOL CWordWriter::SetActiveDocument(short i)
{
COleVariant vIndex((short)(i)),vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
m_wdDoc.AttachDispatch(m_wdDocs.Item(vIndex));
m_wdDoc.Activate();
if (!m_wdDoc.m_lpDispatch)
{
AfxMessageBox(_T("Document获取失败!"), MB_OK|MB_ICONWARNING);
return FALSE;
}
InitVariabels();
//HideApp();
return TRUE;
}
BOOL CWordWriter::SaveDocument()
{
if (!m_wdDoc.m_lpDispatch)
{
AfxMessageBox(_T("Document获取失败!"), MB_OK|MB_ICONWARNING);
return FALSE;
}
m_wdDoc.Save();
return TRUE;
}
BOOL CWordWriter::SaveDocumentAs(const CString& fileName)
{
if (!m_wdDoc.m_lpDispatch)
{
AfxMessageBox(_T("Document获取失败!"), MB_OK|MB_ICONWARNING);
return FALSE;
}
COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR),
vFileFormat((long)0);
COleVariant vFileName(fileName);
m_wdDoc.SaveAs(
vFileName, //VARIANT* FileName
//Word.WdSaveFormat.wdFormatDocument, //VARIANT* FileFormat
vFileFormat,
vOptional, //VARIANT* LockComments
vOptional, //VARIANT* Password
vOptional, //VARIANT* AddToRecentFiles
vOptional, //VARIANT* WritePassword
vOptional, //VARIANT* ReadOnlyRecommended
vOptional, //VARIANT* EmbedTrueTypeFonts
vOptional, //VARIANT* SaveNativePictureFormat
vOptional, //VARIANT* SaveFormsData
vOptional, //VARIANT* SaveAsAOCELetter
vOptional, //VARIANT* Encoding
vOptional, //VARIANT* InsertLineBreaks
vOptional, //VARIANT* AllowSubstitutions
vOptional, //VARIANT* LineEnding
vOptional //VARIANT* AddBiDiMarks
);
return TRUE;
}
BOOL CWordWriter::CloseDocument()
{
// HRESULT hr;
COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
m_wdDoc.Close(vFalse, // SaveChanges.
vTrue, // OriginalFormat.
vFalse // RouteDocument.
);
m_wdDoc.AttachDispatch(m_wdApp.get_ActiveDocument());
/* hr=m_wdDoc.m_lpDispatch->QueryInterface(IID_IDispatch,(LPVOID *)&m_wdApp);
if(FAILED(hr)){
m_wdDoc.m_lpDispatch->Release();
m_wdDoc.m_lpDispatch=NULL;
}*/
if (!m_wdDoc.m_lpDispatch)
{
AfxMessageBox(_T("Document获取失败!"), MB_OK|MB_ICONWARNING);
return FALSE;
}
InitVariabels();
return TRUE;
}
BOOL CWordWriter::CloseDocument2()
{
COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if (!m_wdDoc.m_lpDispatch)
{
AfxMessageBox(_T("Document获取失败!"), MB_OK|MB_ICONWARNING);
return FALSE;
}
if(this->m_afterDocsCount==this->m_preDocsCount+1)
{
m_wdDoc.Close(vFalse, // SaveChanges.
vTrue, // OriginalFormat.
vFalse // RouteDocument.
);
}
/* m_wdDoc.AttachDispatch(m_wdApp.get_ActiveDocument());
if (!m_wdDoc.m_lpDispatch)
{
AfxMessageBox("Document获取失败!", MB_OK|MB_ICONWARNING);
return FALSE;
}
InitVariabels();*/
return TRUE;
}
void CWordWriter::CloseApp()
{
COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
// m_wdDoc.Save();
/*m_wdApp.Quit(vFalse, // SaveChanges.
vTrue, // OriginalFormat.
vFalse // RouteDocument.
);*/
//释放内存申请资源
//m_wdInlineShape.ReleaseDispatch();
//m_wdInlineShapes.ReleaseDispatch();
//m_wdTb.ReleaseDispatch();
m_wdfndInDoc.ReleaseDispatch();
m_wdrpInDoc.ReleaseDispatch();
m_wdCol.ReleaseDispatch();
m_wdRow.ReleaseDispatch();
m_wdCols.ReleaseDispatch();
m_wdRows.ReleaseDispatch();
m_wdStyle.ReleaseDispatch();
m_wdCell.ReleaseDispatch();
m_wdCells.ReleaseDispatch();
m_wdTable.ReleaseDispatch();
m_wdTableSingle.ReleaseDispatch();
m_wdRange.ReleaseDispatch();
m_wdSel.ReleaseDispatch();
//m_wdFt.ReleaseDispatch();
m_wdParagraphs.ReleaseDispatch();
m_wdParagraph.ReleaseDispatch();
m_wdFont0.ReleaseDispatch();
m_wdDoc.ReleaseDispatch();
m_wdDocs.ReleaseDispatch();
if (m_bIsNewApp == TRUE&&m_wdApp.m_lpDispatch!=NULL)
{
m_wdApp.Quit(vFalse, // SaveChanges.
vTrue, // OriginalFormat.
vFalse // RouteDocument.
);
m_wdApp.ReleaseDispatch();
}
else
{
m_wdApp.ReleaseDispatch();
}
//::CoUninitialize();
}
void CWordWriter::WriteText(const CString& szText)
{
m_wdSel.TypeText(szText);
}
void CWordWriter::WriteNewLineText(const CString& szText, int nLineCount /**//* = 1 */)
{
int i;
if (nLineCount <= 0)
{
nLineCount = 0;
}
for (i = 0; i < nLineCount; i++)
{
m_wdSel.TypeParagraph();
}
WriteText(szText);
}
void CWordWriter::WriteEndLine(const CString& szText)
{
m_wdRange.InsertAfter(szText);
}
void CWordWriter::WholeStory()
{
m_wdRange.WholeStory();
}
void CWordWriter::Copy()
{
m_wdRange.CopyAsPicture();
}
void CWordWriter::InsertFile(const CString& fileName)
{
COleVariant vFileName(fileName),
vTrue((short)TRUE),
vFalse((short)FALSE),
vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR),
vNull(_T(""));
/**//*
void InsertFile(LPCTSTR FileName, VARIANT* Range, VARIANT* ConfirmConversions, VARIANT* Link, VARIANT* Attachment);
*/
m_wdSel.InsertFile(
fileName,
vNull,
vFalse,
vFalse,
vFalse
);
}
void CWordWriter::InsertShapes(const CString& fileName)
{
/* COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);*/
// m_wdInlineShapes=m_wdSel.get__InlineShapes();
// m_wdInlineShape=m_wdInlineShapes.AddPicture(fileName,vFalse,vTrue,vOptional);
}
/*void CWordWriter::InsertHyperlink(const CString& fileLink)
{
COleVariant vAddress(fileLink),vSubAddress(_T(""));
CRange aRange = m_wdSel.get_Range();
Hyperlinks vHyperlinks(aRange.get_Hyperlinks());
vHyperlinks.Add(
aRange, //Object,必需。转换为超链接的文本或图形。
vAddress, //Variant 类型,可选。指定的链接的地址。此地址可以是电子邮件地址、Internet 地址或文件名。请注意,Microsoft Word 不检查该地址的正确性。
vSubAddress, //Variant 类型,可选。目标文件内的位置名,如书签、已命名的区域或幻灯片编号。
vAddress, //Variant 类型,可选。当鼠标指针放在指定的超链接上时显示的可用作“屏幕提示”的文本。默认值为 Address。
vAddress, //Variant 类型,可选。指定的超链接的显示文本。此参数的值将取代由 Anchor 指定的文本或图形。
vSubAddress //Variant 类型,可选。要在其中打开指定的超链接的框架或窗口的名字。
);
vHyperlinks.ReleaseDispatch();
}*/
void CWordWriter::InsertTable(int nRow, int nCol)
{
CRange aRng = m_wdSel.get_Range();
COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
CTable0 Tbl = m_wdTable.Add(aRng, nRow, nCol, vOptional, vOptional);
}
void CWordWriter::MoveUp(int nCount)
{
COleVariant vUnit((short)5),
vCount((short)nCount),
vExtend((short)0);
m_wdSel.MoveUp(vUnit, vCount, vExtend);
}
void CWordWriter::MoveDown(int nCount)
{
COleVariant vUnit((short)5),
vCount((short)nCount),
vExtend((short)0);
m_wdSel.MoveDown(vUnit, vCount, vExtend);
}
void CWordWriter::MoveDownSelection(int nCount)
{
COleVariant vUnit((short)5),
vCount((short)nCount),
vExtend((short)1);
m_wdSel.MoveDown(vUnit, vCount, vExtend);
}
void CWordWriter::MoveLeft(int nCount)
{
COleVariant vUnit((short)1),
vCount((short)nCount),
vExtend((short)0);
m_wdSel.MoveLeft(vUnit, vCount, vExtend);
}
void CWordWriter::MoveRight(int nCount)
{
COleVariant vUnit((short)1),
vCount((short)nCount),
vExtend((short)0);
m_wdSel.MoveRight(vUnit, vCount, vExtend);
}
LPDISPATCH CreateOleFont(CFont *pFont)
{
IDispatch* pDispatch = NULL;
USES_CONVERSION;
if (pFont)
{
LOGFONT LogFont;
if (pFont->GetLogFont(&LogFont))
{
LOGFONT* pLogFont = &LogFont;
FONTDESC fd;
fd.cbSizeofstruct = sizeof(FONTDESC);
fd.lpstrName = T2OLE(pLogFont->lfFaceName);
fd.sWeight = (short)pLogFont->lfWeight;
fd.sCharset = pLogFont->lfCharSet;
fd.fItalic = pLogFont->lfItalic;
fd.fUnderline = pLogFont->lfUnderline;
fd.fStrikethrough = pLogFont->lfStrikeOut;
long lfHeight = pLogFont->lfHeight;
if (lfHeight < 0)
lfHeight = -lfHeight;
fd.cySize.Lo = lfHeight * 720000 / 96;
fd.cySize.Hi = 0;
if (FAILED(::OleCreateFontIndirect(&fd, IID_IFontDisp, (void**)&pDispatch)))
pDispatch = NULL;
}
}
return pDispatch;
}
void CWordWriter::SetFont(LPCTSTR strName, float fSize, COLORREF cColor, BOOL bBold, BOOL bItalic, BOOL bUnderline)
{
CFont0 aFont = m_wdSel.get_Font();
ASSERT(LPDISPATCH(aFont));
aFont.put_Name(strName);
aFont.put_Size(fSize);
aFont.put_Bold(bBold);
aFont.put_Color(cColor);
aFont.put_Underline(bUnderline);
// aFont.SetSubscript();
// aFont.SetSuperscript();
}
void CWordWriter::SetAlignment(int nAlignment)
{
CParagraphFormat pf = m_wdSel.get_ParagraphFormat();
pf.put_Alignment(nAlignment);
m_wdSel.put_ParagraphFormat(pf);
}
void CWordWriter::SetOutlineLevel(int nLevel)
{
CParagraphFormat pf = m_wdSel.get_ParagraphFormat();
COleVariant vStyle((long)nLevel);
pf.put_Style(vStyle);
m_wdSel.put_ParagraphFormat(pf);
}
void CWordWriter::GetSingleTable(long index)
{
// m_wdTableSingle.ReleaseDispatch();
// m_wdRows.ReleaseDispatch();
// m_wdCols.ReleaseDispatch();
// COleVariant vDirecton((short)0);
// m_wdSel.Collapse(vDirecton);
LPDISPATCH tmpPatch=m_wdTable.Item(index);
m_wdTableSingle.AttachDispatch(tmpPatch);
m_wdRows.AttachDispatch(m_wdTableSingle.get_Rows());
m_wdCols.AttachDispatch(m_wdTableSingle.get_Columns());
m_wdTableSingle.Select();
}
long CWordWriter::GetSingleTableRowCount(void)
{
return m_wdRows.get_Count();
}
long CWordWriter::GetSingleTableColCount(void)
{
return m_wdCols.get_Count();
}
void CWordWriter::SetCell(long row,long column) //得到表格某个单元格
{
dispatch=m_wdTableSingle.Cell(row,column);//获取单元格
m_wdCell.AttachDispatch(dispatch);
}
void CWordWriter::SetCellText(const CString& content)
{
dispatch=m_wdCell.get_Range();
m_wdRange.AttachDispatch(dispatch);
m_wdRange.put_Text(content);
}
void CWordWriter::ReplaceText1(const CString& originalWord,const CString& postWord)
{
m_wdRange=m_wdDoc.get_Content();
m_wdfndInDoc=m_wdRange.get_Find();
m_wdfndInDoc.ClearFormatting();
m_wdrpInDoc=m_wdfndInDoc.get_Replacement();
m_wdrpInDoc.ClearFormatting();
COleVariant Text(originalWord); //被替换
COleVariant MatchCase((short)TRUE);
COleVariant MatchWholeWord((short)FALSE);
COleVariant MatchWildcards((short)FALSE);
COleVariant MatchSoundsLike((short)FALSE);
COleVariant MatchAllWordForms((short)FALSE);
COleVariant Forward((short)TRUE);
COleVariant Wrap((short)1);//用msgbox(wdFindContinue)得到
COleVariant format((short)FALSE);
COleVariant ReplaceWith=(postWord);//替换
COleVariant Replace((short)2);//用msgbox(wdReplaceAll)得到
COleVariant MatchKashida=((short)FALSE); //以下四个参数默认false
COleVariant MatchDiacritics=((short)FALSE);
COleVariant MatchAlefHamza=((short)FALSE);
COleVariant MatchControl=((short)FALSE);
m_wdfndInDoc.Execute(&Text, &MatchCase, &MatchWholeWord, &MatchWildcards,
&MatchSoundsLike, &MatchAllWordForms, &Forward, &Wrap,
&format, &ReplaceWith, &Replace, &MatchKashida,
&MatchDiacritics, &MatchAlefHamza, &MatchControl);
}
void CWordWriter::ReplaceText2(const CString& originalWord,const CString& postWord)
{
m_wdRange=m_wdDoc.get_Content();
m_wdfndInDoc=m_wdRange.get_Find();
m_wdfndInDoc.ClearFormatting();
m_wdrpInDoc=m_wdfndInDoc.get_Replacement();
m_wdrpInDoc.ClearFormatting();
COleVariant Text(originalWord); //被替换
COleVariant MatchCase((short)TRUE);
COleVariant MatchWholeWord((short)TRUE);// 不一样,必须匹配所有字符
COleVariant MatchWildcards((short)FALSE);
COleVariant MatchSoundsLike((short)FALSE);
COleVariant MatchAllWordForms((short)FALSE);
COleVariant Forward((short)TRUE);
COleVariant Wrap((short)1);//用msgbox(wdFindContinue)得到
COleVariant format((short)FALSE);
COleVariant ReplaceWith=(postWord);//替换
COleVariant Replace((short)2);//用msgbox(wdReplaceAll)得到
COleVariant MatchKashida=((short)FALSE); //以下四个参数默认false
COleVariant MatchDiacritics=((short)FALSE);
COleVariant MatchAlefHamza=((short)FALSE);
COleVariant MatchControl=((short)FALSE);
m_wdfndInDoc.Execute(&Text, &MatchCase, &MatchWholeWord, &MatchWildcards,
&MatchSoundsLike, &MatchAllWordForms, &Forward, &Wrap,
&format, &ReplaceWith, &Replace, &MatchKashida,
&MatchDiacritics, &MatchAlefHamza, &MatchControl);
}
BOOL CWordWriter::FindKeyWordText(const CString& KeyWord)
{
//在整个文档内查找
//m_wdSel=m_wdApp.get_Selection();
m_wdfndInDoc=m_wdSel.get_Find();
COleVariant Text(KeyWord); //被替换-
COleVariant MatchCase((short)FALSE); //-
COleVariant MatchWholeWord((short)TRUE); //-
COleVariant MatchWildcards((short)FALSE); //-
COleVariant MatchSoundsLike((short)FALSE); //-
COleVariant MatchAllWordForms((short)FALSE);//-
COleVariant Forward((short)TRUE); //-
COleVariant Wrap((short)1);//-
COleVariant format((short)FALSE); //-
COleVariant ReplaceWith=(L"");//替换
COleVariant Replace((short)0);//用msgbox(wdReplaceAll)得到
COleVariant MatchKashida=((short)FALSE); //以下四个参数默认false
COleVariant MatchDiacritics=((short)FALSE);
COleVariant MatchAlefHamza=((short)FALSE);
COleVariant MatchControl=((short)FALSE);
return m_wdfndInDoc.Execute(&Text, &MatchCase, &MatchWholeWord, &MatchWildcards,
&MatchSoundsLike, &MatchAllWordForms, &Forward, &Wrap,
&format, &ReplaceWith, &Replace, &MatchKashida,
&MatchDiacritics, &MatchAlefHamza, &MatchControl);
}
BOOL CWordWriter::FindKeyWordText2(const CString& KeyWord)
{
//在所选区域内查找
// m_wdSel=m_wdApp.get_Selection();
m_wdfndInDoc=m_wdSel.get_Find();
COleVariant Text(KeyWord); //被替换-
COleVariant MatchCase((short)FALSE); //-
COleVariant MatchWholeWord((short)TRUE); //-
COleVariant MatchWildcards((short)FALSE); //-
COleVariant MatchSoundsLike((short)FALSE); //-
COleVariant MatchAllWordForms((short)FALSE);//-
COleVariant Forward((short)TRUE); //-
COleVariant Wrap((short)0);//-
COleVariant format((short)FALSE); //-
COleVariant ReplaceWith=(L"");//替换
COleVariant Replace((short)0);//用msgbox(wdReplaceAll)得到
COleVariant MatchKashida=((short)FALSE); //以下四个参数默认false
COleVariant MatchDiacritics=((short)FALSE);
COleVariant MatchAlefHamza=((short)FALSE);
COleVariant MatchControl=((short)FALSE);
return m_wdfndInDoc.Execute(&Text, &MatchCase, &MatchWholeWord, &MatchWildcards,
&MatchSoundsLike, &MatchAllWordForms, &Forward, &Wrap,
&format, &ReplaceWith, &Replace, &MatchKashida,
&MatchDiacritics, &MatchAlefHamza, &MatchControl);
}
//定位到第几页的第几行,0为第一行,1为第二行
void CWordWriter::SetPageRow(const CString& Pageindex,long rowIndex)
{
COleVariant PageWhat((short)1),
PageWhich((short)1),PageCount((short)1),PageName(Pageindex);
COleVariant LineWhat((short)3),
LineWhich((short)2),LineCount((long)rowIndex),LineName(L"");
COleVariant Unit((short)5),
Count((short)1),Extend((short)1);
m_wdSel.GoTo(PageWhat,PageWhich,PageCount,PageName);
if(rowIndex!=0)
{
m_wdSel.GoTo(LineWhat,LineWhich,LineCount,LineName);
}
}
//range定位到第几页的第几行,0为第一行,1为第二行
/*void CWordWriter::SetRangePageRow(const CString& Pageindex,long rowIndex)
{
COleVariant PageWhat((short)1),
PageWhich((short)1),PageCount((short)1),PageName(Pageindex);
COleVariant LineWhat((short)3),
LineWhich((short)2),LineCount((long)rowIndex),LineName(L"");
COleVariant Unit((short)5),
Count((short)1),Extend((short)1);
this->m_wdRange.GoTo(PageWhat,PageWhich,PageCount,PageName);
if(rowIndex!=0)
{
m_wdRange.GoTo(LineWhat,LineWhich,LineCount,LineName);
}
}*/
CString CWordWriter::GetJSInfo(void)
{
COleVariant Unit((short)1),Count((short)2),Extend((short)0);
m_wdSel.MoveRight(Unit,Count,Extend);
COleVariant Unit2((short)5),Extend2((short)1);
m_wdSel.EndKey(Unit2,Extend2);
CString strXMMC=m_wdSel.get_Text();
return strXMMC;
}
long CWordWriter::GetSeletionStartRowNum(void)
{
COleVariant oldVar = m_wdSel.get_Information(wdStartOfRangeRowNumber);
long oldVarInt=oldVar.lVal;
return oldVarInt;
}
long CWordWriter::GetSeletionStartColNum(void)
{
COleVariant oldVar = m_wdSel.get_Information(wdStartOfRangeColumnNumber);
long oldVarInt=oldVar.lVal;
return oldVarInt;
}
long CWordWriter::GetSeletionTableNum(void)
{
m_wdTable=m_wdSel.get_Tables();
return m_wdTable.get_Count();
}
void CWordWriter::GetSeletionTables(void)
{
m_wdTable=m_wdSel.get_Tables();
}
CString CWordWriter::GetCellText(void)
{
dispatch=m_wdCell.get_Range();
m_wdRange.AttachDispatch(dispatch);
return m_wdRange.get_Text();
}
void CWordWriter::SelectAllContent(void)
{
m_wdSel = m_wdApp.get_Selection();
m_wdSel.WholeStory();
}
void CWordWriter::selectDocument()
{
m_wdDoc.Select();
}
void CWordWriter::selectPage(int)
{
}
void CWordWriter::copySelection()
{
m_wdSel.Copy();
}
void CWordWriter::paste()
{
m_wdSel.Paste();
}
void CWordWriter::selectionCollapse()
{
COleVariant wdCollapseEnd((short)0);
m_wdSel.Collapse(wdCollapseEnd);
}
void CWordWriter::insertBreak()
{
COleVariant wdColumnBreak((short)8);
m_wdSel.InsertBreak(wdColumnBreak);
}
// 得到当前word文档中段落的总数
void CWordWriter::GetParagraphs(void)
{
m_wdParagraphs=m_wdDoc.get_Paragraphs();
}
void CWordWriter::GetParagraph(long index)
{
m_wdParagraph=m_wdParagraphs.Item(index);
//m_wdParagraphs=m_wdDoc.get_Paragraphs();
}
long CWordWriter::GetDocParagraphsCount(void)
{
return m_wdParagraphs.get_Count();
}
void CWordWriter::GetParagraphStyle(void)
{
//m_wdStyle=m_wdParagraph.get_st
//m_wdParagraph=m_wdParagraphs.Item(index);
//m_wdParagraphs=m_wdDoc.get_Paragraphs();
}
#define wdParagraph 4
void CWordWriter::GetParagraphSelectionAndRange(void)
{
//CRange m_wdRange2=m_wdParagraph.get_Range();
m_wdRange=m_wdParagraph.get_Range();
m_wdRange.Select();
m_wdSel = m_wdApp.get_Selection();
/* CParagraphs m_wdParagraphs2=m_wdSel.get_Paragraphs();
long pCount=m_wdParagraphs2.get_Count();
if(pCount>1)
{
//COleVariant wdParagraphVar((long)wdParagraph);
//COleVariant wdCountVar((long)1);
// m_wdRange.Next(wdParagraphVar,wdCountVar);
//m_wdRange.Select();
m_wdParagraph=m_wdParagraphs2.Item(2);
m_wdRange=m_wdParagraph.get_Range();
COleVariant wdParagraphVar((long)wdParagraph);
COleVariant wdCountVar((long)2);
m_wdRange.Previous(wdParagraphVar,wdCountVar);
m_wdRange.Select();
// m_wdParagraph=m_wdParagraphs2.Item(1);
// m_wdRange=m_wdParagraph.get_Range();
//m_wdRange.Select();
}
else{
m_wdRange.Select();
}
//m_wdParagraphs2=m_wdRange.get_Paragraphs();
//long pCount2=m_wdParagraphs2.get_Count();
m_wdSel = m_wdApp.get_Selection();*/
//m_wdStyle=m_wdParagraph.get_st
//m_wdParagraph=m_wdParagraphs.Item(index);
//m_wdParagraphs=m_wdDoc.get_Paragraphs();
}
void CWordWriter::GetParagraphFont(void)
{
m_wdFont0=m_wdSel.get_Font();
//m_wdParagraph=m_wdParagraphs.Item(index);
//m_wdParagraphs=m_wdDoc.get_Paragraphs();
}
void CWordWriter::GetParagraphFirstCharRange(void)
{
//m_wdFirstRange
m_wdChars=m_wdRange.get_Characters();
m_wdFirstRange=m_wdChars.get_First();
// CRange m_wdLastRange;
//m_wdFont0=m_wdSel.get_Font();
//m_wdParagraph=m_wdParagraphs.Item(index);
//m_wdParagraphs=m_wdDoc.get_Paragraphs();
}
void CWordWriter::GetParagraphLastCharRange(void)
{
m_wdChars=m_wdRange.get_Characters();
m_wdLastRange=m_wdChars.get_Last();
// CRange m_wdLastRange;
//m_wdFont0=m_wdSel.get_Font();
//m_wdParagraph=m_wdParagraphs.Item(index);
//m_wdParagraphs=m_wdDoc.get_Paragraphs();
}
#define wdWindowDocument 0
#define wdPrintView 3
#define wdMainTextStory 1
#define wdTextRectangle 0
//http://msdn.microsoft.com/en-us/library/Aa211923 常量定义
long CWordWriter::GetLineCountOfAPage(long pageIndex)
{
long lineCount=-1;
/* CString PageIndexStr=L"";
PageIndexStr.Format(L"%ld",pageIndex);
SetPageRow(PageIndexStr,0);
for(int i=1;i<1000;i++)
{
MoveDown(1);
COleVariant PageNumber_Var =m_wdSel.get_Information(wdActiveEndPageNumber);
long PageNumber_Int=PageNumber_Var.lVal;
if(PageNumber_Int>pageIndex)
{
return i;
}
}
return 0;*/
try{
CString PageStr=L"";
PageStr.Format(L"%ld",pageIndex);
this->SetPageRow(PageStr,0);
m_wdPage=m_wdPages.Item(pageIndex);
m_wdRectangles=m_wdPage.get_Rectangles();
long RectanglesCount=m_wdRectangles.get_Count();
for(int j=1;j<=RectanglesCount;j++)
{
m_wdRectangle=m_wdRectangles.Item(j);
if(m_wdRectangle.get_RectangleType()==wdTextRectangle)
{
m_wdLines=m_wdRectangle.get_Lines();
lineCount=m_wdLines.get_Count();
}
}
}catch (COleDispatchException* e)
{
unsigned short code=e->m_wCode;
//m_scError = -2146822347
CString str1;
str1.Format(L"%s ---%s---%x",e->m_strDescription,e->m_strSource,e->m_scError);
::AfxMessageBox(str1);
e->ReportError();
e->Delete();
return -1;
}
return lineCount;
}
void CWordWriter::GetShapeRange(void)
{
CRange tmpRange1;
tmpRange1=this->m_wdParagraph.get_Range();
m_wdShapeRange=tmpRange1.get_ShapeRange();
}
void CWordWriter::GetPages(void)
{
m_wdDoc.Activate();
//m_wdDoc.Repaginate();
m_wdWindow0 = m_wdDoc.get_ActiveWindow();
m_wdPane = m_wdWindow0.get_ActivePane();
m_wdPages = m_wdPane.get_Pages();
/* m_wdDoc.Repaginate();
m_wdWindow0=m_wdDoc.get_ActiveWindow();
//long WindowsCount=m_wdWindows.get_Count();
//for(int i=1;i<=WindowsCount;i++)
//{
//COleVariant index((long)i);
//m_wdWindow0=m_wdWindows.Item(index);
if(m_wdWindow0.get_Type()==wdWindowDocument)
{
m_wdPane=m_wdWindow0.get_ActivePane();
m_wdView0=m_wdWindow0.get_View();
m_wdView0.put_Type(wdPrintView);
//long PanesCount=m_wdPanes.get_Count();
//if(PanesCount>=1)
//{
//m_wdPane=m_wdPanes.Item(1);
//m_wdView0=m_wdPane.get_View();
//m_wdView0.put_Type(wdPrintView);
//m_wdPane.Activate();
m_wdPages=m_wdPane.get_Pages();
//}
}
//}*/
}
void CWordWriter::GetSelection(void)
{
m_wdSel = m_wdApp.get_Selection();
}
void CWordWriter::GetParagraphRangeBorders(void)
{
m_wdparagraphBorders=m_wdFont0.get_Borders();
//m_wdparagraphBorders=m_wdRange.get_Borders();
}
void CWordWriter::GetParagraphFormat(void)
{
m_wdParagraphFormat=m_wdParagraph.get_Format();
}
long CWordWriter::GetPageCount(void)
{
COleVariant oldVar = m_wdSel.get_Information(4);
long oldVarInt=oldVar.lVal;
return oldVarInt;
}
void CWordWriter::VerifyParagraphStyle(void)
{
}
WordWriter.h头文件是:
// WordOffice.h: interface for the CWordWriter class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_WORDOFFICE_H__46EADF82_81AD_40D1_B795_D41ECD403863__INCLUDED_)
#define AFX_WORDOFFICE_H__46EADF82_81AD_40D1_B795_D41ECD403863__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//#include "atlbase.h"
#include "..\CApplication.h"
#include "..\CColumn.h"
#include "..\CColumns0.h"
#include "..\CCell.h"
#include "..\CCells.h"
#include "..\CDocuments.h"
#include "..\CDocument0.h"
#include "..\CFind.h"
#include "..\CFont0.h"
#include "..\CRange.h"
#include "..\CParagraph.h"
#include "..\CParagraphs.h"
#include "..\CParagraphFormat.h"
#include "..\CReplacement.h"
#include "..\CRow.h"
#include "..\CRows.h"
#include "..\CSelection.h"
#include "..\CStyle.h"
#include "..\CStyles.h"
#include "..\CTable0.h"
#include "..\CTables0.h"
#include "..\CCharacters.h"
#include "..\CBorders.h"
#include "..\CWindows.h"
#include "..\CWindow0.h"
#include "..\CView0.h"
#include "..\CPanes.h"
#include "..\CPane.h"
#include "..\CPages.h"
#include "..\CPage.h"
#include "..\CLines.h"
#include "..\CRectangles.h"
#include "..\CRectangle.h"
#include "..\CShape.h"
#include "..\CShapeRange.h"
#include "..\CTextFrame.h"
#include "..\CShapes.h"
#include "..\CGroupShapes.h"
//using namespace Wordnamespace;//引用自己定义的命名空间
//#include "cstringt.h"
#include "d:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\afxstr.h"
//using namespace Wordnamespace;//引用自己定义的命名空间
class CWordWriter
{
public:
CParagraphs m_wdParagraphs;
CParagraph m_wdParagraph;
CStyle m_wdStyle;
CFont0 m_wdFont0;
CSelection m_wdSel;
CRange m_wdRange;
CRange m_wdFirstRange;
CRange m_wdLastRange;
CCharacters m_wdChars;
CParagraphFormat m_wdParagraphFormat;
CBorders m_wdparagraphBorders;
CWindows m_wdWindows;
CWindow0 m_wdWindow0;
CView0 m_wdView0;
CPanes m_wdPanes;
CPane m_wdPane;
CPages m_wdPages;
CApplication m_wdApp;
CDocuments m_wdDocs;
CDocument0 m_wdDoc;
CPage m_wdPage;
CLines m_wdLines;
CRectangles m_wdRectangles;
CRectangle m_wdRectangle;
CRange m_wdTmpRange;
CShape m_wdShape;
CShapeRange m_wdShapeRange;
private:
CReplacement m_wdrpInDoc;
CFind m_wdfndInDoc;
CTables0 m_wdTable;
CTable0 m_wdTableSingle;
CCell m_wdCell;
CCells m_wdCells;
CColumns0 m_wdCols;
CRows m_wdRows;
CColumn m_wdCol;
CRow m_wdRow;
// CStyle m_wdStyle;
IDispatch *dispatch;
//InlineShapes m_wdInlineShapes;
//InlineShape m_wdInlineShape;
BOOL m_bIsNewApp;
long m_preDocsCount;
long m_afterDocsCount;
public:
CWordWriter();
virtual ~CWordWriter();
public:
void MoveDownSelection(int nCount);
void insertBreak(void);
void selectionCollapse(void);
void paste(void);
void copySelection(void);
void selectPage(int);
void selectDocument(void);
//操作
//**********************创建新文档*******************************************
BOOL CreateApp(); //创建一个新的WORD应用程序
BOOL CreateDocuments(); //创建一个新的Word文档集合
BOOL CreateDocument(); //创建一个新的Word文档
BOOL CreateDocument(const CString& modelFile);//dsfsdf
BOOL Create(); //创建新的WORD应用程序并创建一个新的文档
void ShowApp(); //显示WORD文档
void HideApp(); //隐藏word文档
void GetSingleTable(long index); //得到一个表格
long GetSingleTableRowCount(void);
long GetSingleTableColCount(void);
void SetCell(long row,long column); //得到表格某个单元格
void SetCellText(const CString& content);
void ReplaceText1(const CString& originalWord,const CString& postWord);
void ReplaceText2(const CString& originalWord,const CString& postWord);
BOOL FindKeyWordText(const CString& KeyWord);
BOOL FindKeyWordText2(const CString& KeyWord);
void SetPageRow(const CString& Pageindex,long rowIndex);//定位到第几页的第几行,0为第一行
CString GetJSInfo(void);
long GetSeletionStartRowNum(void);
long GetSeletionStartColNum(void);
long GetSeletionTableNum(void);
CString GetCellText(void);
void SelectAllContent(void);
void GetSeletionTables(void);
//**********************打开文档*********************************************
BOOL OpenDocument(const CString& fileName);//打开已经存在的文档。
BOOL Open(const CString& fileName); //创建新的WORD应用程序并打开一个已经存在的文档。
BOOL SetActiveDocument(short i); //设置当前激活的文档。
//**********************保存文档*********************************************
BOOL SaveDocument(); //文档是以打开形式,保存。
BOOL SaveDocumentAs(const CString& fileName);//文档以创建形式,保存。
BOOL CloseDocument();
BOOL CloseDocument2();
void CloseApp();
//**********************文本书写操作*****************************************
void WriteText(const CString& szText); //当前光标处写文本
void WriteNewLineText(const CString& szText, int nLineCount = 1); //换N行写字
void WriteEndLine(const CString& szText); //文档结尾处写文本
void WholeStory(); //全选文档内容
void Copy(); //复制文本内容到剪贴板
void InsertFile(const CString& fileName); //将本地的文件全部内容写入到当前文档的光标处。
//**********************图片插入操作*****************************************
void InsertShapes(const CString& fileName);//在当前光标的位置插入图片
//**********************超链接插入操作*****************************************
void InsertHyperlink(const CString& fileLink);//超级链接地址,可以是相对路径。
//**********************表格插入操作*****************************************
void InsertTable(int nRow, int nCol); // 在当前位置插入一个大小为nRow*nCol的表格
//**********************光标移动操作*****************************************
void MoveUp(int nCount);
void MoveDown(int nCount);
void MoveLeft(int nCount);
void MoveRight(int nCount);
//**********************格式操作*********************************************
void SetFont(LPCTSTR strName, float fSize, COLORREF cColor, BOOL bBold, BOOL bItalic, BOOL bUnderline);
void SetAlignment(int nAlignment);
void SetOutlineLevel(int nLevel);
enum {
Align_Left,
Align_Center,
Align_Right
};
enum {
Outline_Level1 = -2,
Outline_Level2 = -3,
Outline_Level3 = -4,
Outline_Level4 = -5,
Outline_Level5 = -6,
Outline_Level6 = -7,
Outline_Level7 = -8,
Outline_Level8 = -9,
Outline_Level9 = -10,
Outline_Text = -67
};
private:
BOOL InitVariabels();
public:
void GetParagraphs(void);
// 得到当前word文档中段落的总数
long GetDocParagraphsCount(void);
void GetParagraph(long index);
void VerifyParagraphStyle(void);
void GetParagraphStyle(void);
void GetParagraphFont(void);
void GetParagraphSelectionAndRange(void);
void GetParagraphFirstCharRange(void);
void GetParagraphLastCharRange(void);
void GetParagraphFormat(void);
void GetParagraphSingleCharRange(int index);
void GetParagraphRangeBorders(void);
long GetPageCount(void);
long GetLineCountOfAPage(long pageIndex);
void GetPages(void);
void GetSelection(void);
void GetShapeRange(void);
};
#endif // !defined(AFX_WORDOFFICE_H__46EADF82_81AD_40D1_B795_D41ECD403863__INCLUDED_)
验证程序的主文件:
// FormView_JSBVerify.cpp : 实现文件
//
#include "stdafx.h"
#include "JSBVerification.h"
#include "FormView_JSBVerify.h"
#include "Shlwapi.h"
#pragma comment(lib,"shlwapi.lib")
// CFormView_JSBVerify
IMPLEMENT_DYNCREATE(CFormView_JSBVerify, CFormView)
CFormView_JSBVerify::CFormView_JSBVerify()
: CFormView(CFormView_JSBVerify::IDD)
{
m_pDialogProgress=new CDialog_JSB_Progress(this);
}
CFormView_JSBVerify::~CFormView_JSBVerify()
{
delete m_pDialogProgress;
m_pDialogProgress=NULL;
}
void CFormView_JSBVerify::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
DDX_FileEditCtrl(pDX, IDC_EDIT_JSBS_File, m_fileeditctrl, FEC_FILE);
DDX_Control(pDX, IDC_EDIT_Verify_Output, m_Cedit_Output);
}
BEGIN_MESSAGE_MAP(CFormView_JSBVerify, CFormView)
ON_BN_CLICKED(IDOK, &CFormView_JSBVerify::OnBnClickedOk)
ON_MESSAGE(WM_USER_THREAD_FINISHED, OnThreadFinished)
END_MESSAGE_MAP()
// CFormView_JSBVerify 诊断
#ifdef _DEBUG
void CFormView_JSBVerify::AssertValid() const
{
CFormView::AssertValid();
}
#ifndef _WIN32_WCE
void CFormView_JSBVerify::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif
#endif //_DEBUG
UINT CFormView_JSBVerify::MyThreadFunc(LPVOID lParam)
{
//THREADINFOSTRUCT* tis=(THREADINFOSTRUCT *)lParam;
return ((CFormView_JSBVerify *)lParam)->ThreadGo();
}
UINT CFormView_JSBVerify::ThreadGo()
{
m_pDialogProgress->m_hEventModelDlgCreated=CreateEvent(NULL,TRUE,TRUE,_T("ModalDlgCreated")); // 此事件初始状态为FALSE,必须手动复位
ResetEvent(m_pDialogProgress->m_hEventModelDlgCreated);
m_hThread2 = AfxBeginThread(CFormView_JSBVerify::MyThreadFunc2,this,
THREAD_PRIORITY_NORMAL,0,0);
ASSERT(m_hThread2);
m_pDialogProgress->DoModal();
return 0;
}
UINT CFormView_JSBVerify::MyThreadFunc2(LPVOID lParam)
{
//THREADINFOSTRUCT* tis=(THREADINFOSTRUCT *)lParam;
return ((CFormView_JSBVerify *)lParam)->ThreadGo2();
}
//运行时选择的word文档的 vba界面不能打开,否则报错
UINT CFormView_JSBVerify::ThreadGo2()
{
//m_strGCXMJJNR=L"";
::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
unsigned long ret=WaitForSingleObject(m_pDialogProgress->m_hEventModelDlgCreated, 5000);
//::CoInitialize(NULL);
//::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
CString JSBWordFile=L"",filenameFull=L"";
m_fileeditctrl.GetWindowText(JSBWordFile);
if(!PathFileExists(JSBWordFile))
{
::AfxMessageBox(L"文件不存在,请重新选择!");//,MB_APPLMODAL
CloseHandle(m_pDialogProgress->m_hEventModelDlgCreated);
return 0;
}
if (WAIT_OBJECT_0==ret) // 阻塞当前线程,等待m_hEventModelDlgCreated标识在CDlgModal::OnInitDialog()中被置位,超时为2000毫秒(视情况而定,机器负荷不重的时候2秒足够了)。WaitForSingleObject函数返回WAIT_OBJECT_0表示在规定时间(2000毫秒)内该标识被置位。其它返回值请参阅MSDN
{
if(FALSE==m_WordWriter.Open(JSBWordFile))
{
m_WordWriter.CloseDocument2();
m_WordWriter.CloseApp();
return 0;
}
//m_WordWriter.ShowApp();
m_WordWriter.GetParagraphs();
long paragraphCount=m_WordWriter.GetDocParagraphsCount();
CString AllOutputStr=L"";
for(long i=1;i<=paragraphCount;i++)
{
//m_WordWriter.m_wdParagraphs.Item(1);
if(m_pDialogProgress->m_ExitWorkThread==true)
{
::PostMessage(m_pDialogProgress->m_hWnd,WM_USER_THREAD_FINISHED,0,0);
m_WordWriter.CloseDocument2();
m_WordWriter.CloseApp();
CloseHandle(m_pDialogProgress->m_hEventModelDlgCreated);
::CoUninitialize();
m_Cedit_Output.SetWindowTextW(AllOutputStr);
return -1;
}
m_WordWriter.GetParagraph(i);
m_WordWriter.GetParagraphSelectionAndRange();
m_WordWriter.GetParagraphFont();
CString FontName=m_WordWriter.m_wdFont0.get_Name();
float FontSize=m_WordWriter.m_wdFont0.get_Size();
CString OutputStr0=L"";
CString OutputStr2=L"";
bool MismatchFlag=false;//不匹配标志
if(FontName!=L"宋体")
{
OutputStr2=L"字体不匹配,";
MismatchFlag=true;
}
if(!(FontSize<14.000001 &&FontSize>13.999999))
{
OutputStr2+=L"字号不匹配,";
MismatchFlag=true;
}
long FontEmboss=m_WordWriter.m_wdFont0.get_Emboss();//阳文2
if(FontEmboss!=0)
{
OutputStr2+=L"阳文不匹配,";
MismatchFlag=true;
}
long FontEngrave=m_WordWriter.m_wdFont0.get_Engrave();//阴文3
if(FontEngrave!=0)
{
OutputStr2+=L"阴文不匹配,";
MismatchFlag=true;
}
long FontOutline=m_WordWriter.m_wdFont0.get_Outline();//镂空4
if(FontOutline!=0)
{
OutputStr2+=L"镂空不匹配,";
MismatchFlag=true;
}
long FontScaling=m_WordWriter.m_wdFont0.get_Scaling();//字符比例5
if(FontScaling!=100)
{
OutputStr2+=L"字符比例不匹配,";
MismatchFlag=true;
}
long FontShadow=m_WordWriter.m_wdFont0.get_Shadow();//阴影6
if(FontShadow!=0)
{
OutputStr2+=L"阴影不匹配,";
MismatchFlag=true;
}
long FontStrikeThrough=m_WordWriter.m_wdFont0.get_StrikeThrough();//删除线7
if(FontStrikeThrough!=0)
{
OutputStr2+=L"删除线不匹配,";
MismatchFlag=true;
}
long FontDoubleStrikeThrough=m_WordWriter.m_wdFont0.get_DoubleStrikeThrough();//双删除线8
if(FontDoubleStrikeThrough!=0)
{
OutputStr2+=L"双删除线不匹配,";
MismatchFlag=true;
}
long FontSubscript=m_WordWriter.m_wdFont0.get_Subscript();//下标9
if(FontSubscript!=0)
{
OutputStr2+=L"下标不匹配,";
MismatchFlag=true;
}
long FontSuperscript=m_WordWriter.m_wdFont0.get_Superscript();//上标10
if(FontSuperscript!=0)
{
OutputStr2+=L"上标不匹配,";
MismatchFlag=true;
}
long FontHidden=m_WordWriter.m_wdFont0.get_Hidden();//隐藏11
if(FontHidden!=0)
{
OutputStr2+=L"隐藏不匹配,";
MismatchFlag=true;
}
long FontColor=m_WordWriter.m_wdFont0.get_ColorIndex();//隐藏11
//TRACE("%ld----%ld",i,FontColor);
if(FontColor!=wdAuto&&FontColor!=wdBlack)
{
OutputStr2+=L"字体颜色不匹配,";
MismatchFlag=true;
}
long FontHiliteColor=m_WordWriter.m_wdRange.get_HighlightColorIndex();//高亮
//TRACE("%ld----%ld",i,FontHiliteColor);
if(FontHiliteColor!=0)
{
OutputStr2+=L"高亮显示不匹配,";
MismatchFlag=true;
}
float FontSpacing=m_WordWriter.m_wdFont0.get_Spacing();//字间距
//TRACE("%ld----%f\n",i,FontSpacing);
if(FontSpacing!=0)
{
OutputStr2+=L"字间距不匹配,";
MismatchFlag=true;
}
long FontPosition=m_WordWriter.m_wdFont0.get_Position();//相对于基准线的文本位置(以磅为单位)。
//TRACE("%ld----%ld\n",i,FontPosition);
if(FontPosition!=0)
{
OutputStr2+=L"文本位置不匹配,";
MismatchFlag=true;
}
long FontDisableCharacterSpaceGrid=m_WordWriter.m_wdFont0.get_DisableCharacterSpaceGrid();//
//TRACE("%ld----%ld\n",i,FontPosition);
if(FontDisableCharacterSpaceGrid!=FALSE)
{
OutputStr2+=L"网格对齐不匹配,";
MismatchFlag=true;
}
long FontAnimation=m_WordWriter.m_wdFont0.get_Animation();//
//TRACE("%ld----%ld\n",i,FontPosition);
if(FontAnimation!=0)
{
OutputStr2+=L"动画不匹配,";
MismatchFlag=true;
}
float FontKerning=m_WordWriter.m_wdFont0.get_Kerning();//
//TRACE("%ld----%ld\n",i,FontPosition);
if(!(FontKerning>=0.999999&&FontKerning<=1.000001))
{
OutputStr2+=L"调整字间距不匹配,";
MismatchFlag=true;
}
if(m_WordWriter.m_wdRange.get_Bold()!=0)
{
OutputStr2+=L"加粗不匹配,";
MismatchFlag=true;
}
if(m_WordWriter.m_wdRange.get_Underline()!=0)
{
OutputStr2+=L"下划线不匹配,";
MismatchFlag=true;
}
if(m_WordWriter.m_wdRange.get_Italic()!=0)
{
OutputStr2+=L"斜体不匹配,";
MismatchFlag=true;
}
if(m_WordWriter.m_wdRange.get_EmphasisMark()!=0)
{
OutputStr2+=L"着重号不匹配,";
MismatchFlag=true;
}
m_WordWriter.GetParagraphRangeBorders();
if(m_WordWriter.m_wdparagraphBorders.get_Enable()!=0)
{
OutputStr2+=L"边框不匹配,";
MismatchFlag=true;
}
m_WordWriter.GetParagraphFormat();
float paragraphLineSpacing=m_WordWriter.m_wdParagraphFormat.get_LineSpacing();
float paragraphSpaceAfter=m_WordWriter.m_wdParagraphFormat.get_SpaceAfter();
float paragraphSpaceBefore=m_WordWriter.m_wdParagraphFormat.get_SpaceBefore();
if(!(paragraphLineSpacing<18.0001&¶graphLineSpacing>17.9999))
{
OutputStr2+=L"段间距不匹配,";
MismatchFlag=true;
}
if(!(paragraphSpaceBefore<0.0001&¶graphSpaceBefore>-0.0001))
{
OutputStr2+=L"段前间距不匹配,";
MismatchFlag=true;
}
if(!(paragraphSpaceAfter<0.0001&¶graphSpaceAfter>-0.0001))
{
OutputStr2+=L"段后间距不匹配,";
MismatchFlag=true;
}
//TRACE("%d----%f----%f---\n",i,paragraphSpaceAfter,paragraphSpaceBefore);
if(MismatchFlag==true)
{
m_WordWriter.GetParagraphFirstCharRange();
COleVariant FirstCharPageNumber_Var =m_WordWriter.m_wdFirstRange.get_Information(wdActiveEndPageNumber);
long FirstCharPageNumber_Int=FirstCharPageNumber_Var.lVal;
COleVariant FirstCharLineNumber_Var =m_WordWriter.m_wdFirstRange.get_Information(wdFirstCharacterLineNumber);
long FirstCharLineNumber_Int=FirstCharLineNumber_Var.lVal;
COleVariant FirstCharColNumber_Var =m_WordWriter.m_wdFirstRange.get_Information(wdFirstCharacterColumnNumber);
long FirstCharColNumber_Int=FirstCharColNumber_Var.lVal;
m_WordWriter.GetParagraphLastCharRange();
COleVariant LastCharPageNumber_Var =m_WordWriter.m_wdLastRange.get_Information(wdActiveEndPageNumber);
long LastCharPageNumber_Int=LastCharPageNumber_Var.lVal;
COleVariant LastCharLineNumber_Var =m_WordWriter.m_wdLastRange.get_Information(wdFirstCharacterLineNumber);
long LastCharLineNumber_Int=LastCharLineNumber_Var.lVal;
COleVariant LastCharColNumber_Var =m_WordWriter.m_wdLastRange.get_Information(wdFirstCharacterColumnNumber);
long LastCharColNumber_Int=LastCharColNumber_Var.lVal;
if(m_WordWriter.m_wdParagraph.get_IsStyleSeparator()==TRUE)
{
OutputStr0.Format(L"\r\n第%ld段,有样式分隔符",i);
}
else{
OutputStr0.Format(L"\r\n第%ld段,无样式分隔符",i);
}
OutputStr2+=OutputStr0;
CString OutputStr=L"";
const long wdSentence = 3;
COleVariant SentenceVar((long)wdSentence);
m_WordWriter.m_wdFirstRange.Expand(SentenceVar);
OutputStr.Format(L"\r\n此段开始于:第%ld页,第%ld\
行,第%ld个字符,\"%s\"。\r\n此段终止于:第%ld页,第%ld\
行,第%ld个字符,\"%s\"。",FirstCharPageNumber_Int,
FirstCharLineNumber_Int,FirstCharColNumber_Int,m_WordWriter.m_wdFirstRange.get_Text(),
LastCharPageNumber_Int,LastCharLineNumber_Int,
LastCharColNumber_Int,m_WordWriter.m_wdLastRange.get_Text());
OutputStr2+=OutputStr;
AllOutputStr+="\r\n\r\n";
AllOutputStr+=OutputStr2;
}
::PostMessage(m_pDialogProgress->m_hWnd,WM_USER_THREAD_UPDATE_PROGRESS,i,paragraphCount);
}
//CString AllOutputStr;
AllOutputStr+=L"------------------\r\n***************\r\n----------------\r\n";
CString pageLinesMismatch=L"";
m_WordWriter.GetPages();
long PageCount=m_WordWriter.m_wdPages.get_Count();
m_WordWriter.GetSelection();
try{
//m_WordWriter.m_wdSel=m_WordWriter.m_wdApp.get_Selection();
for( int i=1;i<PageCount;i++ )
{
if(m_pDialogProgress->m_ExitWorkThread==true)
{
::PostMessage(m_pDialogProgress->m_hWnd,WM_USER_THREAD_FINISHED,0,0);
m_WordWriter.CloseDocument2();
m_WordWriter.CloseApp();
CloseHandle(m_pDialogProgress->m_hEventModelDlgCreated);
::CoUninitialize();
m_Cedit_Output.SetWindowTextW(AllOutputStr);
return -1;
}
int linesCount=m_WordWriter.GetLineCountOfAPage(i);
if(linesCount!=22)
{
pageLinesMismatch.Format(L"第%ld页行数不正确%ld行,\r\n",i,linesCount);
AllOutputStr+=pageLinesMismatch;
}
::PostMessage(m_pDialogProgress->m_hWnd,WM_USER_THREAD_UPDATE_PROGRESS,i,PageCount);
}
}
catch (COleDispatchException* e)
{
unsigned short code=e->m_wCode;
//m_scError = -2146822347
CString str1;
str1.Format(L"%s ---%s---%x",e->m_strDescription,e->m_strSource,e->m_scError);
::AfxMessageBox(str1);
e->ReportError();
e->Delete();
m_WordWriter.m_wdWindows.ReleaseDispatch();
m_WordWriter.m_wdWindow0.ReleaseDispatch();
m_WordWriter.m_wdView0.ReleaseDispatch();
m_WordWriter.m_wdPanes.ReleaseDispatch();
m_WordWriter.m_wdPane.ReleaseDispatch();
m_WordWriter.m_wdPages.ReleaseDispatch();
m_WordWriter.m_wdPage.ReleaseDispatch();
m_WordWriter.m_wdLines.ReleaseDispatch();
m_WordWriter.m_wdRectangles.ReleaseDispatch();
m_WordWriter.m_wdRectangle.ReleaseDispatch();
m_WordWriter.m_wdTmpRange.ReleaseDispatch();
//m_Cedit_Output.SetWindowTextW(AllOutputStr);
::PostMessage(m_pDialogProgress->m_hWnd,WM_USER_THREAD_FINISHED,0,0);
::PostMessage(this->m_hWnd,WM_USER_THREAD_FINISHED,0,0);
m_WordWriter.CloseDocument2();
m_WordWriter.CloseApp();
CloseHandle(m_pDialogProgress->m_hEventModelDlgCreated);
::CoUninitialize();
return FALSE;
}
const long msogroup = 6;
const long msoTextBox = 17;
CTextFrame textFrame;
CShape Ashape,Ashape2;
CRange tmpRange1;
CFont0 tmpFont;
CShapes shapes=m_WordWriter.m_wdDoc.get_Shapes();
long shapesCount=shapes.get_Count();
CString ShapeOutputStr=L"";
for(long k=1;k<=shapesCount;k++)
{
COleVariant index((long)k);
CShape Ashape=shapes.Item(index);
if(Ashape.get_Type()==msogroup)
{
CGroupShapes groupShapes=Ashape.get_GroupItems();
long groupShapesCount=groupShapes.get_Count();
for(long j=1;j<=groupShapesCount;j++)
{
COleVariant groupindex((long)j);
Ashape2=groupShapes.Item(groupindex);
//if(Ashape2.get_Type()==msoTextBox)
//{
textFrame=Ashape2.get_TextFrame();
//textFrame.get_HasText();
if(textFrame.get_HasText())
{
tmpRange1=textFrame.get_TextRange();
tmpRange1.Select();
m_WordWriter.GetSelection();
tmpFont=m_WordWriter.m_wdSel.get_Font();
VerifyShapeText(ShapeOutputStr,tmpFont,tmpRange1);
}
//}
//Ashape2.get_TextFrame();
//CGroupShapes groupShapes2=Ashape2.get_GroupItems();
//long groupShapesCount2=groupShapes.get_Count();
}
}
else{
textFrame=Ashape.get_TextFrame();
if(textFrame.get_HasText())
{
tmpRange1=textFrame.get_TextRange();
tmpRange1.Select();
m_WordWriter.GetSelection();
tmpFont=m_WordWriter.m_wdSel.get_Font();
VerifyShapeText(ShapeOutputStr,tmpFont,tmpRange1);
}
}
::PostMessage(m_pDialogProgress->m_hWnd,WM_USER_THREAD_UPDATE_PROGRESS,k,shapesCount);
}
AllOutputStr+="\r\n>>>>>>>>>>>>>>\r\n--------------\r\n";
AllOutputStr+=ShapeOutputStr;
m_WordWriter.m_wdWindows.ReleaseDispatch();
m_WordWriter.m_wdWindow0.ReleaseDispatch();
m_WordWriter.m_wdView0.ReleaseDispatch();
m_WordWriter.m_wdPanes.ReleaseDispatch();
m_WordWriter.m_wdPane.ReleaseDispatch();
m_WordWriter.m_wdPages.ReleaseDispatch();
m_WordWriter.m_wdPage.ReleaseDispatch();
m_WordWriter.m_wdLines.ReleaseDispatch();
m_WordWriter.m_wdRectangles.ReleaseDispatch();
m_WordWriter.m_wdRectangle.ReleaseDispatch();
m_WordWriter.m_wdTmpRange.ReleaseDispatch();
m_Cedit_Output.SetWindowTextW(AllOutputStr);
}
::PostMessage(m_pDialogProgress->m_hWnd,WM_USER_THREAD_FINISHED,0,0);
::PostMessage(this->m_hWnd,WM_USER_THREAD_FINISHED,0,0);
m_WordWriter.CloseDocument2();
m_WordWriter.CloseApp();
CloseHandle(m_pDialogProgress->m_hEventModelDlgCreated);
::CoUninitialize();
return 0;
}
// CFormView_JSBVerify 消息处理程序
void CFormView_JSBVerify::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// TODO: 在此添加专用代码和/或调用基类
m_fileeditctrl.lpstrFilter=L"MicroSoft word 文档 (.doc or .docx) \0*.doc;*.docx\0\0";
}
void CFormView_JSBVerify::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
m_pDialogProgress->m_ExitWorkThread=false;
m_pDialogProgress->m_hThread = AfxBeginThread(MyThreadFunc,this,
THREAD_PRIORITY_NORMAL,0,0);
ASSERT(m_pDialogProgress->m_hThread);
}
int CFormView_JSBVerify::VerifyShapeText(CString& OutputStr3,CFont0& font,CRange& range)
{
CString OutputStr0=L"";
CString OutputStr2=L"";
CString FontName=font.get_Name();
bool MismatchFlag=false;//不匹配标志
if(FontName!=L"宋体")
{
OutputStr2=L"字体不匹配,";
MismatchFlag=true;
}
float FontSize=font.get_Size();
if(!(FontSize<14.000001 &&FontSize>13.999999))
{
OutputStr2+=L"字号不匹配,";
MismatchFlag=true;
}
long FontEmboss=font.get_Emboss();//阳文2
if(FontEmboss!=0)
{
OutputStr2+=L"阳文不匹配,";
MismatchFlag=true;
}
long FontEngrave=font.get_Engrave();//阴文3
if(FontEngrave!=0)
{
OutputStr2+=L"阴文不匹配,";
MismatchFlag=true;
}
long FontOutline=font.get_Outline();//镂空4
if(FontOutline!=0)
{
OutputStr2+=L"镂空不匹配,";
MismatchFlag=true;
}
long FontScaling=font.get_Scaling();//字符比例5
if(FontScaling!=100)
{
OutputStr2+=L"字符比例不匹配,";
MismatchFlag=true;
}
long FontShadow=font.get_Shadow();//阴影6
if(FontShadow!=0)
{
OutputStr2+=L"阴影不匹配,";
MismatchFlag=true;
}
long FontStrikeThrough=font.get_StrikeThrough();//删除线7
if(FontStrikeThrough!=0)
{
OutputStr2+=L"删除线不匹配,";
MismatchFlag=true;
}
long FontDoubleStrikeThrough=font.get_DoubleStrikeThrough();//双删除线8
if(FontDoubleStrikeThrough!=0)
{
OutputStr2+=L"双删除线不匹配,";
MismatchFlag=true;
}
long FontSubscript=font.get_Subscript();//下标9
if(FontSubscript!=0)
{
OutputStr2+=L"下标不匹配,";
MismatchFlag=true;
}
long FontSuperscript=font.get_Superscript();//上标10
if(FontSuperscript!=0)
{
OutputStr2+=L"上标不匹配,";
MismatchFlag=true;
}
long FontHidden=font.get_Hidden();//隐藏11
if(FontHidden!=0)
{
OutputStr2+=L"隐藏不匹配,";
MismatchFlag=true;
}
long FontColor=font.get_ColorIndex();//隐藏11
//TRACE("%ld----%ld",i,FontColor);
if(FontColor!=wdAuto&&FontColor!=wdBlack)
{
OutputStr2+=L"字体颜色不匹配,";
MismatchFlag=true;
}
long FontHiliteColor=range.get_HighlightColorIndex();//高亮
//TRACE("%ld----%ld",i,FontHiliteColor);
if(FontHiliteColor!=0)
{
OutputStr2+=L"高亮显示不匹配,";
MismatchFlag=true;
}
float FontSpacing=font.get_Spacing();//字间距
//TRACE("%ld----%f\n",i,FontSpacing);
if(FontSpacing!=0)
{
OutputStr2+=L"字间距不匹配,";
MismatchFlag=true;
}
long FontPosition=font.get_Position();//相对于基准线的文本位置(以磅为单位)。
//TRACE("%ld----%ld\n",i,FontPosition);
if(FontPosition!=0)
{
OutputStr2+=L"文本位置不匹配,";
MismatchFlag=true;
}
long FontDisableCharacterSpaceGrid=font.get_DisableCharacterSpaceGrid();//
//TRACE("%ld----%ld\n",i,FontPosition);
if(FontDisableCharacterSpaceGrid!=FALSE)
{
OutputStr2+=L"网格对齐不匹配,";
MismatchFlag=true;
}
long FontAnimation=font.get_Animation();//
//TRACE("%ld----%ld\n",i,FontPosition);
if(FontAnimation!=0)
{
OutputStr2+=L"动画不匹配,";
MismatchFlag=true;
}
float FontKerning=font.get_Kerning();//
//TRACE("%ld----%ld\n",i,FontPosition);
if(!(FontKerning>=0.999999&&FontKerning<=1.000001))
{
OutputStr2+=L"调整字间距不匹配,";
MismatchFlag=true;
}
if(range.get_Bold()!=0)
{
OutputStr2+=L"加粗不匹配,";
MismatchFlag=true;
}
if(range.get_Underline()!=0)
{
OutputStr2+=L"下划线不匹配,";
MismatchFlag=true;
}
if(range.get_Italic()!=0)
{
OutputStr2+=L"斜体不匹配,";
MismatchFlag=true;
}
if(range.get_EmphasisMark()!=0)
{
OutputStr2+=L"着重号不匹配,";
MismatchFlag=true;
}
//m_WordWriter.GetParagraphRangeBorders();
CBorders paragraphBorders=font.get_Borders();
if(paragraphBorders.get_Enable()!=0)
{
OutputStr2+=L"边框不匹配,";
MismatchFlag=true;
}
//m_WordWriter.GetParagraphFormat();
CParagraphFormat ParagraphFormat=range.get_ParagraphFormat();
float paragraphLineSpacing=ParagraphFormat.get_LineSpacing();
float paragraphSpaceAfter=ParagraphFormat.get_SpaceAfter();
float paragraphSpaceBefore=ParagraphFormat.get_SpaceBefore();
if(!(paragraphLineSpacing<18.0001&¶graphLineSpacing>17.9999))
{
OutputStr2+=L"段间距不匹配,";
MismatchFlag=true;
}
if(!(paragraphSpaceBefore<0.0001&¶graphSpaceBefore>-0.0001))
{
OutputStr2+=L"段前间距不匹配,";
MismatchFlag=true;
}
if(!(paragraphSpaceAfter<0.0001&¶graphSpaceAfter>-0.0001))
{
OutputStr2+=L"段后间距不匹配,";
MismatchFlag=true;
}
//TRACE("%d----%f----%f---\n",i,paragraphSpaceAfter,paragraphSpaceBefore);
if(MismatchFlag==true)
{
//m_WordWriter.GetParagraphFirstCharRange();
CCharacters Chars=range.get_Characters();
CRange FirstRange=Chars.get_First();
COleVariant FirstCharPageNumber_Var =FirstRange.get_Information(wdActiveEndPageNumber);
long FirstCharPageNumber_Int=FirstCharPageNumber_Var.lVal;
COleVariant FirstCharLineNumber_Var =FirstRange.get_Information(wdFirstCharacterLineNumber);
long FirstCharLineNumber_Int=FirstCharLineNumber_Var.lVal;
COleVariant FirstCharColNumber_Var =FirstRange.get_Information(wdFirstCharacterColumnNumber);
long FirstCharColNumber_Int=FirstCharColNumber_Var.lVal;
//m_WordWriter.GetParagraphLastCharRange();
//m_wdChars=m_wdRange.get_Characters();
CRange LastRange=Chars.get_Last();
COleVariant LastCharPageNumber_Var =LastRange.get_Information(wdActiveEndPageNumber);
long LastCharPageNumber_Int=LastCharPageNumber_Var.lVal;
COleVariant LastCharLineNumber_Var =LastRange.get_Information(wdFirstCharacterLineNumber);
long LastCharLineNumber_Int=LastCharLineNumber_Var.lVal;
COleVariant LastCharColNumber_Var =LastRange.get_Information(wdFirstCharacterColumnNumber);
long LastCharColNumber_Int=LastCharColNumber_Var.lVal;
/*if(paragraph.get_IsStyleSeparator()==TRUE)
{
OutputStr0.Format(L"\r\n第%ld段,有样式分隔符",i);
}
else{
OutputStr0.Format(L"\r\n第%ld段,无样式分隔符",i);
}*/
//OutputStr2+=OutputStr0;
CString OutputStr=L"";
const long wdSentence = 3;
COleVariant SentenceVar((long)wdSentence);
FirstRange.Expand(SentenceVar);
OutputStr.Format(L"\r\n此图形开始于:第%ld页,第%ld\
行,第%ld个字符,\"%s\"。\r\n此段终止于:第%ld页",FirstCharPageNumber_Int,
FirstCharLineNumber_Int,FirstCharColNumber_Int,range.get_Text(),
LastCharPageNumber_Int);
OutputStr2+=OutputStr;
OutputStr3+="\r\n\r\n";
OutputStr3+=OutputStr2;
return 0;
}
else{
return 1;//代表无错
}
}
LRESULT CFormView_JSBVerify::OnThreadFinished(WPARAM wParam,LPARAM lParam)
{
//SendMessage(WM_CLOSE);
::AfxMessageBox(L"技术标格式验证已经完成!");//,MB_APPLMODAL
return 0;
}
需要注意的是,如果word文档内容中有隐藏的格式符号,当显示时,本程序不能将其检测出来,具体要大家仔细优化。本人只是抛砖引玉。