自动化 Microsoft Excel 和 Word





3.00/5 (5投票s)
将 Word 和 Excel 自动化为一个 Visual Basic 中的 DLL,以便可以在 VC++ 中轻松使用。
引言
在许多情况下,需要在 VC++ 应用程序中使用 MS Excel 或 Word。在 VC 中自动化它们很容易,但当它在 VB 中作为 DLL 完成时,只需几行代码,结果就在于它的简单性。在这里,我用 MS Visual Basic 设计了一个 DLL,它可以自动化 MS Excel 和 MS Word。将 DLL 导入到我们的 VC 工作区后,我们可以使用这两种功能。
自动化 Excel
- 打开 Visual Basic。
- 选择一个新的 ActiveX DLL 项目。
- 默认情况下,您将获得一个类。
- 命名项目(例如,M2MSOfficeCOM)。
- 命名您的类。我们首先自动化 Excel,所以我给它命名为“
clsExcel
”。 - 从“引用”菜单中,添加对 Microsoft Excel 10 对象库的引用。
- 添加以下声明
- 在类的初始化器中,添加以下代码
- 现在,要添加新的 Excel 工作表,请使用以下代码
- 现在,要将文本添加到单元格
Private xlApp As Excel.Application
Private xlBook As Excel.Workbook
Private xlSheet As Excel.Worksheet
Private csExcelStatus As String ‘for getting status
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 对象。
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
参数命名。
Public Function AddTextToCell(RowID As Integer, ColID As Integer, Text As String)
xlSheet.Cells(RowID, ColID).Value = Text
End Function
同样,请检查附件中其余的代码。
自动化 Word
现在,是自动化 Word 的步骤。
- 添加另一个类文件并将其命名为“
clsWord
”。 - 添加对“Microsoft Word 10.0 对象库”的引用。
- 声明这些
- 在初始化器中,添加以下代码
- 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
Private wrdApp As Word.Application
Private csWordStatus As String
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
此类的功能包括
- 添加标题
- 添加普通文本
- 添加页眉
- 添加页脚
- 为标题添加阴影
- 添加页码
从 VC++ 调用此 DLL
- 打开一个基于 VC++ 对话框的应用程序。从“查看类”向导中,单击“从类型库添加类”。浏览并选择已编译的 DLL。将显示两个类,即
clsExcel
和clsWord
。选择两者,然后单击“确定”。 - 现在,将添加到项目中的两个新类的头文件添加到您的对话框类中。
- 放置两个按钮并将其命名为
Excel
和Word
。 - 现在,按如下方式编写 Excel 按钮的代码。演示包括
- 创建 Excel 工作表
- 将其可见性设置为 true
- 添加工作表并对其进行命名
- 向 Cell-1 添加值
- 更改 Cell-1 的背景颜色
- 更改 Column-1 的列宽
- 保存文件
- 现在,按如下方式编写 Word 按钮的代码。演示包括
- 创建文档
- 使其可见
- 向其添加页眉
- 向其添加带有阴影的标题
- 添加普通文本
- 添加页脚
- 添加页码
代码如下
//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();
代码如下
//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 的引用。
下载次数
下载包括
- VB 中的 DLL 项目
- VB 中的测试项目
- VC 中的测试项目