www.pudn.com > testWordAll.rar > testWordAllDlg.cpp


// testWordAllDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "testWordAll.h" 
#include "testWordAllDlg.h" 
#include "DlgProxy.h" 
#include "WordDocOperateBasic.h"	 
#include 	//Com,和word有关 
 
#include "WordDocOperate_Inform.h" 
 
#include "Form1.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CAboutDlg dialog used for App About 
 
class CAboutDlg : public CDialog 
{ 
public: 
	CAboutDlg(); 
 
// Dialog Data 
	//{{AFX_DATA(CAboutDlg) 
	enum { IDD = IDD_ABOUTBOX }; 
	//}}AFX_DATA 
 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CAboutDlg) 
	protected: 
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support 
	//}}AFX_VIRTUAL 
 
// Implementation 
protected: 
	//{{AFX_MSG(CAboutDlg) 
	//}}AFX_MSG 
	DECLARE_MESSAGE_MAP() 
}; 
 
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) 
{ 
	//{{AFX_DATA_INIT(CAboutDlg) 
	//}}AFX_DATA_INIT 
} 
 
void CAboutDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CAboutDlg) 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) 
	//{{AFX_MSG_MAP(CAboutDlg) 
		// No message handlers 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CTestWordAllDlg dialog 
 
IMPLEMENT_DYNAMIC(CTestWordAllDlg, CDialog); 
 
CTestWordAllDlg::CTestWordAllDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CTestWordAllDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CTestWordAllDlg) 
		// NOTE: the ClassWizard will add member initialization here 
	//}}AFX_DATA_INIT 
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
	m_pAutoProxy = NULL; 
} 
 
CTestWordAllDlg::~CTestWordAllDlg() 
{ 
	// If there is an automation proxy for this dialog, set 
	//  its back pointer to this dialog to NULL, so it knows 
	//  the dialog has been deleted. 
	if (m_pAutoProxy != NULL) 
		m_pAutoProxy->m_pDialog = NULL; 
} 
 
void CTestWordAllDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CTestWordAllDlg) 
		// NOTE: the ClassWizard will add DDX and DDV calls here 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CTestWordAllDlg, CDialog) 
	//{{AFX_MSG_MAP(CTestWordAllDlg) 
	ON_WM_SYSCOMMAND() 
	ON_WM_PAINT() 
	ON_WM_QUERYDRAGICON() 
	ON_WM_CLOSE() 
	ON_BN_CLICKED(IDC_BUTTON_STRUCT, OnButtonStruct) 
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1) 
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2) 
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3) 
	ON_COMMAND(IDR_MENU1, OnMenu1) 
	ON_BN_CLICKED(IDC_BUTTON4, OnButton4) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CTestWordAllDlg message handlers 
 
BOOL CTestWordAllDlg::OnInitDialog() 
{ 
	CDialog::OnInitDialog(); 
 
	// Add "About..." menu item to system menu. 
 
	// IDM_ABOUTBOX must be in the system command range. 
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 
	ASSERT(IDM_ABOUTBOX < 0xF000); 
 
	CMenu* pSysMenu = GetSystemMenu(FALSE); 
	if (pSysMenu != NULL) 
	{ 
		CString strAboutMenu; 
		strAboutMenu.LoadString(IDS_ABOUTBOX); 
		if (!strAboutMenu.IsEmpty()) 
		{ 
			pSysMenu->AppendMenu(MF_SEPARATOR); 
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 
		} 
	} 
 
	// Set the icon for this dialog.  The framework does this automatically 
	//  when the application's main window is not a dialog 
	SetIcon(m_hIcon, TRUE);			// Set big icon 
	SetIcon(m_hIcon, FALSE);		// Set small icon 
	 
	// TODO: Add extra initialization here 
	 
	return TRUE;  // return TRUE  unless you set the focus to a control 
} 
 
void CTestWordAllDlg::OnSysCommand(UINT nID, LPARAM lParam) 
{ 
	if ((nID & 0xFFF0) == IDM_ABOUTBOX) 
	{ 
		CAboutDlg dlgAbout; 
		dlgAbout.DoModal(); 
	} 
	else 
	{ 
		CDialog::OnSysCommand(nID, lParam); 
	} 
} 
 
// If you add a minimize button to your dialog, you will need the code below 
//  to draw the icon.  For MFC applications using the document/view model, 
//  this is automatically done for you by the framework. 
 
void CTestWordAllDlg::OnPaint()  
{ 
	if (IsIconic()) 
	{ 
		CPaintDC dc(this); // device context for painting 
 
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); 
 
		// Center icon in client rectangle 
		int cxIcon = GetSystemMetrics(SM_CXICON); 
		int cyIcon = GetSystemMetrics(SM_CYICON); 
		CRect rect; 
		GetClientRect(&rect); 
		int x = (rect.Width() - cxIcon + 1) / 2; 
		int y = (rect.Height() - cyIcon + 1) / 2; 
 
		// Draw the icon 
		dc.DrawIcon(x, y, m_hIcon); 
	} 
	else 
	{ 
		CDialog::OnPaint(); 
	} 
} 
 
// The system calls this to obtain the cursor to display while the user drags 
//  the minimized window. 
HCURSOR CTestWordAllDlg::OnQueryDragIcon() 
{ 
	return (HCURSOR) m_hIcon; 
} 
 
// Automation servers should not exit when a user closes the UI 
//  if a controller still holds on to one of its objects.  These 
//  message handlers make sure that if the proxy is still in use, 
//  then the UI is hidden but the dialog remains around if it 
//  is dismissed. 
 
void CTestWordAllDlg::OnClose()  
{ 
	if (CanExit()) 
		CDialog::OnClose(); 
} 
 
void CTestWordAllDlg::OnOK()  
{ 
	 
	BeginWaitCursor(); 
 
	//下面是定义VARIANT变量; 
	CString strCurPath; 
 
	CString strDocName; 
 
	::GetCurrentDirectory(MAX_PATH,strCurPath.GetBuffer(MAX_PATH));  
 
	strCurPath.ReleaseBuffer(); 
 
	strCurPath.Format("%s",strCurPath); 
	 
	strDocName = strCurPath + "\\wordTable.doc"; 
 
	//COleVariant vTrue((short)TRUE), vFalse((short)FALSE),vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR); 
	COleVariant varFilePath(strDocName); 
	COleVariant varstrNull(""); 
	COleVariant varZero((short)0); 
	COleVariant varTrue(short(1),VT_BOOL); 
	COleVariant varFalse(short(0),VT_BOOL); 
	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); 
 
	_Application m_App;//定义Word提供的应用程序对象; 
 
	Documents m_Docs;//定义Word提供的文档对象; 
 
	Selection m_Sel;//定义Word提供的选择对象; 
 
	m_Docs.ReleaseDispatch(); 
	m_Sel.ReleaseDispatch(); 
	m_App.m_bAutoRelease=true; 
	if(!m_App.CreateDispatch("Word.Application")) 
	{  
		AfxMessageBox("创建Word2003服务失败!");  
		exit(1);  
	} 
 
	m_App.SetVisible(TRUE);		//显示Word,如果,FALSE,表示隐藏 
	//m_App.SetVisible(FALSE);		//显示Word,如果,FALSE,表示隐藏 
 
	m_Docs.AttachDispatch(m_App.GetDocuments());//将Documents类对象m_Docs和Idispatch接口关联起来; 
	 
	CString m_WordVer = "Word2003"; 
 
	if (m_WordVer == "Word2003"){ 
		//office2000 
		m_Docs.Open(varFilePath,varFalse,varFalse,varFalse, 
					varstrNull,varstrNull,varFalse,varstrNull, 
					varstrNull,varTrue,varTrue,varTrue); 
	 
	}else{ 
		//office2003 
		m_Docs.Open( //可看成VB语句set testDoc =  Word.documents.Open(…) 
                                COleVariant(strDocName,VT_BSTR), 
                                varFalse,    // Confirm Conversion. 
                                varFalse,    // ReadOnly. 
                                varFalse,    // AddToRecentFiles. 
                                covOptional, // PasswordDocument. 
                                covOptional, // PasswordTemplate. 
                                varTrue,    // Revert. 
                                covOptional, // WritePasswordDocument. 
                                covOptional, // WritePasswordTemplate. 
                                covOptional, // Format. // Last argument for Word 97 
                                   covOptional, // Encoding // New for Word 2000/2002 
                                   varTrue,     // Visible 
                                   covOptional, // OpenConflictDocument 
                                   covOptional, // OpenAndRepair 
                                   varZero,     // DocumentDirection wdDocumentDirection LeftToRight 
                                   covOptional  // NoEncodingDialog 
                                   ); 
 
	} 
 
 
	//save word file 
	_Document oActiveDoc;  
	oActiveDoc = m_App.GetActiveDocument();  
 
	// 
	m_Sel.AttachDispatch(m_App.GetSelection());//将Selection类对象m_Sel和Idispatch接口关联起来; 
 
	m_Sel.MoveDown(COleVariant((short)4),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.MoveDown(COleVariant((short)5),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("123456789"); 
	m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("李明"); 
	m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("25"); 
	m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("技术员"); 
	m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("本科"); 
	m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("上海市虹口区民主路315号"); 
 
	m_Sel.MoveDown(COleVariant((short)5),COleVariant((short)1),COleVariant((short)0)); 
 
	///////////////////////////////////////////////////////////////////////////////// 
	 
	 
	/////////////插入图片////////////////////////// 
	CString strPicFile = strCurPath + "\\tp1.jpg"; 
 
	//浮动方式显示图片 
	//Shapes shapes1 = m_Sel.GetInlineShapes(); 
	//shapes1.AddPicture((LPCTSTR)lpstrPicFile, &vtFalse,&vtTrue, &vtOpn); 
 
	//嵌入方式显示图片 
	InlineShapes inlineshapes; 
	LPDISPATCH pInlineShapes = m_Sel.GetInlineShapes(); 
	inlineshapes.AttachDispatch(pInlineShapes); 
	CComVariant vtTrue(true), vtFalse(false), vtZero(0l), vtNone, vtNullString(""); 
	CComVariant vtOpn(DISP_E_PARAMNOTFOUND, VT_ERROR); 
	inlineshapes.AddPicture(strPicFile, &vtFalse, &vtTrue, &vtOpn); 
	inlineshapes.ReleaseDispatch(); 
	/////////////////////////////////////////////// 
	Tables m_tables = oActiveDoc.GetTables(); 
	Table m_table1 = m_tables.Item(2);	//第一个表格 
	Rows   rows   =   m_table1.GetRows();    
	 
	//第1行 
	Row   row = rows.Item(1);		 
	Cells cells = row.GetCells();    
	Cell cell = cells.Item(2);   //第2列 
	Range r = cell.GetRange();    
	r.SetText("冬天"); 
	 
	//动态加行 
	//rows.Add(covOptional); 
	 
	oActiveDoc.PrintPreview();		//预览,前提是m_App.SetVisible(TRUE); 
 
		return; 
 
	/////////////////////////////////////// 
	 
	//save doc  
	//word 2000 
	/* 
	oActiveDoc.SaveAs(COleVariant("c:\\填写后表格.doc"),  
	COleVariant((short)0),  
	vFalse, COleVariant(""), vTrue, COleVariant(""),  
	vFalse, vFalse, vFalse, vFalse, vFalse); 
	*/ 
 
 
	//save doc 
	//word 2003 
	/* 
	oActiveDoc.SaveAs(COleVariant("c:\\填写后表格.doc"),  
	COleVariant((short)0),  
	vFalse, COleVariant(""), vTrue, COleVariant(""),  
	vFalse, vFalse, vFalse, vFalse, vFalse, 
	vFalse,vFalse,vFalse,vTrue,vTrue); 
	*/ 
 
	 
	m_Docs.ReleaseDispatch();//断开关联; 
	m_Sel.ReleaseDispatch(); 
 
	//退出WORD 
	m_App.Quit(covOptional, covOptional, covOptional);  
	m_App.Quit(covOptional, covOptional, covOptional); 
	m_App.ReleaseDispatch(); 
 
	EndWaitCursor(); 
 
	MessageBox("word表格填写完毕!","提示",MB_ICONEXCLAMATION); 
 
} 
 
void CTestWordAllDlg::OnCancel()  
{ 
	if (CanExit()) 
		CDialog::OnCancel(); 
} 
 
BOOL CTestWordAllDlg::CanExit() 
{ 
	// If the proxy object is still around, then the automation 
	//  controller is still holding on to this application.  Leave 
	//  the dialog around, but hide its UI. 
	if (m_pAutoProxy != NULL) 
	{ 
		ShowWindow(SW_HIDE); 
		return FALSE; 
	} 
 
	return TRUE; 
} 
 
//通过结构得到内容 
void CTestWordAllDlg::OnButtonStruct()  
{ 
	CWordDocOperateBasic wordOperate; 
 
	wordOperate.m_wordStruct.WordVer="Word2000"; 
 
	// 
	CString strWordVer = wordOperate.GetWordVer(); 
 
	AfxMessageBox(strWordVer); 
 
} 
 
void CTestWordAllDlg::OnButton1()  
{ 
	BeginWaitCursor(); 
 
	//下面是定义VARIANT变量; 
	CString strCurPath; 
 
	CString strDocName; 
 
	::GetCurrentDirectory(MAX_PATH,strCurPath.GetBuffer(MAX_PATH));  
 
	strCurPath.ReleaseBuffer(); 
 
	strCurPath.Format("%s",strCurPath); 
	 
	strDocName = strCurPath + "\\wordTable1.doc"; 
 
	//COleVariant vTrue((short)TRUE), vFalse((short)FALSE),vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR); 
	COleVariant varFilePath(strDocName); 
	COleVariant varstrNull(""); 
	COleVariant varZero((short)0); 
	COleVariant varTrue(short(1),VT_BOOL); 
	COleVariant varFalse(short(0),VT_BOOL); 
	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); 
 
	_Application m_App;//定义Word提供的应用程序对象; 
 
	Documents m_Docs;//定义Word提供的文档对象; 
 
	Selection m_Sel;//定义Word提供的选择对象; 
 
	m_Docs.ReleaseDispatch(); 
	m_Sel.ReleaseDispatch(); 
	m_App.m_bAutoRelease=true; 
	if(!m_App.CreateDispatch("Word.Application")) 
	{  
		AfxMessageBox("创建Word2003服务失败!");  
		exit(1);  
	} 
 
	m_App.SetVisible(TRUE);		//显示Word,如果,FALSE,表示隐藏 
	//m_App.SetVisible(FALSE);		//显示Word,如果,FALSE,表示隐藏 
 
	m_Docs.AttachDispatch(m_App.GetDocuments());//将Documents类对象m_Docs和Idispatch接口关联起来; 
	 
	CString m_WordVer = "Word2003"; 
 
	if (m_WordVer == "Word2003"){ 
		//office2000 
		m_Docs.Open(varFilePath,varFalse,varFalse,varFalse, 
					varstrNull,varstrNull,varFalse,varstrNull, 
					varstrNull,varTrue,varTrue,varTrue); 
	 
	}else{ 
		//office2003 
		m_Docs.Open( //可看成VB语句set testDoc =  Word.documents.Open(…) 
                                COleVariant(strDocName,VT_BSTR), 
                                varFalse,    // Confirm Conversion. 
                                varFalse,    // ReadOnly. 
                                varFalse,    // AddToRecentFiles. 
                                covOptional, // PasswordDocument. 
                                covOptional, // PasswordTemplate. 
                                varTrue,    // Revert. 
                                covOptional, // WritePasswordDocument. 
                                covOptional, // WritePasswordTemplate. 
                                covOptional, // Format. // Last argument for Word 97 
                                   covOptional, // Encoding // New for Word 2000/2002 
                                   varTrue,     // Visible 
                                   covOptional, // OpenConflictDocument 
                                   covOptional, // OpenAndRepair 
                                   varZero,     // DocumentDirection wdDocumentDirection LeftToRight 
                                   covOptional  // NoEncodingDialog 
                                   ); 
 
	} 
 
	//打开Word文档;  
	m_Sel.AttachDispatch(m_App.GetSelection());//将Selection类对象m_Sel和Idispatch接口关联起来; 
	 
	/* 
	m_Sel.MoveDown(COleVariant((short)4),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.MoveDown(COleVariant((short)5),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("123456789"); 
	m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("李明"); 
	m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("25"); 
	m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("技术员"); 
	m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("本科"); 
	m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("上海市虹口区民主路315号"); 
 
	m_Sel.MoveDown(COleVariant((short)5),COleVariant((short)1),COleVariant((short)0)); 
	*/ 
 
	//save word file 
	_Document oActiveDoc;  
	oActiveDoc = m_App.GetActiveDocument();  
 
	//////////////////////////////////// 
	//word书签使用 
	CString strBMark = "kdsj"; 
	COleVariant varBMark_kdsj(strBMark);		//设置变量 
	Range rBMark = oActiveDoc.GoTo(varTrue,varZero,varZero,varBMark_kdsj); 
	//Range rBMark;rBMark 
	rBMark.SetText("2006-09-18");		//日期 
 
	//表格的正常用法(非标准表格) 
	Tables m_tables = oActiveDoc.GetTables(); 
	Table m_table1 = m_tables.Item(1);	//第一个表格 
	Rows   rows   =   m_table1.GetRows();    
 
	//第1行 
	Row   row = rows.Item(1);		 
	Cells cells = row.GetCells();    
	Cell cell = cells.Item(2);   //第2列 
	Range r = cell.GetRange();    
	r.SetText("冬天"); 
 
	cell = cells.Item(4);   //第4列 
	r = cell.GetRange(); 
	r.SetText("沈阳市大东区"); 
 
	//第2行 
	row = rows.Item(2);		 
	cells = row.GetCells();    
	cell = cells.Item(2);   //第2列 
	r = cell.GetRange();    
	r.SetText("辽A12345"); 
 
	cell = cells.Item(4);   //第4列 
	r = cell.GetRange(); 
	r.SetText("大型车"); 
 
	//第10行第2列,插入图片: 
	row = rows.Item(10);		 
	cells = row.GetCells();    
	cell = cells.Item(2);   //第2列 
	r = cell.GetRange(); 
	 
	 
	/////////////////////////////////// 
 
	/////////////插入图片////////////////////////// 
	CString strPicFile = strCurPath + "\\tp1.jpg"; 
 
	//浮动方式显示图片 
	//Shapes shapes1 = m_Sel.GetInlineShapes(); 
	//shapes1.AddPicture((LPCTSTR)lpstrPicFile, &vtFalse,&vtTrue, &vtOpn); 
 
	//嵌入方式显示图片 
	InlineShapes inlineshapes; 
	LPDISPATCH pInlineShapes = r.GetInlineShapes(); 
	inlineshapes.AttachDispatch(pInlineShapes); 
	CComVariant vtTrue(true), vtFalse(false), vtZero(0l), vtNone, vtNullString(""); 
	CComVariant vtOpn(DISP_E_PARAMNOTFOUND, VT_ERROR); 
	inlineshapes.AddPicture(strPicFile, &vtFalse, &vtTrue, &vtOpn); 
	inlineshapes.ReleaseDispatch(); 
	/////////////////////////////////////////////// 
 
	/* 
	//复制所有内容 
	m_Sel.WholeStory(); 
    m_Sel.Copy(); 
    m_Sel.PasteAndFormat(0); 
    m_Sel.PasteAndFormat(0); 
	// 
	*/ 
 
 
	oActiveDoc.PrintPreview();		//预览,前提是m_App.SetVisible(TRUE); 
 
	return; 
	 
	//save doc  
	//word 2000 
	/* 
	oActiveDoc.SaveAs(COleVariant("c:\\填写后表格.doc"),  
	COleVariant((short)0),  
	vFalse, COleVariant(""), vTrue, COleVariant(""),  
	vFalse, vFalse, vFalse, vFalse, vFalse); 
	*/ 
 
 
	//save doc 
	//word 2003 
	/* 
	oActiveDoc.SaveAs(COleVariant("c:\\填写后表格.doc"),  
	COleVariant((short)0),  
	vFalse, COleVariant(""), vTrue, COleVariant(""),  
	vFalse, vFalse, vFalse, vFalse, vFalse, 
	vFalse,vFalse,vFalse,vTrue,vTrue); 
	*/ 
 
	 
	m_Docs.ReleaseDispatch();//断开关联; 
	m_Sel.ReleaseDispatch(); 
 
	//退出WORD 
	m_App.Quit(covOptional, covOptional, covOptional);  
	m_App.Quit(covOptional, covOptional, covOptional); 
	m_App.ReleaseDispatch(); 
 
	EndWaitCursor(); 
 
	MessageBox("word表格填写完毕!","提示",MB_ICONEXCLAMATION); 
	 
} 
 
void CTestWordAllDlg::OnButton2()  
{ 
	CWordDocOperate_Inform wordInform; 
	wordInform.m_wordStruct.WordVer = "Word2003"; 
	AfxMessageBox(wordInform.m_wordStruct.WordVer); 
 
} 
 
//测试告知单 
void CTestWordAllDlg::OnButton3()  
{ 
	//////// 
	CString strCurPath; 
 
	CString strDocName; 
 
	CString strTempName; 
 
	::GetCurrentDirectory(MAX_PATH,strCurPath.GetBuffer(MAX_PATH));  
 
	strCurPath.ReleaseBuffer(); 
 
	strCurPath.Format("%s",strCurPath); 
	 
	strDocName = strCurPath + "\\wordModel\\wordInform.doc"; 
 
	//比如,取当前时间再加名:wordInform20060919090909(用常用函数类) 
	//以后在pprocess里就这么写,以免文件名重复; 
	//如果放到pprocess里,在pprocess的ini里有word临时目录,从该处取目录 
	strTempName = strCurPath + "\\tempPic\\wordInform20060919090909.doc"; 
 
	CString strPicName = strCurPath + "\\tp1.JPG"; 
 
	//Word操作 
	CWordDocOperate_Inform wordInform; 
	wordInform.m_wordStruct.WordVer = "Word2003"; 
	//预览0或打印1 
	wordInform.m_wordStruct.PreviewOrPrint = 0; 
	wordInform.m_wordStruct.PrintNum = 1; 
	wordInform.m_wordStruct.PrintPageSize = "A4"; 
 
	wordInform.m_wordStruct.m_WordModelName = strDocName;	//模版 
	wordInform.m_wordStruct.m_tempWordDoc = strTempName;	//临时:今后放到pprocess程序配置文件里指定的目录 
	wordInform.SetPictureName(strPicName);					//设置图片 
	 
	// 
	BOOL res = FALSE; 
	BeginWaitCursor(); 
	res = wordInform.WordDocOperate(); 
	EndWaitCursor(); 
 
	if(wordInform.m_wordStruct.PreviewOrPrint == 1){ 
		if(res == FALSE){ 
			MessageBox("警告:违法告知单打印出现故障!"); 
		}else{ 
			MessageBox("word违法告知单打印完毕!"); 
		} 
	} 
	 
 
} 
 
void CTestWordAllDlg::OnMenu1()  
{ 
	CForm1 dlg; 
	dlg.DoModal(); 
 
} 
 
void CTestWordAllDlg::OnButton4()  
{ 
BeginWaitCursor(); 
 
	//下面是定义VARIANT变量; 
	CString strCurPath; 
 
	CString strDocName; 
 
	::GetCurrentDirectory(MAX_PATH,strCurPath.GetBuffer(MAX_PATH));  
 
	strCurPath.ReleaseBuffer(); 
 
	strCurPath.Format("%s",strCurPath); 
	 
	strDocName = strCurPath + "\\wordTable.doc"; 
 
	//COleVariant vTrue((short)TRUE), vFalse((short)FALSE),vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR); 
	COleVariant varFilePath(strDocName); 
	COleVariant varstrNull(""); 
	COleVariant varZero((short)0); 
	COleVariant varTrue(short(1),VT_BOOL); 
	COleVariant varFalse(short(0),VT_BOOL); 
	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); 
 
	_Application m_App;//定义Word提供的应用程序对象; 
 
	Documents m_Docs;//定义Word提供的文档对象; 
 
	Selection m_Sel;//定义Word提供的选择对象; 
 
	m_Docs.ReleaseDispatch(); 
	m_Sel.ReleaseDispatch(); 
	m_App.m_bAutoRelease=true; 
	if(!m_App.CreateDispatch("Word.Application")) 
	{  
		AfxMessageBox("创建Word2003服务失败!");  
		exit(1);  
	} 
 
	m_App.SetVisible(TRUE);		//显示Word,如果,FALSE,表示隐藏 
	//m_App.SetVisible(FALSE);		//显示Word,如果,FALSE,表示隐藏 
 
	m_Docs.AttachDispatch(m_App.GetDocuments());//将Documents类对象m_Docs和Idispatch接口关联起来; 
	 
	CString m_WordVer = "Word2003"; 
 
	if (m_WordVer == "Word2003"){ 
		//office2000 
		m_Docs.Open(varFilePath,varFalse,varFalse,varFalse, 
					varstrNull,varstrNull,varFalse,varstrNull, 
					varstrNull,varTrue,varTrue,varTrue); 
	 
	}else{ 
		//office2003 
		m_Docs.Open( //可看成VB语句set testDoc =  Word.documents.Open(…) 
                                COleVariant(strDocName,VT_BSTR), 
                                varFalse,    // Confirm Conversion. 
                                varFalse,    // ReadOnly. 
                                varFalse,    // AddToRecentFiles. 
                                covOptional, // PasswordDocument. 
                                covOptional, // PasswordTemplate. 
                                varTrue,    // Revert. 
                                covOptional, // WritePasswordDocument. 
                                covOptional, // WritePasswordTemplate. 
                                covOptional, // Format. // Last argument for Word 97 
                                   covOptional, // Encoding // New for Word 2000/2002 
                                   varTrue,     // Visible 
                                   covOptional, // OpenConflictDocument 
                                   covOptional, // OpenAndRepair 
                                   varZero,     // DocumentDirection wdDocumentDirection LeftToRight 
                                   covOptional  // NoEncodingDialog 
                                   ); 
 
	} 
 
 
	//save word file 
	_Document oActiveDoc;  
	oActiveDoc = m_App.GetActiveDocument();  
 
	// 
	m_Sel.AttachDispatch(m_App.GetSelection());//将Selection类对象m_Sel和Idispatch接口关联起来; 
 
	/* 
	m_Sel.MoveDown(COleVariant((short)4),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.MoveDown(COleVariant((short)5),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("123456789"); 
	m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("李明"); 
	m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("25"); 
	m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("技术员"); 
	m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("本科"); 
	m_Sel.MoveRight(COleVariant((short)1),COleVariant((short)1),COleVariant((short)0)); 
	m_Sel.TypeText("上海市虹口区民主路315号"); 
 
	m_Sel.MoveDown(COleVariant((short)5),COleVariant((short)1),COleVariant((short)0)); 
 
	///////////////////////////////////////////////////////////////////////////////// 
	 
	 
	/////////////插入图片////////////////////////// 
	CString strPicFile = strCurPath + "\\tp1.jpg"; 
 
	//浮动方式显示图片 
	//Shapes shapes1 = m_Sel.GetInlineShapes(); 
	//shapes1.AddPicture((LPCTSTR)lpstrPicFile, &vtFalse,&vtTrue, &vtOpn); 
 
	//嵌入方式显示图片 
	InlineShapes inlineshapes; 
	LPDISPATCH pInlineShapes = m_Sel.GetInlineShapes(); 
	inlineshapes.AttachDispatch(pInlineShapes); 
	CComVariant vtTrue(true), vtFalse(false), vtZero(0l), vtNone, vtNullString(""); 
	CComVariant vtOpn(DISP_E_PARAMNOTFOUND, VT_ERROR); 
	inlineshapes.AddPicture(strPicFile, &vtFalse, &vtTrue, &vtOpn); 
	inlineshapes.ReleaseDispatch(); 
	/////////////////////////////////////////////// 
	Tables m_tables = oActiveDoc.GetTables(); 
	Table m_table1 = m_tables.Item(2);	//第一个表格 
	Rows   rows   =   m_table1.GetRows();    
	 
	//第1行 
	Row   row = rows.Item(1);		 
	Cells cells = row.GetCells();    
	Cell cell = cells.Item(2);   //第2列 
	Range r = cell.GetRange();    
	r.SetText("冬天"); 
	 
	//动态加行 
	//rows.Add(covOptional); 
	*/ 
 
	/////复制表格////////////// 
	//MoveDown函数的第1参数:4 表示 按列跳,5 表示按行跳 
	//参数2: 1表示移动1行,3 表示表格下移3行 
	//参数3: 0 表示按列移动,1表示按行移动 
 
	//跳过第一行标题 
	m_Sel.MoveDown(COleVariant((short)4),COleVariant((short)1),COleVariant((short)0)); 
	//选择表格 
	m_Sel.MoveDown(COleVariant((short)5),COleVariant((short)3),COleVariant((short)1)); 
	//复制被选择的表格及表格上的一行 
	m_Sel.Copy(); 
	//向下再移动一行,以便复制新的表 
	m_Sel.MoveDown(COleVariant((short)4),COleVariant((short)1),COleVariant((short)0)); 
	//复制出新的表格 
	m_Sel.PasteAndFormat(0); 
	/////////////////// 
 
	/////////////////////////////////////////////// 
	Tables m_tables = oActiveDoc.GetTables(); 
	int nTableCount = m_tables.GetCount();	//得到表格总数 
 
 
	Table m_table1 = m_tables.Item(2);	//第2个表格 
	Rows   rows   =   m_table1.GetRows();    
	 
	//第1行 
	Row   row = rows.Item(1);		 
	Cells cells = row.GetCells();    
	Cell cell = cells.Item(2);   //第2列 
	Range r = cell.GetRange();    
	r.SetText("冬天"); 
 
 
	oActiveDoc.PrintPreview();		//预览,前提是m_App.SetVisible(TRUE); 
	 
}