65.9K
CodeProject 正在变化。 阅读更多。
Home

自动化 Microsoft Excel 和 Word

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (5投票s)

2005年12月2日

CPOL

2分钟阅读

viewsIcon

63854

downloadIcon

1639

将 Word 和 Excel 自动化为一个 Visual Basic 中的 DLL,以便可以在 VC++ 中轻松使用。

引言

在许多情况下,需要在 VC++ 应用程序中使用 MS Excel 或 Word。在 VC 中自动化它们很容易,但当它在 VB 中作为 DLL 完成时,只需几行代码,结果就在于它的简单性。在这里,我用 MS Visual Basic 设计了一个 DLL,它可以自动化 MS Excel 和 MS Word。将 DLL 导入到我们的 VC 工作区后,我们可以使用这两种功能。

自动化 Excel

  1. 打开 Visual Basic。
  2. 选择一个新的 ActiveX DLL 项目。
  3. 默认情况下,您将获得一个类。
  4. 命名项目(例如,M2MSOfficeCOM)。
  5. 命名您的类。我们首先自动化 Excel,所以我给它命名为“clsExcel”。
  6. 从“引用”菜单中,添加对 Microsoft Excel 10 对象库的引用。
  7. 添加以下声明
  8. Private xlApp As Excel.Application
    Private xlBook As Excel.Workbook
    Private xlSheet As Excel.Worksheet
    Private csExcelStatus As String  ‘for getting status
  9. 在类的初始化器中,添加以下代码
  10. Private Sub Class_Initialize()
        csExcelStatus = "Inuitializing COM"
        On Error GoTo ErrorHandler
            Set xlApp = CreateObject("Excel.Application")
            csExcelStatus = "Successfully Initialized COM"
            Exit Sub
    ErrorHandler:
    csExcelStatus = "Failed to Initialize COM"
    End Sub

    在这里,您创建了一个 Excel 对象。

  11. 现在,要添加新的 Excel 工作表,请使用以下代码
  12. Public Function AddNewSheet(SheetName As String)
        Set xlBook = xlApp.Workbooks.Add(xlWBATWorksheet)
        With xlApp
            .ActiveSheet.Name = SheetName
        End With
        
        Set xlSheet = xlApp.ActiveSheet
    End Function

    这里,创建了一个新的工作表,并将其添加到该簿中,并使用传递的 SheetName 参数命名。

  13. 现在,要将文本添加到单元格
  14. Public Function AddTextToCell(RowID As Integer, ColID As Integer, Text As String)
            xlSheet.Cells(RowID, ColID).Value = Text
    End Function

    同样,请检查附件中其余的代码。

自动化 Word

现在,是自动化 Word 的步骤。

  1. 添加另一个类文件并将其命名为“clsWord”。
  2. 添加对“Microsoft Word 10.0 对象库”的引用。
  3. 声明这些
  4. Private wrdApp As Word.Application
    Private csWordStatus As String
  5. 在初始化器中,添加以下代码
  6. Private Sub Class_Initialize()
    On Error GoTo fin
        Set wrdApp = CreateObject("Word.Application")
        wrdApp.Documents.Add
        csWordStatus = "Initializtion Successfull"
    Exit Sub
    
    fin:
      csWordStatus = "Initializtion Failed"
    End Sub
    
    
    
    
  7. The rest of the operations are very simple. Adding text is done as:
    Public Function AddText(Text As String)
    On Error GoTo fin
        wrdApp.Documents.Application.Selection.TypeText Text
        Exit Function
    fin:
        csWordStatus = "Text Entry Failed"
    End Function

此类的功能包括

  1. 添加标题
  2. 添加普通文本
  3. 添加页眉
  4. 添加页脚
  5. 为标题添加阴影
  6. 添加页码

从 VC++ 调用此 DLL

  1. 打开一个基于 VC++ 对话框的应用程序。从“查看类”向导中,单击“从类型库添加类”。浏览并选择已编译的 DLL。将显示两个类,即 clsExcelclsWord。选择两者,然后单击“确定”。
  2. 现在,将添加到项目中的两个新类的头文件添加到您的对话框类中。
  3. 放置两个按钮并将其命名为 ExcelWord
  4. 现在,按如下方式编写 Excel 按钮的代码。演示包括
    1. 创建 Excel 工作表
    2. 将其可见性设置为 true
    3. 添加工作表并对其进行命名
    4. 向 Cell-1 添加值
    5. 更改 Cell-1 的背景颜色
    6. 更改 Column-1 的列宽
    7. 保存文件

    代码如下

    //Initialize Com Object
    CoInitialize(NULL);
    
    //Create Object for Excel
    _clsExcel objXl;
    objXl.CreateDispatch("M2MSOfficeCOM.clsExcel");
    
    //Make Excel Application visible
    objXl.SetVisible(true);
    
    
    CString str="Analysis";
    BSTR bst=str.AllocSysString(); 
    objXl.AddNewSheet(&bst);
    //Add a new Sheet name it "Analysis"
    
    short sRow=1,sCol=1;    //In Cell 1 add string "Analysis"
    objXl.AddTextToCell( &sRow,&sCol,&bst);
    
    long colorID=46;//Chnge bgcolor cell-1
    objXl.BackGroungColorToCell( &sRow,&sCol,&colorID);
    
    str="A1";
    bst=str.AllocSysString(); 
    short sColWidth=20;      //Change column width of Cell -1
    objXl.SetColWidth( &bst,&sColWidth);
    
    str="C:\\Analysis.xls";//save the file name it "Analysis.xls"
    bst=str.AllocSysString(); 
    objXl.Save(&bst); 
    
    objXl.DetachDispatch(); //clean up
    CoUninitialize();
  5. 现在,按如下方式编写 Word 按钮的代码。演示包括
    1. 创建文档
    2. 使其可见
    3. 向其添加页眉
    4. 向其添加带有阴影的标题
    5. 添加普通文本
    6. 添加页脚
    7. 添加页码

    代码如下

    //Initialize Com Object
    CoInitialize(NULL); 
    _clsWord objWrd;
    objWrd.CreateDispatch("M2MSOfficeCOM.clsWord");
    
    //Make word Application visible
    objWrd.SetVisible(true); 
    
    CString str="My chapter-1";
    BSTR bst=str.AllocSysString(); 
    objWrd.AddHeader( &bst);       //Add header to document
    
    long foreColor=8,shading=12;
    objWrd.Heading(&bst,&foreColor,&shading);
    //Add heading with forecolor and bgcolor
    
    //Add a line of text
    str="This can be done in a number of ways especially" + 
        " when yoo are tired of sending many mails";
    bst=str.AllocSysString(); 
    objWrd.AddText(&bst); 
    
    //Add page footer
    str="Ourcompany";
    bst=str.AllocSysString(); 
    objWrd.AddHeader(&bst); 
    
    //add Page number.
    objWrd.AddPageNumber();
    
    //sace the file
    str="c:\\ss";       //file name
    bst=str.AllocSysString();
    
    str="";   //Password if any
    BSTR bstPass=str.AllocSysString();
    
    //save
    objWrd.Save(&bst,&bstPass);
    
    objWrd.DetachDispatch(); //clean up
    CoUninitialize();

希望这会有用…相同的 DLL 也可以与其他 Visual Basic 应用程序一起使用。只需添加对 DLL 的引用。

下载次数

下载包括

  1. VB 中的 DLL 项目
  2. VB 中的测试项目
  3. VC 中的测试项目
© . All rights reserved.