分享

Visual Basic 2017 操作Excel和word【2】持续更新……

 vbavsto 2022-02-02

1.控制台程序创建Excel,并设置状态栏显示“Hello World”文本

复制代码
Module Module1

    Private exitXL As Boolean = False
    Dim WithEvents myExcelApp As Excel.Application 'withEvents 表示定义的变量具有相对应的事件,此处myExcelApp对象具有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()方法可以使窗体处理其他事件,所以窗体能够进行重绘。不至于出现假死现象。
            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
复制代码

运行结果:

2.实时显示60秒的倒计时效果

核心语句:System.Windows.Forms.Application.DoEvents()方法的作用

复制代码
Imports System.Threading
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim i As Integer = 60
        While i >= 0
            TextBox1.Text = i.ToString()
            System.Windows.Forms.Application.DoEvents() '若我们去掉此行代码,则会出现界面卡死的现象,无法实现每隔一秒钟显示当前倒计时的效果。
            i = i - 1
            Thread.Sleep(1000)
        End While
    End Sub
End Class
'*********************************************************************************************************
'*  MSDN针对System.Windows.Forms.Application.DoEvents()的解释:                                          *
'*  当运行Windows窗体时, 会创建新窗体, 然后窗体将等待处理各种事件, 而窗体每次处理事件时,             *
'*  都会处理完与该事件关联的所有代码, 才会去处理其他事件, 这时其他事件将会在队列中等待。               *          
'*  因此, 在处理事件时, 程序并不进行响应, 当然也不会进行窗口重绘操作。                                *
'*  但是System.Windows.Forms.Application.DoEvents()方法可以使窗体处理其他事件,所以窗体能够进行重绘。    *
'*********************************************************************************************************
复制代码

运行结果:

表2.1  显示Word的加载项对象的属性和方法的简表

  属性或方法            

   名    称                     

       返回类型           

属性

Application

Application

属性

Autoload

Boolean

属性

Compiled

Boolean

属性

Creator

Int32

方法

Delete

Void

属性

Index

Int32

属性

Installed

Boolean

属性

Name

String

属性

Parent

Object

属性

Path

String

 清单2.3  完整的WordWiki实现(将文本文档test.txt中的内容以表格的形式存入word中)

复制代码
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 '定义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||

运行结果:

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多