⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wzjoffice.cpp

📁 mfc操作word文档 创建 存盘 设置字体(颜色 大小 字体类型) 添加表格 添加图片 设置行间距等
💻 CPP
字号:
#include "stdafx.h"
#include "WzjOffice.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

CWzjOffice::CWzjOffice()
{

}

CWzjOffice::~CWzjOffice()
{

}

//===================================CWzjWordOffice================================
CWzjWordOffice::CWzjWordOffice()
{

}

CWzjWordOffice::~CWzjWordOffice()
{
}
BOOL CWzjWordOffice::CreateApp()
{
   if (FALSE == m_wdApp.CreateDispatch("Word.Application"))
   {
       AfxMessageBox("Application创建失败!", MB_OK|MB_ICONWARNING);
       return FALSE;
   }
//    m_wdApp.SetVisible(TRUE);
   return TRUE;
}
BOOL CWzjWordOffice::CreateDocumtent()
{    
   if (!m_wdApp.m_lpDispatch) 
   {
       AfxMessageBox("Application为空,Documents创建失败!", MB_OK|MB_ICONWARNING);
       return FALSE;
   }
   m_wdDocs.AttachDispatch(m_wdApp.GetDocuments());
   if (!m_wdDocs.m_lpDispatch) 
   {
       AfxMessageBox("Documents创建失败!", MB_OK|MB_ICONWARNING);
       return FALSE;
   }
   COleVariant varTrue(short(1),VT_BOOL);
   /*VARIANT vtTtemplate, vtNewTemplate, vtDocType, vtVisible;
   vtTtemplate.vt = VT_BSTR;
   _bstr_t bstr = "";
   vtTtemplate.bstrVal = bstr;
   vtNewTemplate.vt = VT_BOOL;
   vtNewTemplate.boolVal  = FALSE;
   vtDocType.vt = VT_I4;
   vtDocType.intVal =0;
   vtVisible.vt = VT_BOOL;
   vtVisible.boolVal  = TRUE;
   pDocs->Add(&vtTtemplate,&vtNewTemplate,&vtDocType,&vtVisible);*/

   CComVariant Template(_T(""));    //为了简单,没有使用WORD的文档模板
   CComVariant NewTemplate(false),DocumentType(0),Visible;
   m_wdDocs.Add(&Template,&NewTemplate,&DocumentType,&Visible);    

   //得到document和selection变量
   m_wdDoc = m_wdApp.GetActiveDocument();
   if (!m_wdDoc.m_lpDispatch) 
   {
       AfxMessageBox("Document获取失败!", MB_OK|MB_ICONWARNING);
       return FALSE;
   }
   m_wdSel = m_wdApp.GetSelection();
   if (!m_wdSel.m_lpDispatch) 
   {
       AfxMessageBox("Select获取失败!", MB_OK|MB_ICONWARNING);
       return FALSE;
   }    
   return TRUE;
}

BOOL CWzjWordOffice::Create()
{
   if (FALSE == CreateApp()) 
   {
       return FALSE;
   }
   return CreateDocumtent();
}

void CWzjWordOffice::ShowApp()
{
   m_wdApp.SetVisible(TRUE);
}
void CWzjWordOffice::WriteText(CString szText)
{
   m_wdSel.TypeText(szText);
}
void CWzjWordOffice::WriteNewLineText(CString szText, int nLineCount /* = 1 */)
{
   int i;
   if (nLineCount <= 0)
   {
       nLineCount = 0;
   }
   for (i = 0; i < nLineCount; i++)
   {
       m_wdSel.TypeParagraph();
   }
}

void CWzjWordOffice::SetFont(CString szFontName /*= "宋体"*/,float fSize, long lFontColor /*= 0*/,long lBackColor /*= 0*/)
{
   if (!m_wdSel.m_lpDispatch) 
   {
       AfxMessageBox("Select为空,字体设置失败!", MB_OK|MB_ICONWARNING);
       return;
   }
   m_wdSel.SetText("F");
   m_wdFt = m_wdSel.GetFont();
   m_wdFt.SetSize(fSize);
   m_wdFt.SetName(szFontName);
   m_wdFt.SetColor(lFontColor);
   m_wdSel.SetFont(m_wdFt);
   Range r = m_wdSel.GetRange();
   r.SetHighlightColorIndex(lBackColor);
}

void CWzjWordOffice::SetFont(BOOL bBold, BOOL bItalic /* = FALSE */, BOOL bUnderLine /* = FALSE */)
{
   if (!m_wdSel.m_lpDispatch) 
   {
       AfxMessageBox("Select为空,字体设置失败!", MB_OK|MB_ICONWARNING);
       return;
   }
   m_wdSel.SetText("F");
   m_wdFt = m_wdSel.GetFont();
   m_wdFt.SetBold(bBold);
   m_wdFt.SetItalic(bItalic);
   m_wdFt.SetUnderline(bUnderLine);
   m_wdSel.SetFont(m_wdFt);
}

void CWzjWordOffice::SetTableFont(int nRow, int nColumn, CString szFontName, float fSize, long lFontColor, long lBackColor)
{
   Cell c = m_wdTb.Cell(nRow, nColumn);
   c.Select();
   _Font ft = m_wdSel.GetFont();
   ft.SetName(szFontName);
   ft.SetSize(fSize);
   ft.SetColor(lFontColor);
   m_wdSel.SetFont(ft);
   Range r = m_wdSel.GetRange();
   r.SetHighlightColorIndex(lBackColor);
}
void CWzjWordOffice::SetTableFont(int nRow, int nColumn, BOOL bBold, BOOL bItalic /* = FALSE */, BOOL bUnderLine /* = FALSE */)
{
   Cell c = m_wdTb.Cell(nRow, nColumn);
   c.Select();
   _Font ft = m_wdSel.GetFont();
   ft.SetBold(bBold);
   ft.SetItalic(bItalic);
   ft.SetUnderline(bUnderLine);
   m_wdSel.SetFont(ft);
}
void CWzjWordOffice::SetParaphformat(int nAlignment)
{
   _ParagraphFormat p = m_wdSel.GetParagraphFormat();
   p.SetAlignment(nAlignment);
   m_wdSel.SetParagraphFormat(p);
}

void CWzjWordOffice::CreateTable(int nRow, int nColumn)
{
   m_wdDoc = m_wdApp.GetActiveDocument();
   Tables tbs = m_wdDoc.GetTables();
   VARIANT vtDefault, vtAuto;
   vtDefault.vt = VT_I4;
   vtAuto.vt = VT_I4;
   vtDefault.intVal = 1;
   vtAuto.intVal = 0;
   tbs.Add(m_wdSel.GetRange(), nRow, nColumn, &vtDefault, &vtAuto);    
   m_wdTb = tbs.Item(1);
   
   VARIANT vtstyle;
   vtstyle.vt = VT_BSTR;
   _bstr_t bstr = "网格型";
   vtstyle.bstrVal = bstr;
   if (m_wdTb.GetStyle().bstrVal == vtstyle.bstrVal)
   {
       m_wdTb.SetStyle(&vtstyle);
       m_wdTb.SetApplyStyleFirstColumn(TRUE);
       m_wdTb.SetApplyStyleHeadingRows(TRUE);
       m_wdTb.SetApplyStyleLastColumn(TRUE);
       m_wdTb.SetApplyStyleLastRow(TRUE);        
   }
}

void CWzjWordOffice::WriteCellText(int nRow, int nColumne, CString szText)
{
   Cell c = m_wdTb.Cell(nRow, nColumne);
   c.Select();
   m_wdSel.TypeText(szText);
}

void CWzjWordOffice::SaveAs(CString WordName)
{
	m_wdDoc=m_wdApp.GetActiveDocument();		//得到ActiveDocument
	CComVariant FileName(_T(WordName));	//文件名
	CComVariant FileFormat(0);					//重点,看下面的说明
	CComVariant LockComments(false),Password(_T(""));
	CComVariant AddToRecentFiles(true),WritePassword(_T(""));
	CComVariant ReadOnlyRecommended(false),EmbedTrueTypeFonts(false);
	CComVariant SaveNativePictureFormat(false),SaveFormsData(false);
	CComVariant SaveAsAOCELetter(false);
	CComVariant InsertLineBreaks(true),LineEnding(0);
	CComVariant AllowSubstitutions(true),AddBiDiMarks(true);
	CComVariant Encoding(51936);

/*************** FileFormat 文件格式说明 ****************************
参数FileFormat,在WORD的宏中,使用的是 wdFormatDocument,这是什么那?
其实这是WORD宏中所使用的常量,由匈牙利命名可以知道wd其实是DWORD的意思
知道了是一个正数,那么它到底是多少那?其实有一个办法可以知道,那就是在
WORD宏程序中,加一条语句:MsgBox wdFormatDocument 这样你再运行宏程序,
就能看到这个常量是多少了。呵呵,这个常量是0,我够聪明吧^_^
*********************************************************************/

	m_wdDoc.SaveAs(&FileName,&FileFormat,&LockComments,&Password,
		&AddToRecentFiles,&WritePassword,&ReadOnlyRecommended,
		&EmbedTrueTypeFonts,&SaveNativePictureFormat,&SaveFormsData,
		&SaveAsAOCELetter,&Encoding,&InsertLineBreaks,&AllowSubstitutions,&LineEnding,&AddBiDiMarks);
}

void CWzjWordOffice::Close()
{
	m_wdSel.ReleaseDispatch();		//Selection 不用了,一定要释放
	m_wdDocs.ReleaseDispatch();		//Documents 也不用了

	CComVariant SaveChanges(false),OriginalFormat,RouteDocument;
	m_wdApp.Quit(&SaveChanges,&OriginalFormat,&RouteDocument);
	m_wdApp.ReleaseDispatch();
}

void CWzjWordOffice::SetTitle(int nStyle)
{
	COleVariant   vUnit((long)5); 
	COleVariant   vCount((long)2); 
	COleVariant   vExtend((long)2);
    COleVariant   vStyle1((long)nStyle);//   -2为一级标题,...,-10为九级标题  
	_ParagraphFormat pf = m_wdSel.GetParagraphFormat() ;
	pf.SetStyle(&vStyle1);
}

void CWzjWordOffice::SetLineSpace(int nDistance)
{
	m_wdSel.WholeStory();
	_ParagraphFormat pf=m_wdSel.GetParagraphFormat();
	pf.SetLineSpacingRule(nDistance);
	CComVariant Unit(1),Count(0),Extend(_T(""));
	m_wdSel.MoveRight(&Unit,&Count,&Extend);
}
void CWzjWordOffice::AddPic(CString FileName)
{
COleVariant vTrue((short)TRUE),    
                vFalse((short)FALSE),
                vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    m_wdInlineShapes=m_wdSel.GetInlineShapes();
    m_wdInlineShape=m_wdInlineShapes.AddPicture(FileName,vFalse,vTrue,vOptional);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -