Visual Basic 2017 操作Excel和word【1】持续更新……
我坚持在VB的路上走到黑…………
清单1.1 从应用程序对象导航到Excel中的工作表
Dim myWorkbooks As Excel.Workbooks = app.Workbooks
Dim myWorkbook As Excel.Workbook = myWorkbooks.Item()
Dim myWorksheets As Excel.Sheets = myWorkbook.Worksheets
Dim myWorksheet As Excel.Worksheet
myWorksheet = CType(myWorksheets.Item(), Excel.Worksheet)
如果代码不需要在变量中缓存每个对象模型对象,但只需要获取一个Worksheet对象,则编写此代码的更有效的方法如下所示:
Dim myWorksheet As Excel.Worksheet
myWorksheet = CType(app.Workbooks.Item().Worksheets.Item(), Excel.Worksheet)
活代码:第一步:创建visual basic 2017的窗体应用程序(运行环境:win 10+visual studio 2017+office 2010)
第二步:添加引用:COM的 "Microsoft Office 14.0 Object Library 2.5"(指的是Office 2010)和“程序集”的"扩展"中的"Microsoft.office.Interop.Excel 14.0.0.0"
第三步:代码
Imports Excel = Microsoft.Office.Interop.Excel
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim app As Excel.Application = New Excel.Application
Dim myWorkbook As Excel.Workbook
Dim myWorksheet As Excel.Worksheet
app.Visible = True
myWorkbook = app.Workbooks.Add()
myWorksheet = CType(myWorkbook.Sheets.Add(), Excel.Worksheet)
myWorksheet.Cells(, ) = "这是A1"
End Sub
End Class
第四步:运行结果
清单1.2 使用整数或String作为Count属性和Item属性索引遍历工作表集合
Dim myWorkbooks As Excel.Workbooks = app.Workbooks Dim workbookCount As Integer = myWorkbooks.Count
For i As Integer = To workbookCount
' Get the workbook by its integer index
Dim myWorkbook As Excel.Workbook = myWorkbooks.Item(i) ' Get the workbook by its string index
Dim workbookName As String = myWorkbook.Name Dim myWorkbook2 As Excel.Workbook = myWorkbooks.Item(workbookName)
MsgBox(String.Format("Workbook {0}", myWorkbook2.Name))
Next
活代码:
活代码:第一步:创建visual basic 2017的窗体应用程序(运行环境:win 10+visual studio 2017+office 2010)
第二步:添加引用:COM的 "Microsoft Office 14.0 Object Library 2.5"(指的是Office 2010)和“程序集”的"扩展"中的"Microsoft.office.Interop.Excel 14.0.0.0"
第三步:代码
Imports Excel = Microsoft.Office.Interop.Excel
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim app As Excel.Application = New Excel.Application
Dim myWorkbook As Excel.Workbook
Dim myWorksheet As Excel.Worksheet
app.Visible = True
myWorkbook = app.Workbooks.Add()
myWorksheet = CType(myWorkbook.Sheets.Add(), Excel.Worksheet)
myWorksheet.Cells(, ) = "这是A1" Dim worksheetCount As Integer = myWorkbook.Worksheets.Count
For i As Integer = To worksheetCount
Dim str As String
str = myWorkbook.Worksheets.Item(i).Name '以整数作为索引
MessageBox.Show(str, "获取工作表名称")
Next For i As Integer = To worksheetCount
Dim str As String
str = myWorkbook.Worksheets.Item("sheet" & i).Name
MessageBox.Show(str, "获取工作表名称") '以字符串作为索引
Next End Sub
End Class
第四步:运行结果
拓展假如要编辑工作表sheet2中D3单元格,并填入“我是丑丑”,该如何实现呢
Imports Excel = Microsoft.Office.Interop.Excel
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim app As Excel.Application = New Excel.Application
Dim myWorkbook As Excel.Workbook
Dim myWorksheet As Excel.Worksheet
app.Visible = True
myWorkbook = app.Workbooks.Add()
'myWorksheet = CType(myWorkbook.Sheets.Add(, , 3,), Excel.Worksheet) '第3个参数表示添加多少工作表,这里添加3个,
Dim C4_sheet As Excel.Worksheet = myWorkbook.Worksheets.Item("sheet2") '工作表的索引从0开始,
C4_sheet.Cells(, ) = "我是丑丑" 'Cells(行,列),也就是D3单元格
End Sub
End Class
运行结果:
清单1.3 使用For Each结构遍历工作簿集合
Dim myWorkbooks As Excel.Workbooks = app.Workbooks For Each workbook As Excel.Workbook In myWorkbooks
MsgBox(String.Format("Workbook {0}", workbook.Name))
Next
活代码:略
清单1.4 当删除对象时使用辅助集合
Dim myWorkbook As Excel.Workbook = app.ActiveWorkbook
Dim myCollection As New Collections.Generic.List(Of Excel.Name) For Each name As Excel.Name In myWorkbook.Names
myCollection.Add(name)
Next For Each name As Excel.Name In myCollection
name.Delete()
Next
活代码:第一步:创建visual basic 2017的窗体应用程序(运行环境:win 10+visual studio 2017+office 2010)
第二步:添加引用:COM的 "Microsoft Office 14.0 Object Library 2.5"(指的是Office 2010)和“程序集”的"扩展"中的"Microsoft.office.Interop.Excel 14.0.0.0"
第三步:代码
Imports Excel = Microsoft.Office.Interop.Excel
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim app As Excel.Application = New Excel.Application
Dim myWorkbook As Excel.Workbook = app.ActiveWorkbook
app.Visible = True
myWorkbook = app.Workbooks.Add("E:\工作簿1")
Dim myCollection As New Collections.Generic.List(Of Excel.Range)
For Each Name As Excel.Range In myWorkbook.Worksheets("Sheet1").Range("A1:D5") '由于是删除,所以下面的行会自动向上缩进
myCollection.Add(Name)
Next
For Each name As Excel.Range In myCollection
name.Delete() '由于是删除,所以下面的行会自动向上缩进
Next
End Sub
End Class
运行结果:
原图:
表1.2 从Word的应用程序对象中选择的属性,方法和事件
名称 |
作用 |
---|---|
属性 |
|
ActiveDocument |
返回一个用户正在编辑的word文档对象 |
ActivePrinter |
获取并设置默认打印机 |
Caption |
为word应用程序设置标题,默认被设置为 "Microsoft Word" |
Documents |
返回一个打开的word文档集 |
方法 |
|
Activate |
将word显示在最前,并且作为活动窗口 |
NewWindow |
创建一个新的Word窗口来显示活动窗口,并返回一个新的窗口模型对象 。 |
Quit |
关闭word程序 |
事件 |
|
DocumentBeforeClose |
这是一个在文档关闭之前发生的事件。如果代码句柄将参数 Cancel 设置为true, 文档将不会关闭 |
DocumentOpen |
打开文档时引发的事件。 要打开的文档的Document对象作为参数传递给事件。 |
WindowActivate |
当用户激活Word窗口时,通常通过单击非活动窗口,从而使其处于活动状态,引发事件。 正在激活的文档的Document对象作为参数传递给事件以及激活的窗口的Window对象(因为两个窗口可能显示相同的文档)。 |
清单1.5 返回值类型的属性:Word应用程序对象上的布尔CapsLock属性
If app.CapsLock Then
MsgBox("CapsLock is on")
Else
MsgBox("CapsLock is off")
End If
清单1.6 返回枚举的属性:Word应用程序对象上的WindowState属性
Select Case app.WindowState
Case Word.WdWindowState.wdWindowStateMaximize
MsgBox("Maximized")
Case Word.WdWindowState.wdWindowStateMinimize
MsgBox("Minimized")
Case Word.WdWindowState.wdWindowStateNormal
MsgBox("Normal")
End Select
清单1.7 返回另一个对象模型对象的属性:Word应用程序对象上的ActiveDocument属性
Dim myDocument As Word.Document = app.ActiveDocument
MsgBox(myDocument.Name)
列表1.8 可能抛出异常的属性:Word应用程序对象上的ActiveDocument属性
Dim myDocument As Word.Document
Try
myDocument = app.ActiveDocument
MsgBox(myDocument.Name)
Catch ex As Exception
MsgBox(String.Format("No active document: {0}", ex.Message)
End Try
清单1.9 可以返回的属性:Excel应用程序对象上的ActiveWorkbook属
Dim myWorkbook As Excel.Workbook = app.ActiveWorkbook If myWorkbook Is Nothing Then
MsgBox("No active workbook")
Else
MsgBox(myWorkbook.Name)
End If
清单1.10 枚举参数并返回对象模型对象的参数化属性:Word应用程序对象上的FileDialog属性
Dim dialog As Office.FileDialog
dialog = app.FileDialog(Office.MsoFileDialogType. _
msoFileDialogFilePicker)
dialog.Show()
清单1.11 具有可选参数的参数化属性:Excel应用程序对象上的范围属性
' 删除第二个可选参数
Dim myRange As Excel.Range = app.Range("A1") ' 指定第二个可选参数
Dim myRange2 As Excel.Range = app.Range("A1", "B2")
默认参数化属性
Dim myWorksheet As Excel.Worksheet
myWorksheet = CType(app.Workbooks.Item().Worksheets.Item(), Excel.Worksheet) '重写上面的代码 Dim myWorksheet As Excel.Worksheet
myWorksheet = CType(app.Workbooks().Worksheets(), Excel.Worksheet)
清单1.12 无参数无返回类型的方法:Word应用对象的激活方法
MsgBox("Activating the Word window.") app.Activate()
清单1.13 具有参数和无返回类型的方法:Word应用程序对象上的ChangeFileOpenDirectory方法
app.ChangeFileOpenDirectory("c:\temp")
MsgBox("Will open out of temp for this session.")
清单1.14 无参数和返回类型的方法:Word应用程序对象的DefaultWebOptions方法
Dim options As Word.DefaultWebOptions = app.DefaultWebOptions()
MsgBox(String.Format("Pixels per inch is {0}.", options.PixelsPerInch))
清单1.15 具有参数和返回类型的方法:Word应用程序对象上的CentimetersToPoints方法
Dim centimeters As Single = 15.0
Dim points As Single = app.CentimetersToPoints(centimeters)
MsgBox(String.Format("{0} centimeters is {1} points.", centimeters, points))
'将计量单位从厘米转换为磅。1磅=0.035厘米
'将Excel表的左边距设置为5厘米
Worksheets("Sheet1").PageSetup.LeftMargin = Application.CentimetersToPoints()
清单1.16 具有可选参数和返回类型的方法:Excel应用程序对象上的CheckSpelling方法
Dim phrase1 As String = "Thes is spelled correctly."
Dim phrase2 As String = "This is spelled correctly AFAIK." Dim isCorrect1 As Boolean = app.CheckSpelling(phrase1)
Dim isCorrect2 As Boolean = app.CheckSpelling(phrase2, , True)
'用法
expression.CheckSpelling(Word, CustomDictionary, IgnoreUppercase)
'Word String 类型(仅与 Application对象一起使用),必需。要检查的单词。
'CustomDictionary Variant 类型,可选。用于表示自定义词典文件名的字符串,如果在主词典中找不到单词,则会到此词典中查找。如果忽略此参数,则将使用当前指定词典。
'IgnoreUppercase Variant 类型,可选。如果为 True,则 Microsoft Excel 忽略那些所有字母都是大写的单词。如果为 False 则 Microsoft Excel 检查那些所有字母都是大写的单词。如果省略该参数,则使用当前设置。
表1.3 Excel应用对象引发的事件
事件的名称 |
什么时候它被激活 |
---|---|
NewWorkbook |
当一个工作簿被创建是 |
SheetActivate |
当某个工作表被激活时 |
SheetBeforeDoubleClick |
当某个工作表被双击时 |
SheetBeforeRightClick |
当某个工作表被右击时 |
SheetCalculate |
在某个工作表被重新计算后 |
SheetChange |
当某个工作表单元格被用户改变时 |
SheetDeactivate |
当某个工作表被停用时 |
SheetFollowHyperlink |
当某个工作表中超链接被单击时 |
SheetPivotTableUpdate |
在数据透视表被更新后 |
SheetSelectionChange |
当工作表上的选择更改时 |
WindowActivate |
当工作表窗口被激活时 |
WindowDeactivate |
当工作表窗口被停用时 |
WindowResize |
当工作表窗口调整大小时 |
WorkbookActivate |
当工作簿被激活时 |
WorkbookAddinInstall |
当工作簿作为加载项安装时 |
WorkbookAddinUninstall |
当工作簿作为加载项卸载时 |
WorkbookAfterXmlExport |
在工作簿数据作为XML文件导出后 |
WorkbookAfterXmlImport |
在工作簿中导入XML文件后 |
WorkbookBeforeClose |
工作簿关闭前 |
WorkbookBeforePrint |
在打印工作簿前 |
WorkbookBeforeSave |
在工作簿保存前 |
WorkbookBeforeXmlExport |
工作簿数据作为XML文件导出前 |
WorkbookBeforeXmlImport |
工作簿导入XML文件前 |
WorkbookDeactivate |
当工作簿停用时 |
WorkbookNewSheet |
当在工作簿中创建工作表时 |
WorkbookOpen |
当工作簿打开时 |
WorkbookPivotTableCloseConnection |
当透视报表连接关闭时 |
WorkbookPivotTableOpenConnection |
当透视报表连接打开时 |
WorkbookSync |
当作为文档工作区的一部分的工作簿与服务器上的副本同步时 |
申明事件处理
Public WithEvents app As Excel.Application
'WithEvents表明Excel.Aplication的实例对象是一个可以引发事件的对象
Event WindowActivate(ByVal Wb As Excel.Workbook, ByVal Wn As Excel.Window)
Private Sub app_WindowActivate(ByVal Wb As Excel.Workbook, ByVal Wn As Excel.Window) Handles app.WindowActivate
MsgBox("The window " & Wn.Caption & " was just activated.")
End Sub
清单1.17 处理Excel应用程序对象的WindowActivate事件的VSTO自定义
Public Class Sheet1 Public WithEvents app As Excel.Application Private Sub app_WindowActivate(ByVal Wb As Excel.Workbook, ByVal Wn As Excel.Window) Handles app.WindowActivate
MsgBox("The window " & Wn.Caption & " was just activated.")
End Sub Private Sub Sheet1_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
app = Me.Application
End Sub End Class
高级主题:动态处理事件
AddHandler app.WindowActivate, AddressOf Me.MyWindowActivateHandler
'AddHandler和RemoveHandler语句将传递要处理的事件以及将处理事件的事件处理程序方法。 当指定事件处理程序方法时,使用AddressOf关键字。 以下代码使用AddHandler动态添加事件处理程序MyWindowActivateHandler来处理应用程序对象的WindowActivate事件:
RemoveHandler app.WindowActivate, AddressOf Me.MyWindowActivateHandler
'删除事件处理方法
Private Sub app_WindowActivate(ByVal Wb As Excel.Workbook, ByVal Wn As Excel.Window)
MsgBox("The window " & Wn.Caption & " was just activated.")
End Sub
'与动态事件处理程序一样,事件处理程序签名必须与事件的预期签名相匹配。 但是,当您动态处理事件时,Handles关键字不会用于事件处理程序签名。 因此,WindowActivate事件的动态事件处理程序看起来像声明性事件处理程序,但省略了Handles子句:
清单1.18 动态添加和删除Excel应用程序对象的WindowActivate事件的事件处理程序的VSTO自定义
Public Class Sheet1 Public app As Excel.Application Private Sub MyWindowActivateHandler(ByVal Wb As Excel.Workbook, ByVal Wn As Excel.Window)
MsgBox("The window " & Wn.Caption & " was just activated.")
RemoveHandler app.WindowActivate, AddressOf Me.MyWindowActivateHandler
End Sub Private Sub Sheet1_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
app = Me.Application
AddHandler app.WindowActivate, AddressOf Me.MyWindowActivateHandler
End Sub End Class
'本示例使工作簿窗口激活时最大化。
Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)
Wn.WindowState = xlMaximized
End Sub
清单1.19 一个无法处理CommandBarButton单击事件的类
Imports Excel = Microsoft.Office.Interop.Excel
Imports Office = Microsoft.Office.Core Class SampleListener
Private app As Excel.Application Public Sub New(ByVal application As Excel.Application)
app = application
End Sub ' 这里的作用是关联Click事件,但会失败,因为btn没有放在一个更永久的变量中。
Public Sub ConnectEvents()
Dim bar As Office.CommandBar = app.CommandBars("Standard")
Dim btn As Office.CommandBarButton = bar.Controls.Add()
If btn IsNot Nothing Then
btn.Caption = "My Button"
btn.Tag = "SampleListener.btn"
AddHandler btn.Click, AddressOf Me.btn_Click
End If
End Sub ' Click事件永远不会到达此处理程序.
Public Sub btn_Click(ByVal ctrl As Office.CommandBarButton, ByRef cancelDefault As Boolean)
MessageBox.Show("Button was clicked")
End Sub End Class
清单1.20 一个无法处理Outlook检查器对象的NewInspectorEvent的类
Imports Outlook = Microsoft.Office.Interop.Outlook Class SampleListener
Private app As Outlook.Application Public Sub New(ByVal application As Outlook.Application)
app = application
End Sub ' This will appear to connect to the NewInspector event, but
' will fail because Inspectors is not put in a more permanent
' variable.
Public Sub ConnectEvents()
AddHandler app.Inspectors.NewInspector, _
AddressOf Me.MyNewInspectorHandler
End Sub ' The NewInspector event will never reach this handler.
Public Sub MyNewInspectorHandler(ByVal inspector As Outlook
.Inspector)
MessageBox.Show("New inspector.")
End Sub
End Class
清单1.21 一个类成功处理CommandBarButton单击事件,因为它将CommandBarButton对象存储在一个类成员变量中
Imports Excel = Microsoft.Office.Interop.Excel
Imports Office = Microsoft.Office.Core Class SampleListener
Private app As Excel.Application
Private myBtn As Office.CommandBarButton Public Sub New(ByVal application As Excel.Application)
app = application
End Sub Public Sub ConnectEvents()
Dim bar As Office.CommandBar = app.CommandBars("Standard")
myBtn = bar.Controls.Add()
If myBtn IsNot Nothing Then
myBtn.Caption = "My Button"
myBtn.Tag = "SampleListener.btn"
AddHandler myBtn.Click, AddressOf Me.myBtn_Click
End If
End Sub Public Sub myBtn_Click(ByVal ctrl As Office.CommandBarButton, ByRef cancelDefault As Boolean) MessageBox.Show("Button was clicked")
End Sub End Class
清单1.22 一个类成功处理Outlook检查器对象的NewInspector事件,因为它将检查器对象存储在一个类成员变量中
Imports Outlook = Microsoft.Office.Interop.Outlook Class SampleListener
Private app As Outlook.Application
Private myInspectors As Outlook.Inspectors Public Sub New(ByVal application As Outlook.Application)
app = application
End Sub Public Sub ConnectEvents()
myInspectors = app.Inspectors
AddHandler myInspectors.NewInspector, _
AddressOf Me.MyNewInspectorHandler
End Sub Public Sub MyNewInspectorHandler( _
ByVal inspector As Outlook.Inspector)
MessageBox.Show("New inspector.")
End Sub
End Class
Visual Basic 2017 操作Excel和word【1】持续更新……的更多相关文章
- Visual Basic 2017 操作Excel和word【2】持续更新……
1.控制台程序创建Excel,并设置状态栏显示“Hello World”文本 Module Module1 Private exitXL As Boolean = False Dim WithEven ...
- 针对每种Windows Server 操作Excel、Word等Office组件遇到“ComException"、”80070005“等COM错误的解决方案大汇总
以下所有Excel错误的解决方案,同样适用于Word.PowerPoint等Office产品. 以下解决方案中,如果出现"安装Excel组件",是适用于遇到Excel错误的.如果是 ...
- Java操作Excel和Word
这是一个URL它提供了Java项目所推荐的处理此项目所用的类库 http://www.oschina.net/project/tag/258/excel-tools?company=0&sor ...
- POI(java 操作excel,word等)编程
一.下载所需jar包 下载地址:http://poi.apache.org/download.html http://download.csdn.net/detail/likai22/534250 二 ...
- Windows操作技巧 之二(持续更新)
定时自动关机 shutdown -s -t 3600 shutdown [/i | /l | /s | /r | /g | /a | /p | /h | /e] [/f /m \\computer] ...
- Windows 操作小技巧 之一(持续更新)
1.图片批量旋转 通常携带单反去景点排了大量照片回来处理图片时都会遇到很多横竖杂乱排序的图片难以处理的情形.现提供如下技巧进行处理. 1).在文件夹中添加"方向"的排列或分组选项: ...
- MYSQL操作的一些知识点,持续更新中····
基本概念——库 1.数据库服务器:库——>表——>行/列 2.cmd下链接: mysql – uroot –proot 3.创建库:create database php; 3.看数据库 ...
- Visual Basic 2012 借助DataGridView控件将SQL server2012 数据导入到Excel 2010
摘 要: SQL Server 2012 数据和Excel 2010之间的连接和数据的传输,本篇文章主要针对的是SQL Server 2012 数据导入到Excel 2010文件中.Excel软件对 ...
- VSTO:使用C#开发Excel、Word【10】
第二部分:.NET中的Office编程本书前两章介绍了Office对象模型和Office PIA. 您还看到如何使用Visual Studio使用VSTO的功能构建文档中的控制台应用程序,加载项和代码 ...
随机推荐
- python_函数式编程
函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是编程范式).在面向过程编程中,我们见到过函数(function):在面向对象编程中,我们见过对象(object).函数和对象的根本目的是以 ...
- Vue系列之 => webpack基础使用
webpack安装方式 1,运行 npm i webpack -g 全局安装. 2,在项目根目录中运行 npm i webpack --save-dev 安装到项目依赖中 项目目录 进入src运行, ...
- 第十节 JS运动中级
链式运动框架. 回调函数 运动停止时,执行函数 运动停止时,开始下一次运动 <!DOCTYPE html> <html lang="en"> <hea ...
- 1、Kafka介绍
1.Kafka介绍 1)在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算. 2)Kafka是一个分布式消息队列. 3)Kafka对消息保存时根据Topic进行归类, ...
- Python paramiko 修改源码实现用户命令抓取
paramiko 源码修改 paramiko主要用来实现ssh客户端.服务端链接,上一节我们说到了堡垒机,堡垒机内有一个需求是“用户行为审计”,在这里我们就可以通过修改paramiko内文件的源码来实 ...
- CentOS 6.5安装squashfs-tools
在sourceforge.net网站下载源码包 需要安装的依赖项有zlib-devel.xz-devel.x86_64 修改Makefile文件以支持xz压缩的squashfs文件,去掉Makefil ...
- JS设计模式(12)装饰者模式
什么是装饰者模式? 定义:动态地给一个对象添加一些额外的职责.就增加功能来说,装饰器模式相比生成子类更为灵活. 主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且 ...
- Android创建自定义的布局和控件
Android的自带布局有framelayout.linerlayout.relativelayout,外加两个百分比布局,但是这些无法灵活的满足我们的需要,所以我们要自己自定义并引入自己的布局.首先 ...
- vue 文件目录结构详解
vue 文件目录结构详解 本篇文章主要介绍了vue 文件目录结构详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 项目简介 基于 vue.js 的前端开发环境,用于前后 ...
- GIT 私有仓库 github项目提交失败 master -> master (non-fast-forward)
https://blog.csdn.net/fightingforcv/article/details/52073182 https://blog.csdn.net/u014135752/articl ...