将VB中MSHFlexGrid控件中的数据导入到Excel

机房收费系统中,不少窗体都要用到MSHFLexgrid控件来显示数据,并要求导入到Excel中,进而方便用户查询和操作数据。

原来在作品展中我们小组设计了一款小软件,是一款关于计票的软件,也用到了导入到Excel这一功能。所以说来也并不陌生了。

下面就为大家介绍三种将VB中数据导入到Excel 的方法。

首先是直接从Text或Label中导入。下面这种方法要自己事先建立一个Excel,优点是可以在指定的不同的磁盘里建立;不足之处是每次都要自己指定,比较麻烦,而且一旦程序完成,用户将无法建立其他新的工作表,也不得将规定建立的工作表改名。适用于开发者自己使用。


Private Sub LinkExcel_Click()
    Dim xlApp As Excel.Application       '定义一个新的Excel应用程序
    Dim xlBook As Excel.Workbook         '定义新的工作表
    Dim xlSheet As Excel.Worksheet       '定义新的工作簿

    Set xlApp = CreateObject("Excel.Application")      '实例化应用程序
    xlApp.Visible = True    '设置为可见
    Set xlBook = xlApp.Workbooks.Open(App.Path & "\选举结果1.xls")   '打开所建立的"\选举结果1.xls"工作表,这是自己手动建立的工作表
    Set xlSheet = xlBook.Worksheets(1)   '设置当前活动工作簿sheet1

    For i = 1 To n
        On Error Resume Next
        x = LblRank(i).Caption     '要显示的Lblrank中的数据
        y = TxtName(i).Text         '要显示的TxtName中的数据
        z = LblTickets(i).Caption   '要显示的LblTickets中的数据

        xlSheet.Cells(i,1).Value = x         '将要显示的数据定位到Excel单元格
        xlSheet.Cells(i,2).Value = y
        xlSheet.Cells(i,3).Value = z
    Next i

    xlApp.Application.Quit  '释放内存,将控制权交还给Excel
    Set xlApp = Nothing
End Sub


下面这一种就比较方便了,既可以自动建立Excel 工作表,也可以自动存储,存储位置可任意选择,限制很少;不足就是开发代码比较长。这种方法适用范围广,比较方便用户。

Private Sub txtOutPut_Click()
    Dim objExlApp As New Excel.Application '声明一个EXCEL应用程序
    Dim objExlBook As New Excel.Workbook   '声明一个EXCEL工作表
    Dim objExlSheet As New Excel.Worksheet '声明一个EXCEL工作簿
    Dim sFileName As String   '定义存储的文件名变量
    Dim lngRowsCount As Long  '声明行数变量
    Dim lngColumnsCount As Long  '声明列数变量
    Dim lngRow As Long         '声明单行
    Dim lngColumn As Long      '声明单列
    Dim strText As String      '声明保存的文件名变量
    
    '先判断MSFG1中有没有数据
    If MSFG1.Rows > 1 Then

        '另存到XLS文件
        '   设置“取消”为   True
        dlgSave.CancelError = False
        On Error Resume Next
        Set objExlApp = GetObject(,"Excel.Application")
        If Err.Number <> 0 Then
            Set objExlApp = CreateObject("Excel.Application")
        End If
        '错误处理
        On Error GoTo ErrHandler
        '保存对话框处理
        dlgSave.Filter = "Excel文件(*.xls)|*.xls|所有文件|*.*" '文件类型
        dlgSave.FileName = "杨建" & Format(Now,"yyyy-mm-dd") & ".XLS" '文件名
        dlgSave.ShowSave

        '在Excel中增加一个工作簿
        Set objExlBook = objExlApp.Workbooks.Add
        '实例化一个表单,并使其成为Excel的活动工作表单
        Set objExlSheet = objExlBook.Worksheets(1)

        '设置要使用的工作表,使其可见,并实例化EXCEL工作表单
        objExlApp.Visible = True
        objExlApp.ScreenUpdating = True
        objExlApp.DisplayAlerts = True
        Set objExlSheet = objExlBook.Sheets(1)

        lngRowsCount = MSFG1.Rows
        lngColumnsCount = MSFG1.Cols
        
        '导入数据
        For lngRow = 1 To lngRowsCount
            For lngColumn = 1 To lngColumnsCount
                strText = MSFG1.TextMatrix(lngRow - 1,lngColumn - 1)
                If IsNull(strText) = False And strText <> "" Then
                    objExlSheet.Cells(lngRow,lngColumn) = strText
                End If
            Next lngColumn
        Next lngRow

        objExlApp.Visible = True
        sFileName = dlgSave.FileName  '导出文件的文件名与保存时的文件名相同
         objExlSheet.SaveAs sFileName  '设置保存时的文件名

         objExlApp.Application.Quit  '终止Excel程序运行
         Set objExlSheet = Nothing   '释放内存里的变量,交还控制给Excel         
        Set objExlBook = Nothing
        Set objExlApp = Nothing
        'objExlBook.Close
        MsgBox "文件已生成,在:" & sFileName  '提示文件生成及保存的路径

    Else
        MsgBox "没有可导出的数据,请先进行查询!"
    End If

ErrHandler:
    Exit Sub
End Sub

第三种方法就是自己定义一个导入到Excel的函数,到时候直接调用就可以了。函数的定义方法用很多种,就不在此为大家过多叙述了,举一个例子即可。

Public Sub ExportToExcel() '导出数据到excel      
    On Error Resume Next  
    Dim oExcel As Excel.Application  
    Dim obook As Excel.Workbook  
    Dim objExlSht As Excel.Worksheet  
      
    Dim listrst() As Variant  
    Dim X,Y As Long  
    Dim i,n As Integer  
      
    Set oExcel = New Excel.Application  
    Set obook = oExcel.Workbooks.Add  
    Set objExlSht = obook.ActiveSheet  
      
    X = myflexgrid.Rows  
    Y = myflexgrid.Cols  
      
    ReDim listrst(X,Y)  
        
      For i = 0 To myflexgrid.Rows - 1  
         For n = 0 To myflexgrid.Cols - 1  
             listrst(i,n) = Trim(myflexgrid.TextMatrix(i,n))  
           Next  
     Next  
          
        DoEvents  
            With objExlSht  
                   oExcel.Intersect(.Range(.Rows(1),.Rows(X)),.Range(.Columns(1),.Columns(Y))).Value = listrst  
      
             End With  
         oExcel.Visible = True  
         oExcel.Interactive = True  
End Sub  

当然,还有其他方法可以实现该功能,大家可以继续去深入探索,找到适合自己的高效快捷方便的方法,本次就先介绍到这里。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 -------------------------------- 数字类型的格式化 --------------------------------     固定格式参数:     General Number 普通数字,如可以用来去掉千位分隔号     format$("100,1
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和系统设置的区域语言的日期和时间格式相关。意思是尽管你用诸如 Format(Now, "MM/dd/yyyy"),如果系统的设置格式区域语言的日期和时间格式分隔符是"-",那他还会显示为 MM-dd-yyyy     只有拼凑: <%response.write
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 ‘添加后还需要一个From用来显示错误。如果到这步还不会则需要先打好基础啦 ‘======================================================== ‘以下事件
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果  能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用V
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请确定分列的数据会覆盖它后面的单元格!", _
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) 2 Dim path As String, hash As String 3 For Each fil
  Imports MySql.Data.MySqlClient Public Class Form1 ‘ GLOBAL DECLARATIONS Dim conString As String = "Server=localhost;Database=net2;Uid=root;Pwd=123456;" Dim con As New MySqlConnection
‘導入命名空間 Imports ADODB Imports Microsoft.Office.Interop   Private Sub A1() Dim Sql As String Dim Cnn As New ADODB.Connection Dim Rs As New ADODB.Recordset Dim S As String   S = "Provider=OraOLEDB.Oracl
Imports System.IO Imports System.Threading Imports System.Diagnostics Public Class Form1 Dim A(254) As String    Function ping(ByVal IP As Integer) As String Dim IPAddress As String IPAddress = "10.0.
VB运行EXE程序,并等待其运行结束 参考:https://blog.csdn.net/useway/article/details/5494084 Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Pr
今天碰到一个问题,登陆的时候,如果不需要验证手机号为空,则不去验证手机号 因为登陆的时候所有的验证信息都存放在一个数组里 Dim CheckUserInfo() As String ={UserBirthday, SecEmail, UserMob, UserSex, RealNameFirst, RealName, CheckCardID, CheckCardType, Contactemail
在VB6.0中,数据访问接口有三种: 1、ActiveX数据对象(ADO) 2、远程数据对象(RDO) 3、数据访问对象(DAO) 1.使用ADO(ActiveX Data Objec,ActiveX数据对象)连接SQL Server 1)使用ADO控件连接 使用ADO控件的ConnectionString属性就可以连接SQL Server,该属性包含一个由分号分隔的argument=value语
注:大家如果没有VB6.0的安装文件,可自行百度一下下载,一般文件大小在200M左右的均为完整版的软件,可以使用。   特别提示:安装此软件的时候最好退出360杀毒软件(包括360安全卫士,电脑管家等,如果电脑上有这些软件的话),因为现如今的360杀毒软件直接会对VB6.0软件误报,这样的话就可能会在安装过程中被误报阻止而导致安装失败,或者是安装后缺乏很多必须的组件(其它的杀毒软件或安全卫士之类的
Private Sub Form_Load() Call conndb End Sub Private Function conndb() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim strCn, sql As String Dim db_host As String Dim db_user As String
  PPSM06S70:  Add  moddate  EDITSPRINTJOB:  MAX(TO_CHAR(ETRN.MODDATE, ‘yyyy/mm/dd/HH24:MI AM‘)) ACTUAL_SHIPDATE   4.Test Scenario (1) :Query SQL Test DN:8016578337 SELECT CTRN.TKCTID TRUCK_ID,        
  沒有出現CrystalReportViewer時,須安裝CRforVS_13_0. 新增1個數據集,新增1個數據表,添加二列,列名要和資料庫名一樣. 修改目標Framework 修改app.config, <startup >改成<startup useLegacyV2RuntimeActivationPolicy ="true">  CrystalReport1.rpt增加數據庫專家 在表單
Imports System.Threading Imports System Public Class Form1 Dim th1, th2 As Thread Public Sub Method1() Dim i As Integer For i = 1 To 100 If Me.Label1.BackColor =
Friend Const PROCESS_ALL_ACCESS = &H1F0FFF = 2035711 Friend Const PROCESS_VM_READ = &H10 Friend Const PROCESS_VM_WRITE = &H20 Friend Const PAGE_READONLY = &H2 Friend Const PAGE_READWRITE = &H4 Friend
以下代码随手写的 并没有大量测试 效率也有待提升 如果需要C#的请自行转换 Function SplitBytes(Data As Byte(), Delimiter As Byte()) As List(Of Byte()) Dim i = 0 Dim List As New List(Of Byte()) Dim bytes As New
Imports System.Data.SqlClient Public Class Form1 REM Public conn1 As SqlConnection = New SqlConnection("server=.; Integrated Security=False;Initial Catalog= mydatabase1; User ID= sa;password")