描述:
下面是合并word文件的参数,只能合并word2003文件,如果用户使用的是word2000,程序需要怎么修改?请大家帮忙看看~~
网上搜了一些信息,好像意思是说下面的Word.Application要带上版本号:Word.Application.11或Word.Application.9,但也有的说不必要~~
if(!wordApp.CreateDispatch("Word.Application",NULL)){}
还有,word2003对应的open函数有16个参数,但是word2000只有12个参数。如果是这样该怎么办?
还有,像这样的函数调用接口有没有相关的文档,大家是怎么会用的?
还请高手为我解决一下!多谢!
// Word.cpp : Defines the initialization routines for the DLL.
//
#include "stdafx.h"
#include "Word.h"
#include "msword.h"
#include "stdlib.h"
#include "string.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
char* jstringToWindows( JNIEnv *env, jstring jstr );
/////////////////////////////////////////////////////////////////////////////
// CWordApp
BEGIN_MESSAGE_MAP(CWordApp, CWinApp)
//{{AFX_MSG_MAP(CWordApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWordApp construction
CWordApp::CWordApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
/*
六个参数的word合并
char *f1,char *f2,char *f3,char *f4, char *f5 是要合并的五个word文件的路径
char *f6 是合并后生成的新word的存放路径
*/
void addWord(char *f1,char *f2,char *f3,char *f4, char *f5, char *f6)
{
if(CoInitialize(NULL) != S_OK)
{
// AfxMessageBox("初始化COM支持库失败!");
return ;
}
_Application wordApp;
Documents docs;
_Document doc1;
_Document doc2;
_Document doc3;
_Document doc4;
_Document doc5;
_Document doc6;
Range aRange;
COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if(!wordApp.CreateDispatch("Word.Application",NULL))
{
}
wordApp.SetVisible(FALSE);
// CString version = wordApp.GetVersion();
// AfxMessageBox(version);
docs=wordApp.GetDocuments();
CString str1 = f1;
CString str2 = f2;
CString str3 = f3;
CString str4 = f4;
CString str5 = f5;
CString str6 = f6;
doc1=docs.Open(COleVariant(str1),vFalse,vTrue,vFalse,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt);
doc6=docs.Add(vOpt,vOpt,vOpt,vOpt);
aRange=doc1.Range(vOpt,vOpt);
aRange.Copy();
aRange=doc6.Range(vOpt,vOpt);
aRange.Paste();
doc1.Close(vOpt,vOpt,vOpt);
doc2=docs.Open(COleVariant(str2),vFalse,vTrue,vFalse,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt);
aRange=doc2.Range(vOpt,vOpt);
aRange.Copy();
aRange=doc6.Range(vOpt,vOpt);
aRange.SetStart(aRange.GetEnd());
aRange.Paste();
doc2.Close(vOpt,vOpt,vOpt);
doc3=docs.Open(COleVariant(str3),vFalse,vTrue,vFalse,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt);
aRange=doc3.Range(vOpt,vOpt);
aRange.Copy();
aRange=doc6.Range(vOpt,vOpt);
aRange.SetStart(aRange.GetEnd());
aRange.Paste();
doc3.Close(vOpt,vOpt,vOpt);
doc4=docs.Open(COleVariant(str4),vFalse,vTrue,vFalse,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt);
aRange=doc4.Range(vOpt,vOpt);
aRange.Copy();
aRange=doc6.Range(vOpt,vOpt);
aRange.SetStart(aRange.GetEnd());
aRange.Paste();
doc4.Close(vOpt,vOpt,vOpt);
doc5=docs.Open(COleVariant(str5),vFalse,vTrue,vFalse,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt);
aRange=doc5.Range(vOpt,vOpt);
aRange.Copy();
aRange=doc6.Range(vOpt,vOpt);
aRange.SetStart(aRange.GetEnd());
aRange.Paste();
doc5.Close(vOpt,vOpt,vOpt);
doc6.SaveAs(COleVariant(str6),vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt);
doc6.Close(vOpt,vOpt,vOpt);
wordApp.Quit(vOpt,vOpt,vOpt);
CoUninitialize();
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CWordApp object
CWordApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CWordApp initialization
BOOL CWordApp::InitInstance()
{
// Register all OLE server (factories) as running. This enables the
// OLE libraries to create objects from other applications.
COleObjectFactory::RegisterAll();
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// Special entry points required for inproc servers
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return AfxDllGetClassObject(rclsid, riid, ppv);
}
STDAPI DllCanUnloadNow(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return AfxDllCanUnloadNow();
}
// by exporting DllRegisterServer, you can use regsvr.exe
STDAPI DllRegisterServer(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
COleObjectFactory::UpdateRegistryAll();
return S_OK;
}
//六个参数的word合并的JNI接口
JNIEXPORT void JNICALL Java_actions_Word_addWord(JNIEnv *env, jobject obj, jstring file1, jstring file2, jstring file3, jstring file4, jstring file5, jstring file6)
{
char *f1;
char *f2;
char *f3;
char *f4;
char *f5;
char *f6;
f1 = jstringToWindows(env,file1);
f2 = jstringToWindows(env,file2);
f3 = jstringToWindows(env,file3);
f4 = jstringToWindows(env,file4);
f5 = jstringToWindows(env,file5);
f6 = jstringToWindows(env,file6);
addWord(f1,f2,f3,f4,f5,f6);
}
char* jstringToWindows(JNIEnv *env, jstring jstr)
{
int length = (env)->GetStringLength(jstr );
const jchar* jcstr = (env)->GetStringChars(jstr,&nb