码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-09-29 21:19:50      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:read   blog   pre   更改   index   元素   oid   director   结果   

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||

运行结果:

技术分享

 

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

标签:read   blog   pre   更改   index   元素   oid   director   结果   

原文地址:http://www.cnblogs.com/xiehaofeng/p/7612568.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!