目录
第1章 VSTO开发综述 1
1.1 Office开发方式的选择 ? 1
1.1.1 VBA ? 2
1.1.2 VB6 ? 2
1.1.3 VSTO ? 2
1.1.4 用户自定义函数的开发 ? 3
1.2 VB.NET语言概述 ? 4
1.2.1 VB.NET和 VB6的关系 ? 4
1.2.2 VB.NET和 VB6程序结构的差别 4
1.3 Office界面方案的选择 ? 5
1.3.1 customUI设计 6
1.3.2 工具栏设计 6
1.3.3 任务窗格设计 ? 7
1.4 VSTO开发环境的选择 ? 8
1.5 小结 8
第2章 Visual Studio的安装和使用 ? 9
2.1 Visual Studio 2017的安装 ? 9
2.1.1 安装引导程序的下载 9
2.1.2 系统需求和安装环境确认 ?11
2.1.3 Visual Studio 2007 Professional的安装 11
2.1.4 Visual Studio的启动 15
2.1.5 Visual Studio的修复和卸载 ?15
2.2 项目管理 ?16
2.2.1 创建 VSTO项目 ?17
2.2.2 项目模板 18
2.2.3 创建时保存新项目 19
2.2.4 与项目有关的快捷键 ?20
2.3 Visual Studio的选项设置 ?20
2.3.1 更改默认开发语言 21
2.3.2 更改 Visual Studio界面语言 22
2.3.3 更改代码风格 23
2.4 代码编写技巧 ?24
2.4.1 代码的自动完成 ?24
2.4.2 智能提示 24
2.4.3 查看定义 24
2.4.4 变量的重命名 25
2.4.5 查找和替换 ?26
2.5 最常用的对话框 27
2.6 小结 ?27
第3章 VB.NET语言基础 29
3.1 VB.NET程序的编译和运行 30
3.1.1 使用 vbc.exe编译程序 ?30
3.1.2 第一个 VB.NET程序 ?31
3.1.3 使用 Visual Studio进行 VB.NET编程 ?32
3.2 VB.NET语法基础 34
3.2.1 变量、常量和赋值 35
3.2.2 字符和字符串 36
3.2.3 日期时间类型 36
3.2.4 整数类型 40
3.2.5 布尔和逻辑运算 ?41
3.2.6 新增赋值运算符 ?43
3.2.7 信息输入和结果输出 ?43
3.2.8 输入和输出对话框 45
3.3 类型的判断和转换 ?49
3.3.1 编译选项设置 49
3.3.2 判断数据、变量的类型 50
3.3.3 类型转换 51
3.4 String.Format方法 52
3.4.1 对号入座 52
3.4.2 格式化数字 ?53
3.4.3 格式化日期和时间 55
3.5 ToString方法 56
3.6 数组 ?56
3.6.1 一维数组 57
3.6.2 数组的排序和倒序 60
3.6.3 数组的去重 ?60
3.6.4 数组统计 61
3.6.5 两个数组的集合运算 ?61
3.6.6 一维数组与字符串相互转换 62
3.6.7 二维数组 63
3.6.8 数组维数的判断 ?63
3.7 条件选择 ?64
3.7.1 If...Else结构 64
3.7.2 Select...Case结构 65
3.8 循环结构 ?66
3.8.1 Do...Loop循环 ?66
3.8.2 While循环 67
3.8.3 For循环 ?67
3.8.4 For...Each循环 ?68
3.9 匿名用法 ?69
3.9.1 匿名类 ?69
3.9.2 匿名过程 70
3.9.3 匿名函数 71
3.10 List泛型类 ?71
3.10.1 泛型类与数组的转换 72
3.10.2 数组的过滤?72
3.10.3 泛型类的过滤 ?73
3.11 异常处理 73
3.11.1 异常原因分析 ?74
3.11.2 异常分类处理 ?74
3.12 项目组织 76
3.12.1 项目中添加文件 76
3.12.2 调用 Module中的内容 77
3.12.3 类的创建和使用 78
3.13 项目的引用管理 ?79
3.13.1 外部引用的添加和移除 ?79
3.13.2 使用 Imports指令 81
3.14 小结 ?82
第4章 VB.NET窗体应用程序 83
4.1 窗体 ?83
4.1.1 窗体的创建和显示 83
4.1.2 窗体的添加 ?85
4.1.3 自动创建窗体 87
4.1.4 窗体的隐藏和卸载 88
4.2 控件的属性 89
4.2.1 常规属性设置 89
4.2.2 改变控件的位置和大小 91
4.2.3 通过 Anchor属性设置控件基准点 ?92
4.2.4 通过 Dock属性设置控件的扩展 93
4.2.5 使用 Splitter控件手动调整控件分布 94
4.3 控件的事件 95
4.3.1 使用 WithEvents为控件添加事件 95
4.3.2 使用 AddHandler和RemoveHandler添加和移除事件 ?97
4.3.3 按键事件 100
4.3.4 窗体的 KeyPreview属性 ? 101
4.3.5 鼠标单击事件 102
4.3.6 调用事件过程 103
4.4 专业窗体设计 ? 104
4.4.1 主菜单的设计 104
4.4.2 打开和保存对话框 105
4.4.3 创建右键快捷菜单 107
4.4.4 创建工具栏 ? 109
4.4.5 创建状态栏 ? 110
4.5 自动添加和删除控件 111
4.5.1 自动添加控件 111
4.5.2 自动删除控件 112
4.5.3 自动添加控件数组 112
4.6 小结 ? 114
第5章 VB.NET控件技术 115
5.1 文本编辑类控件 115
5.1.1 TextBox 115
5.1.2 RichTextBox 116
5.1.3 MaskedTextBox 117
5.2 标签类控件 118
5.2.1 Label ? 119
5.2.2 LinkLabel ? 119
5.3 选择类控件 120
5.3.1 CheckBox ? 120
5.3.2 RadioButton 121
5.4 列表条目类控件 121
5.4.1 ComboBox 121
5.4.2 ListBox 122
5.4.3 CheckedListBox 124
5.5 数值调节类控件 125
5.5.1 HScrollBar和 VScrollBar 125
5.5.2 TrackBar ? 126
5.5.3 NumericUpDown 126
5.5.4 DomainUpDown ? 127
5.6 状态提示类控件 128
5.6.1 NotifyIcon ? 128
5.6.2 ProgressBar ? 128
5.6.3 ToolTip 129
5.7 图片类控件 130
5.7.1 PictureBox 130
5.7.2 ImageList 130
5.8 日期时间类控件 132
5.8.1 DateTimePicker 132
5.8.2 Timer ? 133
5.8.3 Stopwatch对象? 134
5.9 其他控件 ? 135
5.9.1 WebBrowser 135
5.9.2 WindowsMediaPlayer ? 136
5.9.3 PropertyGrid 137
5.9.4 FileSystemWatcher 139
5.10 表格控件 DataGridView 141
5.10.1 显示Access数据库中的查询结果 141
5.10.2 显示DataTable对象中的数据 ? 143
5.10.3 处理选中的行 ? 144
5.10.4 导出DataGridView数据到 Excel ? 145
5.11 列表控件 ListView 146
5.11.1 显示ADODB查询 Access的结果 148
5.11.2 处理选中的行 ? 149
5.11.3 导出 ListView数据到 Excel 150
5.12 树状控件 TreeView ? 151
5.12.1 节点的添加和移除 ? 152
5.12.2 处理选中的节点 154
5.12.3 节点的遍历 154
5.13 选项卡控件 TabControl 155
5.13.1 编辑选项卡 155
5.13.2 处理选中的选项卡 ? 156
5.13.3 显示和隐藏选项卡 ? 157
5.13.4 动态增删选项卡 158
5.13.5 遍历选项卡 158
5.14 图表控件 Chart 159
5.14.1 图表的数据源 ? 160
5.14.2 图表的标题 164
5.14.3 图表的图例 165
5.14.4 数据系列 166
5.14.5 图表区域 167
5.15 小结 ? 169
第6章 VB.NET GDI+编程基础 170
6.1 图形对象 ? 170
6.1.1 绘图方法 171
6.1.2 坐标系 ? 171
6.2 结构数组 ? 172
6.2.1 画笔 172
6.2.2 画刷 173
6.2.3 点和点数组 ? 173
6.2.4 矩形框和矩形框数组 ? 173
6.3 绘图实例分析 ? 174
6.3.1 直线、多义线、多边形的绘制 174
6.3.2 矩形的绘制 ? 175
6.3.3 椭圆、弧线、扇形的绘制 ? 176
6.3.4 实心填充图形的绘制 ? 177
6.3.5 文字的绘制 ? 178
6.3.6 利用 Paint事件自动重绘 ? 179
6.4 坐标系变换 180
6.4.1 坐标系平移 ? 180
6.4.2 坐标系旋转 ? 181
6.4.3 坐标系缩放 ? 181
6.5 小结 ? 182
第7章 VB.NET进阶技术 183
7.1 使用 StringBuilder 183
7.1.1 追加字符串 ? 184
7.1.2 插入、移除和替换操作 185
7.2 使用字典 ? 186
7.2.1 利用字典去除重复项 ? 186
7.2.2 利用字典实现查询功能 187
7.2.3 字典的遍历 ? 188
7.3 使用哈希表 189
7.3.1 添加和移除键值对 189
7.3.2 遍历键值对 ? 190
7.4 使用正则表达式 190
7.4.1 验证 191
7.4.2 查找 192
7.4.3 替换 193
7.4.4 分隔 194
7.4.5 正则表达式选项 ? 194
7.4.6 直接使用正则表达式 ? 195
7.4.7 分组 196
7.5 目录和文件操作 197
7.5.1 使用 DriveInfo获取磁盘驱动器
7.5.2 使用 Directory.GetDirectories获取子文件夹 199
7.5.3 使用 Directory.GetFiles获取文件夹下所有文件 200
7.5.4 使用 DirectoryInfo获取文件夹信息 200
7.5.5 使用 FileInfo获取文件信息 ? 200
7.5.6 使用 Path进行路径操作 ? 201
7.5.7 Directory类的方法 201
7.5.8 File类的方法 ? 202
7.6 文本文件的读写 202
7.6.1 读取文件内容 202
7.6.2 写入和追加内容到文本文件 204
7.6.3 使用 StreamWriter和 StreamReader读写文本文件 204
7.7 MD5加密 205
7.7.1 字符串的 MD5加密 206
7.7.2 文件的 MD5计算 ? 206
7.8 GUID的生成 207
7.9 XML文件的读写 ? 208
7.9.1 使用 XMLWriter创建 XML文件 ? 209
7.9.2 使用 XMLReader读取 XML内容 ? 211
7.9.3 使用 XML DOM创建 XML ? 211
7.9.4 使用 XML DOM读取 XML文件 ? 213
7.10 使用 API函数 ? 213
7.10.1 API函数的声明 214
7.10.2 API结构类型的声明 214
7.10.3 API常量的声明 215
7.10.4 句柄、类名和标题 ? 215
7.10.5 修改窗口和控件的文字 ? 216
7.11 发送邮件 218
7.11.1 启用邮箱的 SMTP服务 ? 218
7.11.2 使用 CDO ? 219
7.11.3 使用 Net.Mail ? 221
7.12 读写注册表 ? 223
7.12.1 认识注册表的结构 ? 223
7.12.2 RegistryKey对象? 224
7.12.3 打开子项 225
7.12.4 获取所有键值信息 ? 227
7.12.5 获取所有子项 ? 227
7.12.6 创建子项 229
7.12.7 修改和删除键值 229
7.12.8 删除子项 230
7.13 操作进程 230
7.13.1 创建进程 231
7.13.2 查看进程 232
7.13.3 结束进程 233
7.13.4 进程退出事件 ? 234
7.14 类库项目的创建和调用 234
7.14.1 被 VB.NET程序调用的类库项目 235
7.14.2 被 VBA程序调用的类库项目 239
7.15 小结 ? 243
第8章 VB.NET操作 Office对象 244
8.1 操作 Excel应用程序对象 ? 244
8.1.1 获取正在运行的 Excel 245
8.1.2 创建 Excel应用程序对象 246
8.1.3 调用 Excel工作表函数 ? 247
8.1.4 调用 VBA中的过程和函数 247
8.1.5 使用单元格选择对话框 248
8.2 操作 Excel工作簿 248
8.2.1 工作簿的新建和保存 ? 248
8.2.2 工作簿的打开和关闭 ? 249
8.3 操作 Excel工作表 249
8.3.1 工作表的插入和删除 ? 249
8.3.2 工作表的移动和复制 ? 250
8.4 操作 Excel单元格 250
8.4.1 单元格的遍历 250
8.4.2 单元格接收一维数组 ? 251
8.4.3 单元格接收二维数组 ? 251
8.4.4 数组接收单元格 ? 252
8.5 处理 Excel中的事件 ? 253
8.5.1 使用 WithEvents创建 Excel事件 253
8.5.2 使用 AddHandler和 RemoveHandler处理 Excel事件 254
8.6 操作其他 Office对象 257
8.6.1 自定义 Office工具栏 ? 257
8.6.2 文件选择对话框 ? 259
8.6.3 操作 VBE ? 261
8.7 ADO.NET操作 Access数据库 ? 263
8.7.1 连接数据库 ? 264
8.7.2 增加记录 265
8.7.3 删除记录 267
8.7.4 更新记录 267
8.7.5 返回标量 Select查询 267
8.7.6 遍历结果记录集 ? 267
8.7.7 生成 DataTable对象 268
8.7.8 断开数据库 ? 269
8.8 小结 ? 270
第9章 VSTO外接程序 ? 271
9.1 VSTO外接程序与 COM加载项 ? 271
9.2 开发环境配置 ? 272
9.3 Office主互操作程序集 273
9.3.1 PIA的副本 ? 273
9.3.2 添加其他 Office组件的引用 275
9.4 创建 VSTO外接程序项目 276
9.5 外接程序项目的调试 279
9.6 Visual Studio 2010 Tools for Office Runtime ? 282
9.7 VSTO外接程序项目中的引用和命名空间 ? 283
9.7.1 Excel对象类型 283
9.7.2 自定义 Office界面方面的命名空间 286
9.7.3 Excel的 VSTO对象类型 287
9.7.4 Office对象类型 288
9.8 COM加载项与注册表的关系 289
9.9 访问宿主应用程序的对象 291
9.9.1 调用 VBA中的过程和函数 292
9.9.2 自动断开 COM加载项 ? 292
9.10 VBA调用 VSTO中的过程和函数 292
9.11 外接程序项目允许包含的内容 ? 294
9.12 小结 ? 294
第10章 使用功能区可视化设计器 ? 295
10.1 可视化设计器的基本用法 ? 295
10.1.1 在内置选项卡中定制 296
10.1.2 自定义新选项卡 300
10.1.3 Group中加入 DialogBoxLauncher 302
10.2 可视化设计器的文件构成 ? 303
10.2.1 查看可视化设计器源文件 304
10.2.2 限制控件标题的自动换行 305
10.2.3 可视化设计器的事件文件 306
10.3 可视化设计器对象模型 306
10.3.1 OfficeMenu 307
10.3.2 功能区控件 309
10.3.3 Button 309
10.3.4 通用属性 310
10.3.5 EditBox 310
10.3.6 CheckBox和 ToggleButton ? 311
10.3.7 ComboBox和 DropDown ? 312
10.3.8 Gallery ? 314
10.3.9 Menu、SplitButton和 Separator? 316
10.4 CreateRibbonExtensibilityObject函数 317
10.4.1 选择性加载指定的可视化设计器 ? 318
10.4.2 使用代码自动添加和移除功能区控件 319
10.5 操作运行时的可视化设计器 323
10.5.1 利用 IRibbonUI对象激活选项卡 ? 323
10.5.2 遍历和读写功能区控件 ? 323
10.6 修改可视化设计器的默认模板 ? 324
10.6.1 内置选项卡改为自定义选项卡 ? 325
10.6.2 移除默认的 Group1 326
10.7 小结 ? 326
第11章 使用 XML实现 customUI 327
11.1 Ribbon XML概述 ? 327
11.1.1 可以定制的场所 328
11.1.2 使用方式 ? 328
11.2 VSTO项目中实现 Ribbon XML 329
11.2.1 创建 Ribbon类 ? 329
11.2.2 重写 CreateRibbonExtensibility -Object函数 ? 330
11.3 GetCustomUI函数 330
11.3.1 RibbonID参数 331
11.3.2 回调函数 ? 333
11.3.3 IRibbonUI对象 ? 334
11.3.4 Ribbon XML代码的返回方式 335
11.4 Ribbon XML设计实例分步讲解 ? 336
11.4.1 使用类创建 Ribbon接口 336
11.4.2 回调函数的查询 340
11.4.3 使用 Visual Studio的 XML编辑器 341
11.4.4 使用外部 XML文件 ? 344
11.4.5 动态生成 XML代码 ? 346
11.5 其他控件和回调处理 ? 348
11.5.1 处理以 on开头的回调函数 348
11.5.2 处理以 get开头的回调函数 351
11.6 使用自定义图标 ? 354
11.6.1 loadImage-image 354
11.6.2 getImage ? 358
11.7 小结 363
第12章 自定义任务窗格 ? 364
12.1 创建任务窗格 364
12.2 处理任务窗格的可见性 367
12.3 处理任务窗格的停靠位置 ? 368
12.4 任务窗格操作 Office对象 ? 369
12.5 使用任务窗格的事件 ? 370
12.5.1 任务窗格的可见性同步 customUI控件 370
12.5.2 通过任务窗格的停靠位置改变控件布局 373
12.6 处理新窗口的任务窗格 375
12.7 任务窗格中加入 WPF用户控件 ? 379
12.8 小结 ? 384
第13章 VSTO开发项目实战 385
13.1 Excel外接程序开发:数组公式的自动扩展 386
13.2 Word外接程序开发:表格内容自动汇总工具 389
13.3 PowerPoint外接程序开发:幻灯片导出为图片 391
13.4 Outlook外接程序开发:来信自动执行任务 395
13.5 小结 ? 398
第14章 VSTO外接程序的打包与发布 ? 399
14.1 简单发布 399
14.1.1 从部署文件中获取安装信息 ? 400
14.1.2 写入注册信息 ? 401
14.1.3 删除注册信息 ? 401
14.1.4 使用 VBA实现自动安装和卸载 Office外接程序 401
14.2 使用 Inno Setup制作安装包 404
14.2.1 iss脚本文件的构成 404
14.2.2 制作 iss脚本文件 405
14.2.3 产品的安装和卸载 ? 407
14.2.4 使用 iss模板文件 408
14.3 小结 ? 409
第15章 开发Office文档 ? 410
15.1 创建 Excel工作簿项目? 410
15.2 使用 Office事件 ? 412
15.3 添加 customUI ? 414
15.4 使用文档操作窗格 416
15.5 NamedRange宿主控件 ? 419
15.6 ListObject宿主控件 423
15.7 运行时动态增删宿主控件 ? 428
15.8 VSTO外接程序向工作表增删控件 431
15.9 Office文档的发布 ? 433
15.10 创建 Word文档项目 433
15.11 文档上添加宿主控件 ? 436
15.12 小结 439
第16章 Office 2003的 VSTO开发 440
16.1 开发环境配置 440
16.1.1 Office 2003的安装 ? 440
16.1.2 Visual Studio 2008的安装 441
16.1.3 安装 Office 2003补丁 ? 443
16.2 Office 2003外接程序 ? 444
16.3 Office 2003文档自定义项 ? 446
16.3.1 Excel 2003工作簿的开发 446
16.3.2 Word 2003文档的开发 450
16.4 小结 ? 452
第17章 Excel-DNA开发入门 453
17.1 Excel-DNA入门概述 ? 453
17.1.1 Excel-DNA开发的意义和优势 453
17.1.2 Excel-DNA与 VSTO的比较 454
17.1.3 认识 Excel-DNA开发包 454
17.1.4 Excel-DNA的加载方式 ? 455
17.2 .NET程序的编译 ? 456
17.2.1 编译生成 .exe可执行文件 ? 458
17.2.2 编译生成 .dll动态链接库 459
17.3 使用记事本创建 Excel-DNA项目 ? 459
17.3.1 dna文件的部署 460
17.3.2 dll文件的生成 460
17.3.3 xll文件的拷贝 461
17.3.4 功能测试 461
17.4 Excel-DNA项目的打包 463
17.5 小结 ? 464
第18章 Excel-DNA函数设计 465
18.1 自定义函数的属性修饰 465
18.1.1 更改函数的属性 465
18.1.2 更改函数参数属性 ? 466
18.2 函数的参数类型 ? 468
18.2.1 工作表的一行或者一列作为参数 469
18.2.2 工作表的矩形区域作为参数 470
18.3 函数的返回值类型 471
18.3.1 返回一维数组 ? 471
18.3.2 返回二维数组 ? 472
18.4 小结 ? 473
第19章 使用Visual Studio进行 Excel-DNA开发 ? 474
19.1 创建 Excel-DNA类库项目 475
19.1.1 添加 ExcelDna.Integration引用 475
19.1.2 修改函数代码 ? 477
19.1.3 添加 dna文件 ? 477
19.1.4 生成 dll文件 479
19.2 Excel VBA中调用 Excel-DNA加载项中的函数和过程 481
19.3 Excel-DNA项目的启动和卸载事件 482
19.4 自定义函数和参数的智能感知设计 484
19.4.1 独立加载
19.4.2 引用并打包 ExcelDna.IntelliSense.dll 486
19.5 Excel-DNA项目的调试 490
19.6 Excel-DNA中使用 customUI ? 493
19.6.1 考虑 Excel版本 498
19.6.2 使用自定义图标 500
19.7 Excel-DNA中使用任务窗格 503
19.8 Excel-DNA中使用 Excel事件 ? 506
19.9 Excel-DNA中使用 Office工具栏 ? 510
19.10 使用 NuGet程序包管理器快速创建 Excel-DNA项目 515
19.10.1 工作表标签右键菜单设计 517
19.10.2 排序功能设计 ? 520
19.11 小结 523
第20章 语言差异和转换技巧 524
20.1 VB.NET与 VBA的语言差异 ? 524
20.1.1 My对象 524
20.1.2 Continue和自身赋值语句 526
20.1.3 字符串是对象 ? 526
20.1.4 不能使用默认属性 ? 526
20.1.5 调用过程、函数、对象的方法必须使用圆括号 527
20.1.6 窗体和控件的变化 ? 527
20.1.7 颜色的设置和获取 ? 527
20.2 VB.NET与 C#的语言差异 ? 529
20.2.1 程序结构 529
20.2.2 命名空间的导入方式 530
20.2.3 数据类型关键字 530
20.2.4 变量、常量的声明方式 ? 530
20.2.5 过程、函数的声明和调用方式 530
20.2.6 类型转换方式 ? 531
20.2.7 比较运算符 531
20.2.8 逻辑运算符 531
20.2.9 字符串连接 531
20.2.10 条件选择结构 ? 532
20.2.11 循环结构 ? 532
20.2.12 数组的声明和元素的访问 533
20.2.13 特殊字符串常量的表达 ? 533
20.2.14 异常处理 ? 533
20.2.15 事件的动态增加和移除 ? 534
20.3 VBA代码如何转换为 C# 534
20.3.1 补全 VBA代码 ? 534
20.3.2 VBA改写 C#的注意点 ? 535
20.3.3 Excel VBA转 C#? 537
20.3.4 Outlook VBA转 C# 538
20.4 小结 ? 539