zoukankan      html  css  js  c++  java
  • Visual Basic 2017 操作Excel和word【2】持续更新……

    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指的是本程序的inDebug目录
    
            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) 'inDebug目录中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||
    

    运行结果:

  • 相关阅读:
    七月在线爬虫班学习笔记(五)——scrapy spider的几种爬取方式
    七月在线爬虫班学习笔记(四)——相关库使用与登录问题
    七月在线爬虫班学习笔记(三)——爬虫基础知识与简易爬虫实现
    文件处理工具类
    执行脚本工具类
    LRU
    springboot 整合 memcached
    转载连接
    SpringBoot2.x中redis使用(lettuce)
    Redis 数据类型
  • 原文地址:https://www.cnblogs.com/xiehaofeng/p/7612568.html
Copyright © 2011-2022 走看看