我想在VC中打开Office2000中Word, excel,powerpoint等文档, 查看了很多资料, 都说用Office2000中提供的Com接口开发最快, 可那些接口中的参数全是一样的,MSDN上又没有相关说明,我该怎么办啊,谁帮我,高分送上,急死人了!

解决方案 »

  1.   

    MSDN里面有这种例子啊。
    只要你安装有office,就可以在VC中导入他的msword9.olb或者msexcel9.olb,然后就可以用里面的类了。
    我以前做过,不过没有小例子,你在msdn里面搜一下,肯定可以找到的。别着急,慢慢来!没有解决不了的问题。
      

  2.   

    CWordInfo::CWordInfo()
    {
    m_nRefCount++;
    m_bSetFile = false; if (1==m_nRefCount && CCELTools::IsWordExist())
    {
    try
    {
    ASSERT (NULL==m_objWord);
    m_objWord = new _ApplicationWord;

    if (!m_objWord->CreateDispatch("Word.Application"))
    {
    AfxMessageBox("²»ÄÜ´´½¨Word¶ÔÏó!", MB_ICONSTOP);
    delete m_objWord; m_objWord = NULL;
    throw 0;
    return;
    }
    }
    OLE_CATCH();
    }
    }
      

  3.   

    BOOL CWordInfo::SetFile(LPCTSTR lpszFileName)
    {
    m_sFullPath=lpszFileName;//¼Ç¼ÏÂÀ´Õâ¸öȫ·¾¶
    CFileFind ff;
    if (!ff.FindFile(lpszFileName)) return FALSE; try
    {
    COleVariant covTrue((short)TRUE),
    covFalse((short)FALSE),
    covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    Documents docs(m_objWord->GetDocuments());
    m_doc.AttachDispatch(docs.Open(
    COleVariant(lpszFileName,VT_BSTR),
    covFalse,    // Confirm Conversion.
    covFalse,    // ReadOnly.
    covFalse,    // AddToRecentFiles.
    covOptional, // PasswordDocument.
    covOptional, // PasswordTemplate.
    covFalse,    // Revert.
    covOptional, // WritePasswordDocument.
    covOptional, // WritePasswordTemplate.
    covOptional) // Format.
    );
    }
    OLE_CATCH(FALSE); m_bSetFile = true; m_sFileTitle = CCELTools::TitleOnly(lpszFileName);
    return TRUE;
    }
      

  4.   


    运用VC或Java对Office进行编程操作    etre(原作) 
            用VC对Office进行操作的介绍已经不少了,但是从来没有把word,excel,powerPoint进进全面的介绍的。
        由于工作的需要,我需要对在自己的软件中对word,excel,powerPoint进行操作。所以把自己的体会写出来和大家分享,希望对大家有所帮助。当然还有很多不当之处,希望大家指出。
      用例子来说明吧,首先创建一个MFC AppWizard(EXE)工程,然后通过在VIEW菜单中,选ClassWizard,选Automation选项卡,选Add Class,选择From a TypeLibrary, 选中Microsoft Office 2000 类型库:Excel9.olb,MSPPT9.OLB,MSWORD9.OLB(在Microsoft Office\Office目录下) 会将类型库中的所有类添加到你的工程中。 
    然后写一个类来操作Office吧!
    ObtGuiGcomOfficePrinter .h
    #if !defined(AFX_OBTGUIGCOMOFFICEPRINTER_H__03A0C2D8_DFC8_4B51_8ADB_994B86BACB82__INCLUDED_)
    #define AFX_OBTGUIGCOMOFFICEPRINTER_H__03A0C2D8_DFC8_4B51_8ADB_994B86BACB82__INCLUDED_
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000#include "comdef.h"
    #include "ObtGuiGcomMsWord9.h"
    #include "ObtGuiGcomMsPpt9.h"
    #include "ObtGuiGcomExcel9.h"class AFX_EXT_CLASS ObtGuiGcomOfficePrinter  
    {
    public:
     ObtGuiGcomOfficePrinter();
     virtual ~ObtGuiGcomOfficePrinter();//Operator
    public:
     BOOL WordPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter);
     BOOL ExcelPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter);
     BOOL PowerPointPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter);};#include "stdafx.h"
    #include "ObtGuiGcomOfficePrinter.h"#ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endif//////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////ObtGuiGcomOfficePrinter::ObtGuiGcomOfficePrinter()
    {}
    ObtGuiGcomOfficePrinter::~ObtGuiGcomOfficePrinter()
    {}BOOL ObtGuiGcomOfficePrinter::PowerPointPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter)
    {
     _PptApplication  m_powerpointApp;
     Presentations m_powerpointPres;
     _Presentation m_powerpointPre;    m_powerpointPres.ReleaseDispatch();
     m_powerpointPre.ReleaseDispatch();
     
     if(!m_powerpointApp.CreateDispatch("PowerPoint.Application"))
     { 
      AfxMessageBox("创建PowerPoint服务失败!"); 
      return FALSE; 
     } 
     
     m_powerpointApp.m_bAutoRelease=true;
     m_powerpointApp.SetVisible(TRUE);//对于PowerPoint必须设置为TRUE m_powerpointPres.AttachDispatch(m_powerpointApp.GetPresentations());
        m_powerpointPres.Open(lpszFileName,-1,-1,-1);
     m_powerpointPre.AttachDispatch(m_powerpointApp.GetActivePresentation(),TRUE);
        
     m_powerpointPre.PrintOut(-1,-1,"",long(1),-1);
     
        m_powerpointApp.Quit(); m_powerpointPre.ReleaseDispatch();
     m_powerpointPres.ReleaseDispatch();
     m_powerpointApp.ReleaseDispatch(); return TRUE;
    }
    BOOL ObtGuiGcomOfficePrinter::ExcelPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter)
    {
     _ExcelApplication    m_excelApp;//定义Excel提供的应用程序对象
     Workbooks       m_excelBooks; 
     _Workbook       m_excelBook;
     
     m_excelBooks.ReleaseDispatch();
     m_excelBook.ReleaseDispatch();
     m_excelApp.m_bAutoRelease=true; //创建Excel 2000服务器(启动Excel) 
     if (!m_excelApp.CreateDispatch("Excel.Application")) 
     { 
      AfxMessageBox("创建Excel服务失败!"); 
      return FALSE;
     } 
        
     m_excelApp.SetVisible(FALSE); //设置为隐藏
     //利用模板文件建立新文档 
     m_excelBooks.AttachDispatch(m_excelApp.GetWorkbooks(),true); 
     m_excelBook.AttachDispatch(m_excelBooks.Add(_variant_t(lpszFileName))); 
        
     //m_excelApp.SetActivePrinter(lpszActivePrinter); //设置当前打印机
     COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);//定义打印机并打印
        m_excelBook.PrintOut(covOptional,covOptional,COleVariant(long(1)),covFalse,covOptional,covOptional,covOptional,covOptional);
     
     m_excelApp.Quit();//退出
     
     m_excelBook.ReleaseDispatch(); 
     m_excelBooks.ReleaseDispatch(); 
     m_excelApp.ReleaseDispatch();  return TRUE;
    }BOOL ObtGuiGcomOfficePrinter::WordPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter)
    {
     
     _WordApplication    m_wordApp;//定义Word提供的应用程序对象
     Documents  m_wordDocs;//定义Word提供的文档对象
     _Document  m_wordDoc; //当前的的文档对象
        
     m_wordDocs.ReleaseDispatch();
     m_wordDoc.ReleaseDispatch();
     m_wordApp.m_bAutoRelease=true;
     
     if(!m_wordApp.CreateDispatch("Word.Application")) //创建Word应用服务
     { 
      AfxMessageBox("创建Word应用服务失败!"); 
      return FALSE; 
     } m_wordApp.SetVisible(FALSE); //设置为隐藏
    //下面是打开文件定义VARIANT变量;
     COleVariant varFilePath(lpszFileName);
     COleVariant varstrNull("");
     COleVariant varZero((short)0);
     COleVariant varTrue(short(1),VT_BOOL);
     COleVariant varFalse(short(0),VT_BOOL); m_wordDocs.AttachDispatch(m_wordApp.GetDocuments());//将Documents类对象m_Docs和Idispatch接口关联起来;
     m_wordDocs.Open(varFilePath,varFalse,varFalse,varFalse,varstrNull,varstrNull,varFalse,varstrNull,varstrNull,varTrue,varTrue,varTrue);
     m_wordDoc.AttachDispatch(m_wordApp.GetActiveDocument()); //得到当前激活的Document对象 m_wordApp.SetActivePrinter(lpszActivePrinter);  //设置当前打印机
     COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); //定义打印属性
     m_wordDoc.PrintOut(covFalse,   
             covOptional,           
            covOptional,          
            covOptional,          
            covOptional,           
            covOptional,           
            covOptional,           
            COleVariant((long)1),  
            covOptional,           
            covOptional,           
            covOptional,           
            covOptional,           
            covOptional,           
            covOptional,     
      covOptional,           
            covOptional,           
            covOptional,           
            covOptional);        
     
     m_wordApp.Quit(covOptional,covOptional,covOptional);//退出 m_wordDoc.ReleaseDispatch();  //断开关联;
     m_wordDocs.ReleaseDispatch();
     m_wordApp.ReleaseDispatch();
     return TRUE;
    }
    以上是用Office打开相应的文档进行打印的操作,如果你需要进行相应的其他操作,你可以用Office里面的宏进行录制然后转化为相应的代码。 
      

  5.   


    在VC中如何将数据导入Word中
     
    [03-9-10 10:36]  作者:何鸿鹏  
       在给企业开发的项目中,客户经常要求将数据汇总显示并打印。站在程序员的立场上,简单数据的汇总打印可以采用VB自带报表,对复杂的数据用水晶报表或第三方打印控件。在企业中,汇总数据另一个目的是为了便于交流和共享资源,报表的格式通常固定,内容可以自己调整,他们对 Excel 和 Word 情有独钟。  刚完成的项目中,客户要求将汇总的数据以三种方式进行显示和打印:AutoCad、Excel 和 Word 文档中。前两种方式网上资源很多,对 Word 文档我找到例子不是很多。由于需要和 AutoCad 开发程序结合,不能将 Word 文档以 OLE 的方式 嵌入到程序中,文档只能在内存中形成,这将占用大量的CPU资源,另开一个线程进行处理,线程间以发送消息的方式进行通信。  首先在VC引入Word, 对格式相同的地方一定使用模版的方式进行处理,这可以大大的提高运行速度,Word中的模版为*.dot。加载模版的代码为:   sDocs=sApp.GetDocuments();
      sDocs.AttachDispatch(sApp.GetDocuments(),true);
      COleVariant vFalse((long)0),vTrue((long)1); 
      sDoc.AttachDispatch(sDocs.Add(COleVariant(_variant_t(strFileName)), vFalse,vFalse, vTrue));   需要注意的是,如果Word中使用到表格,VBA录制的全是Selection对象的处理方法,在VC中使用Selection对象的MoveUp和MoveDown函数时会出现不确定现象(如果你知道为什么的话请告诉我)。如果你需要绘制表格,不要用程序来动态形成,绘制表格的代码是很繁琐的,而且在页眉中绘制单元格是很难控制的。可以先在模版中绘出你要的表格格式,然后用程序复制单元格或者直接使用模版中的单元格。由于我做的项目表格的行数不确定,我采用的是复制单元格的方式(速度比较慢,谁有更好的方法?)。  剩下的处理流程,就是你想做什么操作,先在Word中录制一段宏,然后查看其VBA代码,并将其转化到Vc程序中。这就看你Word使用的熟练程度了,例如如何把不同页的页眉页脚设置不同,如何得到当前页的页数以及总的文档的页数,具体可以参考程序。  VC中也可以像Excel中调用模版中存在的宏,代码如下:
      VARIANT vtMissing ;vtMissing.vt =VT_ERROR; 
      vtMissing.scode =DISP_E_PARAMNOTFOUND;
      sApp.Run("AddCell",&vtMissing,&vtMissing,&vtMissing, 
      &vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing, 
      &vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing, 
      &vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing, 
      &vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing);
      

  6.   

    Excel的:
    http://www.vchelp.net/vchelp/file2003_2/excelaccess.asp?type_id=50&class_id=1&cata_id=10&article_id=1004&search_term=
      

  7.   


    运用VC或Java对Office进行编程操作    etre(原作) 
            用VC对Office进行操作的介绍已经不少了,但是从来没有把word,excel,powerPoint进进全面的介绍的。
        由于工作的需要,我需要对在自己的软件中对word,excel,powerPoint进行操作。所以把自己的体会写出来和大家分享,希望对大家有所帮助。当然还有很多不当之处,希望大家指出。
      用例子来说明吧,首先创建一个MFC AppWizard(EXE)工程,然后通过在VIEW菜单中,选ClassWizard,选Automation选项卡,选Add Class,选择From a TypeLibrary, 选中Microsoft Office 2000 类型库:Excel9.olb,MSPPT9.OLB,MSWORD9.OLB(在Microsoft Office\Office目录下) 会将类型库中的所有类添加到你的工程中。 
    然后写一个类来操作Office吧!
    ObtGuiGcomOfficePrinter .h
    #if !defined(AFX_OBTGUIGCOMOFFICEPRINTER_H__03A0C2D8_DFC8_4B51_8ADB_994B86BACB82__INCLUDED_)
    #define AFX_OBTGUIGCOMOFFICEPRINTER_H__03A0C2D8_DFC8_4B51_8ADB_994B86BACB82__INCLUDED_
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000#include "comdef.h"
    #include "ObtGuiGcomMsWord9.h"
    #include "ObtGuiGcomMsPpt9.h"
    #include "ObtGuiGcomExcel9.h"class AFX_EXT_CLASS ObtGuiGcomOfficePrinter  
    {
    public:
     ObtGuiGcomOfficePrinter();
     virtual ~ObtGuiGcomOfficePrinter();//Operator
    public:
     BOOL WordPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter);
     BOOL ExcelPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter);
     BOOL PowerPointPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter);};#include "stdafx.h"
    #include "ObtGuiGcomOfficePrinter.h"#ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endif//////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////ObtGuiGcomOfficePrinter::ObtGuiGcomOfficePrinter()
    {}
    ObtGuiGcomOfficePrinter::~ObtGuiGcomOfficePrinter()
    {}BOOL ObtGuiGcomOfficePrinter::PowerPointPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter)
    {
     _PptApplication  m_powerpointApp;
     Presentations m_powerpointPres;
     _Presentation m_powerpointPre;    m_powerpointPres.ReleaseDispatch();
     m_powerpointPre.ReleaseDispatch();
     
     if(!m_powerpointApp.CreateDispatch("PowerPoint.Application"))
     { 
      AfxMessageBox("创建PowerPoint服务失败!"); 
      return FALSE; 
     } 
     
     m_powerpointApp.m_bAutoRelease=true;
     m_powerpointApp.SetVisible(TRUE);//对于PowerPoint必须设置为TRUE m_powerpointPres.AttachDispatch(m_powerpointApp.GetPresentations());
        m_powerpointPres.Open(lpszFileName,-1,-1,-1);
     m_powerpointPre.AttachDispatch(m_powerpointApp.GetActivePresentation(),TRUE);
        
     m_powerpointPre.PrintOut(-1,-1,"",long(1),-1);
     
        m_powerpointApp.Quit(); m_powerpointPre.ReleaseDispatch();
     m_powerpointPres.ReleaseDispatch();
     m_powerpointApp.ReleaseDispatch(); return TRUE;
    }
    BOOL ObtGuiGcomOfficePrinter::ExcelPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter)
    {
     _ExcelApplication    m_excelApp;//定义Excel提供的应用程序对象
     Workbooks       m_excelBooks; 
     _Workbook       m_excelBook;
     
     m_excelBooks.ReleaseDispatch();
     m_excelBook.ReleaseDispatch();
     m_excelApp.m_bAutoRelease=true; //创建Excel 2000服务器(启动Excel) 
     if (!m_excelApp.CreateDispatch("Excel.Application")) 
     { 
      AfxMessageBox("创建Excel服务失败!"); 
      return FALSE;
     } 
        
     m_excelApp.SetVisible(FALSE); //设置为隐藏
     //利用模板文件建立新文档 
     m_excelBooks.AttachDispatch(m_excelApp.GetWorkbooks(),true); 
     m_excelBook.AttachDispatch(m_excelBooks.Add(_variant_t(lpszFileName))); 
        
     //m_excelApp.SetActivePrinter(lpszActivePrinter); //设置当前打印机
     COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);//定义打印机并打印
        m_excelBook.PrintOut(covOptional,covOptional,COleVariant(long(1)),covFalse,covOptional,covOptional,covOptional,covOptional);
     
     m_excelApp.Quit();//退出
     
     m_excelBook.ReleaseDispatch(); 
     m_excelBooks.ReleaseDispatch(); 
     m_excelApp.ReleaseDispatch();  return TRUE;
    }BOOL ObtGuiGcomOfficePrinter::WordPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter)
    {
     
     _WordApplication    m_wordApp;//定义Word提供的应用程序对象
     Documents  m_wordDocs;//定义Word提供的文档对象
     _Document  m_wordDoc; //当前的的文档对象
        
     m_wordDocs.ReleaseDispatch();
     m_wordDoc.ReleaseDispatch();
     m_wordApp.m_bAutoRelease=true;
     
     if(!m_wordApp.CreateDispatch("Word.Application")) //创建Word应用服务
     { 
      AfxMessageBox("创建Word应用服务失败!"); 
      return FALSE; 
     } m_wordApp.SetVisible(FALSE); //设置为隐藏
    //下面是打开文件定义VARIANT变量;
     COleVariant varFilePath(lpszFileName);
     COleVariant varstrNull("");
     COleVariant varZero((short)0);
     COleVariant varTrue(short(1),VT_BOOL);
     COleVariant varFalse(short(0),VT_BOOL); m_wordDocs.AttachDispatch(m_wordApp.GetDocuments());//将Documents类对象m_Docs和Idispatch接口关联起来;
     m_wordDocs.Open(varFilePath,varFalse,varFalse,varFalse,varstrNull,varstrNull,varFalse,varstrNull,varstrNull,varTrue,varTrue,varTrue);
     m_wordDoc.AttachDispatch(m_wordApp.GetActiveDocument()); //得到当前激活的Document对象 m_wordApp.SetActivePrinter(lpszActivePrinter);  //设置当前打印机
     COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); //定义打印属性
     m_wordDoc.PrintOut(covFalse,   
             covOptional,           
            covOptional,          
            covOptional,          
            covOptional,           
            covOptional,           
            covOptional,           
            COleVariant((long)1),  
            covOptional,           
            covOptional,           
            covOptional,           
            covOptional,           
            covOptional,           
            covOptional,     
      covOptional,           
            covOptional,           
            covOptional,           
            covOptional);        
     
     m_wordApp.Quit(covOptional,covOptional,covOptional);//退出 m_wordDoc.ReleaseDispatch();  //断开关联;
     m_wordDocs.ReleaseDispatch();
     m_wordApp.ReleaseDispatch();
     return TRUE;
    }
    以上是用Office打开相应的文档进行打印的操作,如果你需要进行相应的其他操作,你可以用Office里面的宏进行录制然后转化为相应的代码。 
      

  8.   


    在VC中如何将数据导入Word中
     
    [03-9-10 10:36]  作者:何鸿鹏  
       在给企业开发的项目中,客户经常要求将数据汇总显示并打印。站在程序员的立场上,简单数据的汇总打印可以采用VB自带报表,对复杂的数据用水晶报表或第三方打印控件。在企业中,汇总数据另一个目的是为了便于交流和共享资源,报表的格式通常固定,内容可以自己调整,他们对 Excel 和 Word 情有独钟。  刚完成的项目中,客户要求将汇总的数据以三种方式进行显示和打印:AutoCad、Excel 和 Word 文档中。前两种方式网上资源很多,对 Word 文档我找到例子不是很多。由于需要和 AutoCad 开发程序结合,不能将 Word 文档以 OLE 的方式 嵌入到程序中,文档只能在内存中形成,这将占用大量的CPU资源,另开一个线程进行处理,线程间以发送消息的方式进行通信。  首先在VC引入Word, 对格式相同的地方一定使用模版的方式进行处理,这可以大大的提高运行速度,Word中的模版为*.dot。加载模版的代码为:   sDocs=sApp.GetDocuments();
      sDocs.AttachDispatch(sApp.GetDocuments(),true);
      COleVariant vFalse((long)0),vTrue((long)1); 
      sDoc.AttachDispatch(sDocs.Add(COleVariant(_variant_t(strFileName)), vFalse,vFalse, vTrue));   需要注意的是,如果Word中使用到表格,VBA录制的全是Selection对象的处理方法,在VC中使用Selection对象的MoveUp和MoveDown函数时会出现不确定现象(如果你知道为什么的话请告诉我)。如果你需要绘制表格,不要用程序来动态形成,绘制表格的代码是很繁琐的,而且在页眉中绘制单元格是很难控制的。可以先在模版中绘出你要的表格格式,然后用程序复制单元格或者直接使用模版中的单元格。由于我做的项目表格的行数不确定,我采用的是复制单元格的方式(速度比较慢,谁有更好的方法?)。  剩下的处理流程,就是你想做什么操作,先在Word中录制一段宏,然后查看其VBA代码,并将其转化到Vc程序中。这就看你Word使用的熟练程度了,例如如何把不同页的页眉页脚设置不同,如何得到当前页的页数以及总的文档的页数,具体可以参考程序。  VC中也可以像Excel中调用模版中存在的宏,代码如下:
      VARIANT vtMissing ;vtMissing.vt =VT_ERROR; 
      vtMissing.scode =DISP_E_PARAMNOTFOUND;
      sApp.Run("AddCell",&vtMissing,&vtMissing,&vtMissing, 
      &vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing, 
      &vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing, 
      &vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing, 
      &vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing);
    Excel的:
    http://www.vchelp.net/vchelp/file2003_2/excelaccess.asp?type_id=50&class_id=1&cata_id=10&article_id=1004&search_term=
      

  9.   

    再来个Excel的:
    在Visual C++ 中调用Excel 2000 
     
    作者:程 蓬 
     
    在开发软件时,经常要将数据输出到Excel 2000中,在Excel 2000中对该数据进行进一步地格式化处理或进行计算处理。在Visual Basic中处理起来较简单,Excel 2000的VB编程帮助中有较为详细的介绍。在Visual C++中如何进行处理了?利用Excel 2000的ActiveX Automate功能,处理起来同VB中类似。但要注意以下几点: 
     对于对象的属性值的读取或赋值,需要用GetProperty()或SetProperty(NewValue)函数,不能象VB中直接通过属性名称取值或赋值。例如:Worksheet.GetCount(), Worksheet.SetName(“Sheet1”)。 
     对集合对象中的成员对象的引用,必须使用集合对象的GetItem()函数。例如:Worksheets.GetItem(ColeVariant((long)1))或Worksheets.GetItem(ColeVariant(“Sheet1”))取得第一个工作表。 
     在COM接口中,时常用到Variant,BSTR,SafeArray数据类型。Variant数据类型是一个联合,可表示几乎所有的类型的数据,具体用法见MSDN中的相关介绍,类_variant_t是对VARIANT数据类型的封装。在Excel 2000的VB编程帮助中,如果提到某函数或属性需要一个值,该值的数据类型通常是Variant,在封装Excel 2000对象的类定义中,说明了具体需要的数据类型。BSTR是一个包括了字符串和字符串长度的数据结构,类_bstr_t是对BSTR数据类型的封装。在Excel 2000的VB编程帮助中提到的字符串通常指BSTR。具体函数参数或属性的数据类型,见封装该对象的类的定义。SafeArray是一个包括数组和数组边界的结构,数组边界外的内容不允许访问。在Excel 2000的VB编程帮助中提到的数组是指SafeArray。关于SafeArray的处理,请见MSDN的相关帮助。 
     对于缺省参数和缺省值。在VB中,函数的参数可以空缺,在VC++中不允许,必须将所有的参数填写完全。如果你希望指定某个参数为缺省值,根据参数数据类型的不同,可指定不同的缺省值。当参数数据类型为字符串时,可以用长度为0的字符串。如果参数是Variant类型,可用常量vtMissing,该常量在comdef.h中定义。也可用_variant_t(DISP_E_PARAMNOTFOUND, VT_ERROR)产生一个Variant对象。 
     Excel对象中的集合对象有时包括的子对象是不一定的,例如:Range对象,可以表示Cell的集合,也可以表示Column的集合或Row的集合,Range.GetItem(1)可以返回Cell或Column或Row对象。 
     对对象的引用或传递对象,使用IDispatch类对象,有时利用Variant对IDispatch进行包装。 
     以下是一段源程序,演示如何启动Excel 2000,利用一个模板文件产生一个新文档,在该文档的”Sheet1”工作表的第一个单元中填写一段文字,设置第一列的列宽,然后调用一个模板中的宏,执行一段程序,最后打印预览该Excel文档。模板文件名称:MyTemplate.xlt。程序在Visual C++ 6.0 sp4,Windows 2000 Professional sp-1下调试通过。 
     首先利用Visual C++ 6.0,建立一个MFC基于对话框的工程项目,共享DLL,Win32平台。工程名称ExcelTest。在主对话框中加入一个按钮, 
     ID IDC_EXCELTEST 
     Caption Test Excel 
     双击该按钮,增加成员函数void CExcelTestDlg::OnExceltest()。 
     在BOOL CExcelTestApp::InitInstance()中,dlg.DoModal();之前增加代码: 
     if (CoInitialize(NULL)!=0) 
     { 
     AfxMessageBox("初始化COM支持库失败!"); 
     exit(1); 
     } 
     在return FALSE; 语句前,加入: 
     CoUninitialize(); 
     选择Menu->View->ClassWizade,打开ClassWizade窗口,选择Add Class->From a type library,选择D:\Program Files\Microsoft Office\office\Excel9.OLB(D:\Program Files\Microsoft Office\是本机上Microsoft Office 2000的安装目录,可根据个人机器上的实际安装目录修改)。选择_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,加入新类,分别为_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,头文件Excel9.h,源文件Excel9.cpp。 
     在ExcelTestDlg.cpp文件的头部,#include "ExcelTestDlg.h"语句之下,增加 : 
     #include "comdef.h" 
     #include "Excel9.h" 
     在void CExcelTestDlg::OnExceltest() 函数中增加如下代码: 
     void CExcelTestDlg::OnExceltest() 
     { 
     _Application ExcelApp; 
     Workbooks wbsMyBooks; 
     _Workbook wbMyBook; 
     Worksheets wssMysheets; 
     _Worksheet wsMysheet; 
     Range rgMyRge; 
     //创建Excel 2000服务器(启动Excel) 
      if (!ExcelApp.CreateDispatch("Excel.Application",NULL)) 
     { 
     AfxMessageBox("创建Excel服务失败!"); 
     exit(1); 
     } 
     //利用模板文件建立新文档 
     wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true); 
     wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t("g:\\exceltest\\MyTemplate.xlt"))); 
     //得到Worksheets 
     wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true); 
     //得到sheet1 
     wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true); 
     //得到全部Cells,此时,rgMyRge是cells的集合 
     rgMyRge.AttachDispatch(wsMysheet.GetCells(),true); 
     //设置1行1列的单元的值 
     rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("This Is A Excel Test Program!")); 
     //得到所有的列 
     rgMyRge.AttachDispatch(wsMysheet.GetColumns(),true); 
     //得到第一列 
     rgMyRge.AttachDispatch(rgMyRge.GetItem(_variant_t((long)1),vtMissing).pdispVal,true); 
     //设置列宽 
     rgMyRge.SetColumnWidth(_variant_t((long)200)); 
     //调用模板中预先存放的宏 
     ExcelApp.Run(_variant_t("CopyRow"),_variant_t((long)10),vtMissing,vtMissing, 
     vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing, 
     vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing, 
     vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing, 
     vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing); 
     //打印预览 
     wbMyBook.SetSaved(true); 
     ExcelApp.SetVisible(true); 
     wbMyBook.PrintPreview(_variant_t(false)); 
     //释放对象 
     rgMyRge.ReleaseDispatch(); 
     wsMysheet.ReleaseDispatch(); 
     wssMysheets.ReleaseDispatch(); 
     wbMyBook.ReleaseDispatch(); 
     wbsMyBooks.ReleaseDispatch(); 
     ExcelApp.ReleaseDispatch(); 
     } 
     添加完以上程序后,可运行看结果
      

  10.   

    多谢各位:
        上面的信息我基本上都搜索出来看过了, 不过还是要多谢各位! 现在都没有系统的关于office的开发资料吗?
        liuxianzhi(碧渊):你说的MSDN中有例子在什么地方啊, 我是想要一个完全的说明文档,只看例子有些地方还是搞不懂, 这样就不能灵活应用啊!
        yintongshun(踏雪有痕):你那个打印成pdf格式的方法我试了, 怎么不行啊, 我想如果能打印成位图也可以解决我的问题了    我的任务是:
                 读出office文档的内容转化成图片格式显示, 不过不是pdf, 而是位图, 行不行啊? 多谢各位帮我想想办法
      

  11.   

    yintongshun(踏雪有痕):
           你那个打印成pdf格式的完整源码可以给我吗,谢了,Email:[email protected]
      

  12.   

    我不太记得了,两年前做过这种工作。只是我做这部分工作,完全是根据msdn中搜索出来的信息,讲了如何一步步的用VC来开发这种程序。
    如何转换为图片,就不太清楚了。我觉得可能office没有这种接口,可能你也找别的东西用。
      

  13.   

    office 2000的帮助文件中有一些接口函数的说明
      

  14.   

    只有自己安装Office的VBA帮助了,而且是VBScript需要自己测试
    可以利用录制宏来查看脚本
      

  15.   

    yintongshun(踏雪有痕):
                 你那个打印成pdf格式的方法我试了, 怎么不行啊, 我想如果能打印成位图也可以解决我的问题了, 完整源码可以给我吗,谢了,Email:[email protected]
      

  16.   

    yintongshun(踏雪有痕):
                你说的抓图是指抓屏吗, 我知道怎么做, 但我要做的是在后台打开Word转化成图片, 不显示Word界面的, 你说的这种方法是不行的, 我想要把每一页转化成一张图片, 这样一个文档转化成一系列图片, 能读出Word的信息也可以, 我可经在内存中完成这一操作, 现在我已可以读出文本内容, 但对图片和表格还不知道怎么处理, 你有办法吗?