Visual Basic .NET处理Excle表格全接触

visual

 Visual Basic .Net处理Excel表格机理和处理Word文档一样,也是通过互操作,引入COM组件来实现的,所以前提条件是运行本文中介绍的程序的计算机必须安装Office 2000中的Excel软件。如果计算机安装的Office 2000,那么这个COM组件就是"Microsoft Excel 9.0 Object Library"。一旦引入此COM组件,Visual Basic .Net就可以向手工编辑Excel表格一样来处理它。下面就来介绍Visual Basic .Net处理Excel表格的各种典型操作,如创建表格、编辑表格等,以及从数据库中向Excel表格导入数据的实现方法。

  一.本文程序设计、调试和运行的环境

  (1).微软公司视窗2000服务器版。

  (2).Visual Studio .Net2003企业构建版,.Net FrameWork SDK版本号4322。

  (3).Office 2000套件。

  二.Visual Basic .Net处理Excel表格的基本操作及其实现方法:

  在Visual Basic .Net处理Excel表格之前,首先还是要引入COM组件,具体的实现步骤可参阅本文第三节中第八步。在引入的"Microsoft Excel 9.0 Object Library"COM组件后。下面介绍在Visual Basic .Net中处理Excel表格的典型操作的实现方法:

  1. 创建Excel.exe进程,显示Excel界面,创建Excel表格:

  成功引入COM组件后,通过下列语句就可以创建Excel.exe进程了,Visual Basic .Net就是通过对此进程的处理来操作Excel表格:

Private AppExcel As Excel.Application = New Excel.Application

  当执行完此语句后,通过任务管理器查看进程就发现多出Excel.exe进程,当此时Excel程序的运行界面并没有显示,在此语句后加入以下代码,Excel的运行界面就显示出来了:

AppExcel.Visible = True

  Excel运行界面虽然显示,但其中并没有表格,下列代码是在Excel程序中创建一个新表格:

AppExcel.Application.Workbooks.Add ( True )

  2. Visual Basic .Net处理Excel表格:

  上文以及说过,Visual Basic .Net处理Excel表格是通过创建的Excel.exe进程来实现的。通过任务管理器看到Excel.exe进程对应上述代码中的AppExcel。以下代码就是设定Excel表格的(2,3)单元的数值为"Temp":

AppExcel.Cells ( 2 , 3 ) = " Temp "

  3. 关闭Excel表格,销毁Excel.exe进程:

  当编辑完Excel表格后,通过下列语句就可以关闭Excel表格,并销毁Excel.exe进程:

AppExcel.Application.Workbooks.Close ( )
'关闭Excel表格
AppExcel.Quit ( )
'销毁Excel.exe进程

  以上就是Visual Basic .Net一些基本的操作方法,其他处理Excel表格的方法还有许多,但都和上面的这些方法很类似,由于篇幅所限就不一一介绍了,相信再掌握上面这些方法后,掌握它们也不会很困难。下面就来介绍一个比较实用的示例,这个示例的实现过程主要是通过上面介绍的这些基本的操作方法,此示例的功能是把Sql Server数据库中数据表的内容导入到Excel表格中。

  三.Visual Basic .Net导入数据库数据到Excel表格:

  通过此示例可以方便的把Sql Server数据库中数据表导入到Excel表格中,同样对于其他类型的数据库,如果也需要导入数据到Excel表格,只需要修改此示例中数据连接部分的代码就可以了。以下是在Visual Basic .Net中导入Sql Server数据库到Excel表格的具体的实现步骤:

  1. 启动Visual Studio .Net。

  2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。

  3. 将【项目类型】设置为【Visual Basic项目】。

  4. 将【模板】设置为【Windows应用程序】。

  5. 在【名称】文本框中输入【Visual Basic .Net导入数据库数据到Excel表格】。

  6. 在【位置】的文本框中输入【E:\VS.NET项目】,然后单击【确定】按钮,这样在"E:\VS.NET项目"目录中就产生了名称为"Visual Basic .Net中操作Word文档"的文件夹,并在里面创建了名称为"Visual Basic .Net导入数据库数据到Excel表格"的项目文件。

  7. 把Visual Studio .Net的当前窗口切换到【Form1.vb(设计)】窗口,并从【工具箱】中的【Windows窗体组件】选项卡中往Form1窗体中拖入下列组件,并执行相应的操作:

  五个Label组件。
  五个TextBox组件。

  一个Button组件,用以实现导入Sql Server数据库到Excel表格,并在这个Button组件拖入Form1的设计窗体后,双击它们,则Visual Stuido .Net会在Form1.vb文件分别产生这组件的Click事件对应的处理代码。

  8. 选中【解决方案管理器】,右击【引用】,在弹出的菜单中选中【添加引用】后,按照图01所示,加入要引用的COM组件"Microsoft Excel 9.0 Object Library":


图01:【Visual Basic .Net导入数据库数据到Excel表格】项目【添加引用】对话框

  9. 把Visual Studio .Net的当前窗口切换到Form1.vb的代码编辑窗口,并在Form1.vb文件首部添加下列代码,下列代码是导入下面使用的数据类所在的命名空间:

Imports System.Data.OleDb

  10. 用下列代码替换Form1.vb中的InitializeComponent过程对应的代码,下列代码作用是初始化窗体中加入的组件:

Private Sub InitializeComponent ( )
Me.Label1 = New System.Windows.Forms.Label
Me.Label2 = New System.Windows.Forms.Label
Me.Label3 = New System.Windows.Forms.Label
Me.Label4 = New System.Windows.Forms.Label
Me.Label5 = New System.Windows.Forms.Label
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.TextBox2 = New System.Windows.Forms.TextBox
Me.TextBox3 = New System.Windows.Forms.TextBox
Me.TextBox5 = New System.Windows.Forms.TextBox
Me.Button1 = New System.Windows.Forms.Button
Me.TextBox4 = New System.Windows.Forms.TextBox
Me.SuspendLayout ( )
Me.Label1.Location = New System.Drawing.Point ( 40 , 28 )
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size ( 114 , 23 )
Me.Label1.TabIndex = 0
Me.Label1.Text = "数据库服务器名:"
Me.Label2.Location = New System.Drawing.Point ( 64 , 59 )
Me.Label2.Name = "Label2"
Me.Label2.TabIndex = 1
Me.Label2.Text = "数据库名称:"
Me.Label3.Location = New System.Drawing.Point ( 64 , 90 )
Me.Label3.Name = "Label3"
Me.Label3.TabIndex = 2
Me.Label3.Text = "数据表名称:"
Me.Label4.Location = New System.Drawing.Point ( 88 , 121 )
Me.Label4.Name = "Label4"
Me.Label4.TabIndex = 3
Me.Label4.Text = "用户名:"
Me.Label5.Location = New System.Drawing.Point ( 98 , 152 )
Me.Label5.Name = "Label5"
Me.Label5.TabIndex = 4
Me.Label5.Text = "口令:"
Me.TextBox1.Location = New System.Drawing.Point ( 160 , 26 )
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size ( 148 , 21 )
Me.TextBox1.TabIndex = 5
Me.TextBox1.Text = ""
Me.TextBox2.Location = New System.Drawing.Point ( 160 , 56 )
Me.TextBox2.Name = "TextBox2"
Me.TextBox2.Size = New System.Drawing.Size ( 148 , 21 )
Me.TextBox2.TabIndex = 6
Me.TextBox2.Text = ""
Me.TextBox3.Location = New System.Drawing.Point ( 160 , 86 )
Me.TextBox3.Name = "TextBox3"
Me.TextBox3.Size = New System.Drawing.Size ( 148 , 21 )
Me.TextBox3.TabIndex = 7
Me.TextBox3.Text = ""
Me.TextBox5.Location = New System.Drawing.Point ( 160 , 146 )
Me.TextBox5.Name = "TextBox5"
Me.TextBox5.PasswordChar = Microsoft.VisualBasic.ChrW ( 42 )
Me.TextBox5.Size = New System.Drawing.Size ( 148 , 21 )
Me.TextBox5.TabIndex = 9
Me.TextBox5.Text = ""
Me.Button1.Location = New System.Drawing.Point ( 120 , 198 )
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size ( 126 , 36 )
Me.Button1.TabIndex = 10
Me.Button1.Text = "导出Excle表格"
Me.TextBox4.Location = New System.Drawing.Point ( 160 , 116 )
Me.TextBox4.Name = "TextBox4"
Me.TextBox4.Size = New System.Drawing.Size ( 148 , 21 )
Me.TextBox4.TabIndex = 8
Me.TextBox4.Text = ""
Me.AutoScaleBaseSize = New System.Drawing.Size ( 6 , 14 )
Me.ClientSize = New System.Drawing.Size ( 374 , 271 )
Me.Controls.Add ( Me.Button1 )
Me.Controls.Add ( Me.TextBox5 )
Me.Controls.Add ( Me.TextBox4 )
Me.Controls.Add ( Me.TextBox3 )
Me.Controls.Add ( Me.TextBox2 )
Me.Controls.Add ( Me.TextBox1 )
Me.Controls.Add ( Me.Label5 )
Me.Controls.Add ( Me.Label4 )
Me.Controls.Add ( Me.Label3 )
Me.Controls.Add ( Me.Label2 )
Me.Controls.Add ( Me.Label1 )
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.Name = "Form1"
Me.Text = "Visual Basic .Net导入数据库数据到Excel表格"
Me.ResumeLayout ( False )
End Sub

  至此【Visual Basic .Net导入数据库数据到Excel表格】项目的界面设计和功能实现的准备工作就完成了,具体如图02所示:


图02:【Visual Basic .Net导入数据库数据到Excel表格】项目的设计界面

  11. 用下列代码替换Form1.vb中的Button1的Click事件对应的处理代码,下列代码功能是根据使用者输入的数据库信息,建立数据连接,打开数据表,并导入到Excel表格中,如果出错则弹出出错信息:

Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click
'创建一个 DataSet
Dim myDataSet As DataSet = New DataSet
'连接数据库,得到数据集
Try
' 设定数据连接字符串,此字符串的意思是打开Sql server数据库,服务器名称为本地 ,数据库为temp
Dim strCon As String = "Provider = SQLOLEDB.1; Persist Security Info = False; User ID = " & TextBox4.Text & " ;PSW=" & TextBox5.Text _
& " ; Initial Catalog = " & TextBox2.Text & " ;Data Source = " & TextBox1.Text
'数据连接代码,对此修改可导入其他类型数据库到Excle表格
Dim myConn As OleDbConnection = New OleDbConnection ( strCon )
myConn.Open ( )
Dim strCom As String = "SELECT * FROM " & TextBox3.Text
Dim myCommand As OleDbDataAdapter = New OleDbDataAdapter ( strCom , myConn )
myCommand.Fill ( myDataSet , "table01" )
'关闭此OleDbConnection
myConn.Close ( )
Catch ey As Exception
MessageBox.Show ( "连接错误! " + ey.ToString ( ) , "错误" )
End Try
Dim table As DataTable = myDataSet.Tables ( "table01" )
'创建一个空的Excel电子表格文档
Dim AppExcel As Excel.Application = New Excel.Application
AppExcel.Application.Workbooks.Add ( True )
'读取数据的字段名称,并在产生的Excel表格的第一行显示出来
Dim colIndex As Integer = 0
Dim col As DataColumn = New DataColumn
For Each col In table.Columns
colIndex = colIndex + 1
AppExcel.Cells ( 1 , colIndex ) = col.ColumnName
Next
'实现数据集到Excel表格的转换
Dim rowIndex As Integer = 1
Dim row As DataRow
For Each row In table.Rows
rowIndex = rowIndex + 1
colIndex = 0
Dim col1 As DataColumn
For Each col1 In table.Columns
colIndex = colIndex + 1
AppExcel.Cells ( rowIndex , colIndex ) = row ( col1.ColumnName ) .ToString ( )
Next
Next
AppExcel.Visible = True
End Sub

  至此在上述步骤都正确完成后,【Visual Basic .Net导入数据库数据到Excel表格】项目的全部工作就基本完成了。此时单击快捷键F5运行程序,在【数据库服务器名】中输入Sql Server数据库所在的机器名称,【数据库名】中输入要打开的数据库名称,【数据表名】中输入要导入到Excel表格的数据表名称,在【用户名】和【口令】中分别输入打开此Sql Server数据库帐户及口令后,单击【导入Excel表格】按钮,则程序会把相应的数据表导入到Excel表格中。图03和图04分别是【Visual Basic .Net导入数据库数据到Excel表格】项目的运行界面和导入数据后的Excel表格:


图03:【Visual Basic .Net导入数据库数据到Excel表格】项目的运行界面


图04:导入Sql Server数据库数据后形成的Excel表格

  四.总结:

  本文通过一个实用的示例介绍用Visual Basic .Net处理Excel表格的各种典型操作的实现,此示例能够完成从Sql Server数据库导出数据表中的数据到Excel表格。COM组件是一种现成的丰富资源,当.Net FrameWork SDK无法对您解决问题有所帮助时,也许借助COM就是一条捷径。最后希望本文能够对您掌握在Visual Basic .Net中 COM组件的使用方法。有所帮助。

时间: 2024-11-02 09:57:15

Visual Basic .NET处理Excle表格全接触的相关文章

Visual Basic 6.0 控件和 .NET 控件的区别

visual|控件|区别 Visual Basic 6.0 控件和 .NET 控件的区别 摘要:本文简单介绍了 Microsoft Visual Basic 6.0 中的标准控件和等效的 Microsoft .NET 控件. 目标 了解哪些 Visual Basic 6.0 ActiveX 控件在 .NET 中具有等效控件. 了解 .NET 控件中哪些属性发生了变化. 了解 .NET 中有哪些新控件. 前提条件 要彻底理解本文内容,需要满足以下条件: 了解什么是 ActiveX 控件. 使用 V

用Visual Basic 6.0实现自动化测试

visual 摘要:本文探讨了Visual Basic 6.0在测试自动化中应用的可能性,并列举了一些在实际工作中应用的例子 一 现有自动化测试工具的不足 当前,一个摆在软件测试自动化面前的一个很明显的事实是目前可用的工具并不能做一切我们想要它们做的事情:指望任何一种工具能够完全支持众多不同应用的测试自动化是不现实的.由于很难找到一个能完全满足测试自动化需要的测试工具,而且测试自动化工具都十分昂贵,所以常用的做法是使用一种主要的自动化测试工具,然后用传统的编程语言如Java, C++ 和 Vis

Visual Basic.NET 新编程模型和语言改进(转)

visual|编程 摘要:Visual Basic.NET是针对微软的.NET框架,对Visual Basic进行重塑之后的结果   .在里面有许多修改,使Visual Basic.NET比Visual Basic 6.0更易使用.更强大,而且给它赋予了过去需要使用C++这样的语言才具有的访问某些系统资源的能力.最重要的是增加了对象的继承性.在Visual Basic.NET里,所有受控类型都派生自System.Object. 一个重要的新语言特性是垃圾搜集,它由公共语言运行时(Common L

向Visual Basic程序员介绍My命名空间(一)

visual|程序|程序员|命名空间 Excerpted from "Microsoft Visual Basic Programmer's Introduction to Whidbey" by Sean Campbell, Scott Swigart, Kris Horrocks, Derek Hatchard, and Peter Bernhardt. Publisher, Microsoft Press, ISBN # 0-7356-2058-X. 2004, Microsof

向Visual Basic程序员介绍My命名空间(二)

visual|程序|程序员|命名空间 My.ComputerMy的另一个功能块是Computer对象.My.Computer对象可以让你访问系统底层和应用程序所在硬件平台的信息.示例应用程序的第二个选项卡展示了你在My.Computer对象中能找到的有趣属性. 图三 My.Computer 选项卡 控制这个网格的代码如下: myAppDS.MyComputer.AddMyComputerRow("Clock", _ My.Computer.Clock.LocalTime) myAppD

效率提高两倍!——Visual Basic.net 新力量

visual 很多人都看过我上一篇文章--<复杂和高效--Visual Basic.net新力量>,里面介绍了Visual Basic.net新版本中所增加的泛型.运算符重载.My命名空间和一些语言提升,如无符号整型.Continue语句.Using语句等,相信让VB的支持者高兴了一把.这次,我将追加为VB的支持者们介绍Visual Basic Whidbey的新功能. 一.继续执行和自动修复 从VB6.0升级的用户都很怀念VB6.0解释执行带来的非常方便的调试功能.他们可以在程序出错时直接修

关于Visual Basic 2005窗体互访技术的思索

visual 每一天,都有VB6的程序员开始转入.NET开发,而他们面临的最首要的问题,便是要习惯.NET里那些面向对象的金科玉律.因此,论坛上总会重复地听到网友们讨论如何在Visual Basic .NET 2003中进行窗体之间的互相访问的问题.早些时候,我特地发表了一篇关于此问题解决方案的文章,通过重写Sub New,利用Me关键字在新窗体中获得另一个窗体的实例.现在VB2005的时代马上要到来了,会不会有更简单的方法呢?答案是肯定的,所有的奥秘都藏在了My.Forms命名空间里! 其实这

Visual Basic中窗体控制特效代码收集

visual|控制 在Visual Basic中如何拖动窗体或控件 现在的许多Windows下的应用程序,都采用了图形化的界面,例如:WINAMP等!这样做的好处是可以使程序界面更漂亮生动,更具吸引力.但是在这样的界面下就不能使用Windows原来的标题条了,否则会影响界面的美观性.那么在没有标题条的情况下如何用鼠标拖动窗体呢?或者拖动其它的控件呢? 其实,采用API函数调用很容易实现,下面我们以拖动窗体(Form1)为例来具体讲一下实现方法: 1.新建立一个项目,名称为:test.vbp. 2

Visual Basic编程规范

visual|编程|规范 Visual Basic编程规范 1.      Visual Basic IDE(集成开发环境)设置        必须打开设置选项的"要求变量声明","对齐控件到网格","自动缩进"开关.        Tab的宽度统一为4个空格,网格单位一律设为:width 60 height 60. 2.     命名约定        (注意:在任何时候,不能使用中文及全角字符,只允许使用英文字母.下划线和数字) 2.1