VSTO开发指南(VB版) 第二章 Office解决方案介绍

实例2.1 通过控制台实现对Excel的自动化处理 书本第32页

注:添加两个引用:

第一个:程序集—框架—“System.Windows.Forms 4.0.0.0
第二个:程序集—扩展—“Microsoft.Office.Interop.Excel 14.0.0.0”

程序清单2.1通过控制台程序对Excel自动化处理

Imports Excel = Microsoft.Office.Interop.Excel

Module Module1

  Private exitXL As Boolean = False
  Dim WithEvents myExcelApp As Excel.Application

  Sub Main()

    myExcelApp = New Excel.Application
    myExcelApp.Visible = True
    myExcelApp.StatusBar = "Hello World"
    myExcelApp.Workbooks.Add()

    While exitXL = False
      System.Windows.Forms.Application.DoEvents()
    End While

  End Sub

  Private Sub myExcelApp_SheetBeforeDoubleClick(ByVal sheet _
    As Object, ByVal target As Excel.Range, ByRef cancel _
    As Boolean) Handles myExcelApp.SheetBeforeDoubleClick

    exitXL = True

  End Sub

End Module

实例代码:

Imports Excel = Microsoft.Office.Interop.Excel
Module Module1

    Private exitXL As Boolean = False
    Dim WithEvents myExcelApp As Excel.Application ‘有这句需添加引用“Microsoft.Office.Interop.Excel 14.0.0.0”
    Sub Main()
        myExcelApp = New Excel.Application
        myExcelApp.Visible = True
        myExcelApp.StatusBar = "Hello World"
        myExcelApp.Workbooks.Add()
        While exitXL = False
            System.Windows.Forms.Application.DoEvents() ‘有这句需添加引用“System.Windows.Forms 4.0.0.0”
        End While
    End Sub

    Private Sub myExcelApp_SheetBeforeDoubleClick(ByVal sheet _
      As Object, ByVal target As Excel.Range, ByRef cancel _
      As Boolean) Handles myExcelApp.SheetBeforeDoubleClick
        exitXL = True
    End Sub
End Module
‘**************************************************************************
‘*双击单元格Office控制权会转回到自动化程序事件处理中,
‘*若没有System.Windows.Forms.Application.DoEvents(),控制台窗口将自动关闭,
‘*System.Windows.Forms.Application.DoEvents()方法可以使窗体处理其他事件,
‘*所以窗体能够进行重绘。不至于出现假死现象。
‘**************************************************************************

实例效果:

 实例2.2 wiki文本表示形式 书本第33页

程序清单2.2 表2.1的wiki文本表示形式

||Property or Method||Name||Return Type||
||Property||Application||Application||
||Property||Autoload||Boolean||
||Property||Compiled||Boolean||
||Property||Creator||Int32||
||Method||Delete||Void||
||Property||Index||Int32||
||Property||Installed||Boolean||
||Property||Name||String||
||Property||Parent||Object||
||Property||Path||String||

实例2.3 将文本文件中的wiki形式的文本以表格的形式输出到Word中 书本37页

程序清单2.3 完整的WordWiki实现

Imports System.Collections.Generic
Imports System.Text
Imports System.IO
Imports Office = Microsoft.Office.Core
Imports Word = Microsoft.Office.Interop.Word

Module Module1
  Sub Main(ByVal args As String())

    Dim theApplication As New Word.Application
    theApplication.Visible = True
    Dim theDocument As Word.Document
    theDocument = theApplication.Documents.Add()

    Dim reader As TextReader
    reader = New System.IO.StreamReader(args(0))

    Dim separators(1) As String
    separators(0) = "||"
    Dim rowCount As Integer = 0
    Dim columnCount As Integer = 0

    ‘ Read rows and calculate number of rows and columns
    Dim rowList As New System.Collections.Generic.List(Of String)
    Dim row As String = reader.ReadLine()
    While row IsNot Nothing
      rowCount += 1
      rowList.Add(row)

      ‘ If this is the first row,
      ‘ calculate the number of columns
      If rowCount = 1 Then
        Dim splitHeaderRow As String() = _
          row.Split(separators, StringSplitOptions.None)

        ‘ Ignore the first and last separator
        columnCount = splitHeaderRow.Length - 2
      End If

      row = reader.ReadLine()
    End While

    ‘ Create a table
    Dim range As Word.Range = theDocument.Range()
    Dim table As Word.Table = range.Tables.Add(range, _
      rowCount, columnCount)

    ‘ Populate table
    Dim columnIndex As Integer = 1
    Dim rowIndex As Integer = 1

    For Each r As String In rowList
      Dim splitRow As String() = r.Split(separators, _
        StringSplitOptions.None)

      For columnIndex = 1 To columnCount
        Dim cell As Word.Cell = table.Cell(rowIndex, columnIndex)
        cell.Range.Text = splitRow(columnIndex)
      Next
      rowIndex += 1
    Next

    ‘ Format table
    table.Rows(1).Range.Bold = 1
    table.AutoFitBehavior( _
      Word.WdAutoFitBehavior.wdAutoFitContent)

    ‘ Wait for input from the command line before exiting
    System.Console.WriteLine("Table complete.")
    System.Console.ReadLine()

    ‘ Quit without saving changes
    theApplication.Quit(False)
  End Sub
End Module

实例代码:

Imports System.Collections.Generic ‘默认
Imports System.Text  ‘默认
Imports System.IO ‘默认
Imports Office = Microsoft.Office.Core ‘添加引用“Microsoft Office 14.0 Object Library 2.5
Imports Word = Microsoft.Office.Interop.Word ‘添加引用"Microsoft.Office.Interop.word 14.0.0.0"

Module Module1
    Sub Main(ByVal args As String())

        Dim theApplication As New Word.Application ‘定义word程序
        theApplication.Visible = True ‘使word程序可视
        Dim theDocument As Word.Document ‘定义word文档
        theDocument = theApplication.Documents.Add() ‘为程序添加word文档

        Dim reader As TextReader  ‘定义Txt文本读取器
        reader = New System.IO.StreamReader(My.Application.Info.DirectoryPath & "/test.txt") ‘实例化读取文本接口,My.Application.Info.DirectoryPath指的是本程序的\bin\Debug目录

        Dim separators(1) As String  ‘定义分隔符字符串
        separators(0) = "||"  ‘为分隔符变量赋值
        Dim rowCount As Integer = 0     ‘定义行数
        Dim columnCount As Integer = 0  ‘定义列数

        ‘ 读取行并计算行数和列数
        Dim rowList As New System.Collections.Generic.List(Of String) ‘定义字符串型的列表集对象
        Dim row As String = reader.ReadLine() ‘读取文本存储器中的一行
        While row IsNot Nothing  ‘读取行没有到结尾
            rowCount += 1        ‘读取下一行
            rowList.Add(row)    ‘将所读取的一行文本存储在列表集对象中

            ‘ 如果这是第一行,就计算列数
            If rowCount = 1 Then
                Dim splitHeaderRow As String() = row.Split(separators, StringSplitOptions.None) ‘StringSplitOptions.None,就是分开的数组元素包括空元素
                columnCount = splitHeaderRow.Length - 2   ‘ 忽略第一和最后一个分隔符
            End If
            row = reader.ReadLine()
        End While

        ‘ 在word中创建一个表
        Dim range As Word.Range = theDocument.Range() ‘定义文档单元格
        Dim table As Word.Table = range.Tables.Add(range, rowCount, columnCount) ‘创建一个rowCount行columnCount列的表格

        ‘ 操作word中所创建的表
        Dim columnIndex As Integer = 1
        Dim rowIndex As Integer = 1

        For Each r As String In rowList
            Dim splitRow As String() = r.Split(separators, StringSplitOptions.None)  ‘StringSplitOptions.None,就是分开的数组元素包括空元素
            For columnIndex = 1 To columnCount
                Dim cell As Word.Cell = table.Cell(rowIndex, columnIndex) ‘\bin\Debug目录中test.txt文件中的结尾不能有多余的空行,不然会提示超出索引范围而出现错误
                cell.Range.Text = splitRow(columnIndex)
            Next
            rowIndex += 1
        Next

        ‘ 格式化表格
        table.Rows(1).Range.Bold = 1
        table.AutoFitBehavior(Word.WdAutoFitBehavior.wdAutoFitContent) ‘AutoFitBehavior()方法的作用就是以某种方法调整表格,ord.WdAutoFitBehavior.wdAutoFitContent表示表格根据内容来调节

        ‘ 退出前等待命令输入
        System.Console.WriteLine("Table complete.")
        System.Console.ReadLine()

        ‘ 没有保存更改而退出
        theApplication.Quit(False)
    End Sub
End Module

test.txt文档中的内容

||Property or Method||Name||Return Type||
||Property||Application||Application||
||Property||Autoload||Boolean||
||Property||Compiled||Boolean||
||Property||Creator||Int32||
||Method||Delete||Void||
||Property||Index||Int32||
||Property||Installed||Boolean||
||Property||Name||String||
||Property||Parent||Object||
||Property||Path||String||

实例效果:

原文地址:https://www.cnblogs.com/xiehaofeng/p/12255131.html

时间: 2024-10-18 12:16:41

VSTO开发指南(VB版) 第二章 Office解决方案介绍的相关文章

第二章:MySQL介绍与安装

第二章:MySQL介绍与安装 为什么选择MySQL mysql性能卓越,服务稳定,很少出现异常宕机 mysql开源免费,无版权制约,自主性及使用成本低 产品耦合度,mysql支持多种操作系统,支持多开发语言,特别是php 技术积累,庞大的活跃的社区, 软件体积小,安装简单,易于维护 MySQL数据库分类与版本升级 MySQL官网http://www.mysql.com/,MySQL版本采用双授权政策,和大多数开源产品路线一样,分为社区版和商业版,并且这两个版本又分别分成四个版本依次发布,Alph

Pro ASP.NET Core MVC 第6版 第二章(后半章)

增加动态输出 整个web应用平台的关注点在于构建并显示动态输出内容.在MVC里,控制器负责构建一些数据并将其传给视图.视图负责渲染成HTML. 从控制器向视图传递数据的一种方式是使用ViewBag 对象,它是一个控制器基类的成员.ViewBag是一个动态对象,你可以给他赋值任意属性给视图来渲染用.代码2-5 演示了如何在HomeController里传递简单对象. Listing 2-5. 设置视图数据 using System; using Microsoft.AspNetCore.Mvc;

Pro ASP.NET Core MVC 第6版 第二章(前半章)

目录 第二章 第一个MVC 应用程序 学习一个软件开发框架的最好方法是跳进他的内部并使用它.在本章,你将用ASP.NET Core MVC创建一个简单的数据登录应用.我将它一步一步地展示,以便你能看清楚怎样构建一个MVC 应用程序.为了让事情简单,我跳过了一些技术细节,但是不要担心,如果你是一个MVC的新手,你将会发现许多东西足够提起你的兴趣.因为我用的东西有些没做解释,所以我提供了一些参考以便你可以看到所有的细节的东西. 安装Visual Studio 要想根据本书实践的话,必须安装Visua

《JS权威指南学习总结--第二章词法结构》

第二章词法结构 内容要点: 一.注释 1. //表示单行注释 2. /*这里是一段注释*/ 3.一般编辑器里加注释是:选中要加注释的语句,按 ctrl+/ 二.直接量 所谓直接量,就是程序中直接使用的数据量,比如: 数字.小数.字符串文本.布尔值.正则表达式直接量 三.标识符和保留字 标识符作用:标识符就是一个名字,在JS中,标识符用来对变量和函数进行命名,或者用做JS代码中某些循环语句中的跳转位置的标记. 标识符命名规则: 1.必须以字母.下划线(_)或美元符($)开始. 2.后续的字符可以是

Netty In Action中国版 - 第二章:第一Netty程序

本章介绍 获得Netty4最新的版本号 设置执行环境,以构建和执行netty程序 创建一个基于Netty的server和client 拦截和处理异常 编制和执行Nettyserver和client 本章将简介Netty的核心概念,这个狠心概念就是学习Netty是怎样拦截和处理异常.对于刚開始学习netty的读者.利用netty的异常拦截机制来调试程序问题非常有帮助.本章还会介绍其它一些核心概念.如server和client的启动以及分离通道的处理程序.本章学习一些基础以便后面章节的深入学习. 本

Python核心编程第三版第二章学习笔记

第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of a connection across a computer network,Sockets are often represented internally as simple integers, which identify which connection to use. 套接字是网络通信的

python基础教程(第2版)第二章读后总结;

python第二章 序列是一种数据结构:典型的序列包括:列表,字符串,元组 数据结构是通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合,这些数据元素 可以是数字或者字符,甚至可以是其他数据结构,在python中,最近本的数据结构是序列,序列中的每个元素被 分配一个序号-----即元素的位置,也成为索引,第一个索引是0,第二个则是1,以此类推. 列表和元组的主要区别: 列表可以修改,元组则不能,但他们都统称为序列; 列表的各个元素通过逗号分离,写在方括号中: 元组的各个元素通过逗号分离

C#高级编程第11版 - 第二章

导航 C# 全版本特性一览 全书目录 第二章 Core C 2.1 C#基础 29 2.2 变量 31 2.2.1 初始化变量 31 2.2.2 类型推断 32 2.2.3 变量的作用域 33 2.2.4 常量 34 2.3 预定义数据类型 35 2.3.1 值类型和引用类型 35 2.3.2 .NET 类型 36 2.3.3 预定义的值类型 36 2.3.4 预定义的引用类型 40 2.4 程序流控制 42 2.4.1 条件语句 42 2.4.2 循环 44 2.4.3 跳转语句 47 2.5

VSTO开发指南(VB2013版) 第四章 Excel编程

实例1:处理NewWorkbook和WorkSheet事件的控制台程序 书本第70页 程序清单 4.1 处理NewWorkbook和WorkSheet事件的控制台程序 Imports Excel = Microsoft.Office.Interop.Excel Imports System.Windows.Forms Module Module1 Private WithEvents app As Excel.Application Private WithEvents workbook As