rt

解决方案 »

  1.   

    在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(); } 添加完以上程序后,可运行看结果。
      

  2.   

    如何运行一个MS Word?
        下面的代码可以运行并中止一个MS Word:Set WSHShell = WScript.CreateObject("WScript.Shell")
    '创建MS Word对象
    Set appWord = Wscript.CreateObject("Word.Application") '显示MS Word
    appWord.Visible = TRUE ' Open a sample document.
    appWord.Documents.Open("C:\Resume.doc")
    WSHShell.popup "现在已经打开了word,下面的代码是为了关闭Word而设置的"
    '退出MS Word
    Set appWord = Nothing如何通过MFC打开Word文档并打印它?我们可以通过自动化方法完成要求的功能,下面这一段代码就很好地说明了问题: _Application objWord;
    // Convenient values declared as ColeVariants.
    COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    // Get the IDispatch pointer and attach it to the objWord object.
    if (!objWord.CreateDispatch("Word.Application"))
    {
    AfxMessageBox("Couldn't get Word object.");
    return;
    }
    objWord.SetVisible(TRUE); //显示应用程序
    Documents docs(objWord.GetDocuments());
    _Document testDoc;testDoc.AttachDispatch(docs.Open(
    COleVariant("C:\\Test.doc",VT_BSTR),
    covFalse, // 确定转换
    covFalse, // 只读打开
    covFalse, // 添加到最近使用文件列表
    covOptional, // PasswordDocument.
    covOptional, // PasswordTemplate.
    covFalse, // Revert.
    covOptional, // WritePasswordDocument.
    covOptional, // WritePasswordTemplate.
    covOptional) // Format. // 如果是Word97,这便是最好一个参数
    covOptional, // 编码 // 下面是Word 2000/2002专用的参数
    covTrue, // 可见
    covOptional, // OpenConflictDocument
    covOptional, // OpenAndRepair
    (long)0, // DocumentDirection wdDocumentDirection LeftToRight
    covOptional // NoEncodingDialog

    ); 
    AfxMessageBox("打印两份");
    testDoc.PrintOut(covFalse, // 背景
    covOptional, // Append.
    covOptional, // Range.
    covOptional, // OutputFileName.
    covOptional, // From.
    covOptional, // To.
    covOptional, // Item.
    COleVariant((long)2), // 份数
    covOptional, // Pages.
    covOptional, // PageType.
    covOptional, // PrintToFile.
    covOptional, // Collate.
    covOptional, // ActivePrinterMacGX.
    covOptional // ManualDuplexPrint.
    covOptional, // PrintZoomColumn New with Word 2002
    covOptional, // PrintZoomRow ditto
    covOptional, // PrintZoomPaperWidth ditto
    covOptional); // PrintZoomPaperHeight ditto
    objWord.Quit(covFalse, // 保存修改
    covTrue, // 原始格式
    covFalse // RouteDocument.
    );  
      

  3.   

    Excel9.OLB? Office2003的在哪里?
      

  4.   

    运用VC或Java对Office进行编程操作    etre(原作) 
      
    关键字     VC,word,excel,powerpoint,office,java 
      
          用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里面的宏进行录制然后转化为相应的代码。对于在Java里需要时行Office操作的,你必须用JNI调用或运用Java-Com的相应包  
      

  5.   

    ObtGuiGcomMsWord9.h是什么头文件?
      

  6.   

    问一下  不是用Office的Com能以文本形式读取Word文档吗?
      

  7.   

    Com如何读出Word的中的文本内容  有例子吗?gz
      

  8.   

    http://msdn.microsoft.com/library/default.asp?URL=/library/techart/VSOfficeDev.htm
      

  9.   

    Application                           Type Library
       --------------------------------------------------   Microsoft Access 97                   Msacc8.olb
       Microsoft Jet Database 3.5            DAO350.dll
       Microsoft Binder 97                   Msbdr8.olb
       Microsoft Excel 97                    Excel8.olb
       Microsoft Graph 97                    Graph8.olb
       Microsoft Office 97                   Mso97.dll
       Microsoft Outlook 97                  Msoutl97.olb
       Microsoft PowerPoint 97               Msppt8.olb   Microsoft Word 97                     Msword8.olb
       Microsoft Access 2000                 Msacc9.olb
       Microsoft Jet Database 3.51           DAO360.dll
       Microsoft Binder 2000                 Msbdr9.olb
       Microsoft Excel 2000                  Excel9.olb
       Microsoft Graph 2000                  Graph9.olb
       Microsoft Office 2000                 Mso9.dll
       Microsoft Outlook 2000                Msoutl9.olb
       Microsoft PowerPoint 2000             Msppt9.olb
       Microsoft Word 2000                   Msword9.olb    Microsoft Access 2002                 Msacc.olb
       Microsoft Excel 2002                  Excel.exe
       Microsoft Graph 2002                  Graph.exe 
       Microsoft Office 2002                 MSO.dll
       Microsoft Outlook 2002                MSOutl.olb
       Microsoft PowerPoint 2002             MSPpt.olb
       Microsoft Word 2002                   MSWord.olb   Microsoft Office Access 2003          Msacc.olb
       Microsoft Office Excel 2003           Excel.exe
       Microsoft Graph 2003                  Graph.exe 
       Microsoft Office 2003                 MSO.dll
       Microsoft Office Outlook 2003         MSOutl.olb
       Microsoft Office PowerPoint 2003      MSPpt.olb
       Microsoft Office Word 2003            MSWord.olb以上是各个版本的自动化SERVER所在的库文件!希望对你能有帮助!
      

  10.   

    Application                           Type Library
       --------------------------------------------------   Microsoft Access 97                   Msacc8.olb
       Microsoft Jet Database 3.5            DAO350.dll
       Microsoft Binder 97                   Msbdr8.olb
       Microsoft Excel 97                    Excel8.olb
       Microsoft Graph 97                    Graph8.olb
       Microsoft Office 97                   Mso97.dll
       Microsoft Outlook 97                  Msoutl97.olb
       Microsoft PowerPoint 97               Msppt8.olb   Microsoft Word 97                     Msword8.olb
       Microsoft Access 2000                 Msacc9.olb
       Microsoft Jet Database 3.51           DAO360.dll
       Microsoft Binder 2000                 Msbdr9.olb
       Microsoft Excel 2000                  Excel9.olb
       Microsoft Graph 2000                  Graph9.olb
       Microsoft Office 2000                 Mso9.dll
       Microsoft Outlook 2000                Msoutl9.olb
       Microsoft PowerPoint 2000             Msppt9.olb
       Microsoft Word 2000                   Msword9.olb    Microsoft Access 2002                 Msacc.olb
       Microsoft Excel 2002                  Excel.exe
       Microsoft Graph 2002                  Graph.exe 
       Microsoft Office 2002                 MSO.dll
       Microsoft Outlook 2002                MSOutl.olb
       Microsoft PowerPoint 2002             MSPpt.olb
       Microsoft Word 2002                   MSWord.olb   Microsoft Office Access 2003          Msacc.olb
       Microsoft Office Excel 2003           Excel.exe
       Microsoft Graph 2003                  Graph.exe 
       Microsoft Office 2003                 MSO.dll
       Microsoft Office Outlook 2003         MSOutl.olb
       Microsoft Office PowerPoint 2003      MSPpt.olb
       Microsoft Office Word 2003            MSWord.olb