📄 wzjoffice.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 + -