zoukankan      html  css  js  c++  java
  • VB中Excel 2010的导入导出操作

    VB中Excel 2010的导入导出操作

     

    编写人:左丘文

     

    2015-4-11

    近来这已是第二篇在讨论VB的相关问题,今天在这里,我想与大家一起分享一下在VB中如何从Excel中导入数据和导出数据到Excel(程序支持excel2010),在此做个小结,以供参考。有兴趣的同学,可以一同探讨与学习一下,否则就略过吧。

     

    1、 程序导入导出操作介面:

     

    2、 excel导入数据代码:

      1 Private Sub cmdinput_Click()
      2    
      3    'Modify By KevinZhang 2014-8-21
      4     Dim sFile As String
      5     Dim btrans As Boolean
      6     sFile = txtFILE.Text
      7     If Not FileExists(sFile) Then
      8         MsgBox "指定的导入文件不存在,请重新选择!", vbOKOnly + vbExclamation
      9         Exit Sub
     10     End If
     11       '连接excel
     12     Dim conn
     13     Set conn = CreateObject("ADODB.Connection")
     14     'connExcelStr = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" & sFile & ";Extended Properties='Excel 8.0;HDR=YES'"
     15     'connExcelStr = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source =" & sFile & ";Extended Properties='Excel 12.0 Xml;HDR=YES;'"
     16     'connExcelStr = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source =" & sFile & ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'"
     17      connExcelStr = "Provider=Microsoft.ACE.OLEDB.12.0; Persist Security Info=False;Data Source=" & sFile & "; Extended Properties='Excel 8.0;HDR=Yes;IMEX=2'"
     18     On Error GoTo checkgetexcel
     19       conn.Open connExcelStr
     20    Dim rs As ADODB.Recordset
     21     Set rs = New ADODB.Recordset
     22     With rs
     23         .ActiveConnection = conn
     24         .LockType = adLockReadOnly
     25         .CursorLocation = adUseClient
     26         .CursorType = adOpenKeyset
     27         .Open "select * from [Sheet1$]"
     28     End With
     29    
     30  
     31    Dim rs2 As ADODB.Recordset
     32    Set rs2 = New ADODB.Recordset
     33    Dim i As Integer
     34  If (rs.RecordCount >= 1) Then
     35  i = rs.RecordCount
     36  
     37  '*****************************************************************************
     38  '同时生成一个错误清单
     39  
     40    '定义变量
     41   Dim j, k, o, z As Long
     42  
     43     '初始化循环的变量数值
     44     j = 2
     45     '初始化Excel组建
     46 Set xlApp = CreateObject("Excel.Application")
     47  Set xlBook = xlApp.Workbooks.Add
     48  Set xlsheet = xlBook.WorkSheets("Sheet1")
     49  
     50 '打开选定的文件
     51 'Set xlBook = xlApp.Workbooks.Open(sFile)
     52 '设置其可见
     53 'xlApp.Visible = True
     54 '设置其工作表的名称
     55 Set xlsheet = xlBook.WorkSheets("Sheet1"'设置活动工作表
     56 '执行SQL连接方法,查询语句,和返回的文本
     57  
     58 '循环,到数据库的总行
     59  xlsheet.Cells(11) = "料号" '给单元格(row,col)赋值
     60  xlsheet.Cells(12) = "单价" '给单元格(row,col)赋值
     61   xlsheet.Cells(13) = "错误信息" '给单元格(row,col)赋值
     62  
     63  '***********************************************************************
     64 Call ShowInforDlg("正在导入数据,请稍候...")
     65 ConGamma.beginTrans
     66 btrans = True
     67 rs.MoveFirst
     68 Do While Not rs.EOF
     69    Set rs2 = ExecSQL("Insert_PackMat_Auto  '" & txtYEAR.Text & " ','" & txtIQUARTER.Text & "' ,'" _
     70                    & rs!PRONUM & "','" & rs!price & "'", ConGamma)
     71  
     72  
     73 If rs2.RecordCount = 1 Then
     74  
     75  If rs2.Fields(0).Value = "存在相同物料成本记录" Then
     76   'MsgBox "导入失败,请先删除该料号:" & rs!PRONUM & "再导入!!", vbCritical
     77  
     78 '*************************************************************************************************
     79 '初始化列
     80    o = 0
     81     For k = 1 To rs.Fields.count
     82       '给Excel列赋值
     83       xlsheet.Cells(j, k) = rs.Fields(o).Value '给单元格(row,col)赋值
     84       '列往后进一位
     85      o = o + 1
     86    
     87     Next
     88     xlsheet.Cells(j, rs.Fields.count + 1) = "存在相同物料成本记录" '给单元格(row,col)赋值
     89       '行往后一步
     90      j = j + 1
     91   '*******************************************************************************************
     92   i = i - 1
     93  End If
     94 Else
     95     'MsgBox "导入失败,请先检查该料号:" & rs!PRONUM, , vbCritical
     96     '*************************************************************************************************
     97 '初始化列
     98    o = 0
     99     For k = 1 To rs.Fields.count
    100       '给Excel列赋值
    101       xlsheet.Cells(j, k) = rs.Fields(o).Value '给单元格(row,col)赋值
    102       '列往后进一位
    103      o = o + 1
    104    
    105     Next
    106     xlsheet.Cells(j, rs.Fields.count + 1) = "请先检查该料号" '给单元格(row,col)赋值
    107       '行往后一步
    108      j = j + 1
    109   '*******************************************************************************************
    110    
    111     i = i - 1
    112    
    113    
    114 End If
    115  
    116    rs.MoveNext
    117 Loop
    118 ConGamma.CommitTrans
    119 rs.MoveFirst
    120 btrans = False
    121 Call UnloadInforDlg
    122   If rs.RecordCount > 0 Then
    123          MsgBox "共有" & i & "条记录被导入,错误信息请阅导入文件目录的Error.xls文件", vbInformation
    124     End If
    125   End If
    126   '**********************************************
    127      'xlsheet.PrintOut '打印工作表
    128      Dim ssfile() As String
    129      Dim ssfile2 As String
    130      ssfile = Split(sFile, "")
    131      For i = 0 To UBound(ssfile) - 1
    132      ssfile2 = ssfile2 & ssfile(i) & ""
    133      Next
    134      ssfile2 = ssfile2 & "Error.xls"
    135     xlBook.SaveAs (ssfile2)
    136     xlBook.Close (True) '关闭工作簿
    137     xlApp.Quit '结束EXCEL对象
    138     Set xlApp = Nothing '释放xlApp对象
    139  '******************************************************
    140    rs.Close
    141   Set rs = Nothing
    142    If Trim(txtYEAR.Text) <> "" Then
    143         Call frmMDI.ITMDIAdminX.ControlSearch
    144          Exit Sub
    145     End If
    146    
    147 checkgetexcel:
    148     MsgBox "请检查excel是否存在,excel中是否有Sheet1的工作表。(系统默认读取excel的Sheet1的工作表)", vbInformation
    149   If ERR.Number <> 0 Then
    150     MsgBox ERR.Description
    151   End If
    152  
    153    Exit Sub
    154 End Sub
    View Code

     

    3、 导出到excel代码

     1 Private Sub cmdExport_Click()
     2 'Modify By KevinZhang 2014-8-22
     3     '定义变量
     4   Dim i, j, k, o, z As Long
     5  
     6   Dim rs As ADODB.Recordset
     7    Dim sFile As String
     8   '初始化文件打开窗口
     9    If txtFILE.Text <> "" Then
    10        sFile = RTrim(txtFILE.Text)
    11     Else '如果等于空,则关闭方法
    12       MsgBox "请选择要导出的文件名", vbCritical
    13       Exit Sub
    14     End If
    15    
    16     If FileExists(sFile) Then
    17         If MsgBox("存在相同的档案名称,要替代吗?", vbQuestion + vbYesNoCancel) <> vbYes Then Exit Sub
    18     End If
    19    
    20    Screen.MousePointer = vbHourglass
    21  
    22    On Error GoTo Err_Proc
    23  
    24     '初始化循环的变量数值
    25     i = 2
    26     j = 1
    27     '初始化Excel组建
    28 Set xlApp = CreateObject("Excel.Application")
    29  Set xlBook = xlApp.Workbooks.Add
    30  Set xlsheet = xlBook.WorkSheets("Sheet1")
    31  
    32 '打开选定的文件
    33 'Set xlBook = xlApp.Workbooks.Open(sFile)
    34 '设置其可见
    35 'xlApp.Visible = True
    36 '设置其工作表的名称
    37 Set xlsheet = xlBook.WorkSheets("Sheet1"'设置活动工作表
    38 '执行SQL连接方法,查询语句,和返回的文本
    39 Set rs = ExecSQL("select * from PACKMATDTL where YEAR= '" & txtYEAR.Text & " '  AND IQUARTER='" & txtIQUARTER.Text & "'", ConGamma)
    40 '循环,到数据库的总行
    41  
    42  
    43  xlsheet.Cells(11) = "年份" '给单元格(row,col)赋值
    44  xlsheet.Cells(12) = "季度" '给单元格(row,col)赋值
    45  xlsheet.Cells(13) = "料号" '给单元格(row,col)赋值
    46  xlsheet.Cells(14) = "单价" '给单元格(row,col)赋值
    47  
    48 For z = 1 To rs.RecordCount
    49 '初始化列
    50  o = 0
    51     For k = 1 To rs.Fields.count
    52       '给Excel列赋值
    53       xlsheet.Cells(i, k) = rs.Fields(o).Value '给单元格(row,col)赋值
    54       '列往后进一位
    55      o = o + 1
    56    
    57     Next
    58     '数据库标往后一步
    59      rs.MoveNext
    60       '行往后一步
    61      i = i + 1
    62      j = j + 1
    63  Next
    64     'xlsheet.PrintOut '打印工作表
    65     xlBook.SaveAs (sFile)
    66     xlBook.Close (True) '关闭工作簿
    67     xlApp.Quit '结束EXCEL对象
    68     Set xlApp = Nothing '释放xlApp对象
    69     MsgBox "共有" & rs.RecordCount & "条记录被导出", vbInformation
    70   rs.Close
    71   Set rs = Nothing
    72    Screen.MousePointer = vbDefault
    73             Exit Sub
    74  
    75    
    76    
    77 Err_Proc:
    78           Screen.MousePointer = vbDefault
    79           MsgBox "请确认您的电脑已安装Excel!", vbExclamation, "提示"
    80  
    81    
    82    
    83 End Sub
    View Code

    有关更多的技术分享,大家可以加入我们的技术群,进行源码的分享。

     

    欢迎加入技术分享群:238916811

     



  • 相关阅读:
    初认识AngularJS
    (imcomplete) UVa 10127 Ones
    UVa 10061 How many zero's and how many digits?
    UVa 11728 Alternate Task
    UVa 11490 Just Another Problem
    UVa 10673 Play with Floor and Ceil
    JSON对象和字符串的收发(JS客户端用typeof()进行判断非常重要)
    HTML.ActionLink 和 Url.Action 的区别
    EASYUI TREE得到当前节点数据的GETDATA方法
    jqueery easyui tree把已选中的节点数据拼成json或者数组(非常重要)
  • 原文地址:https://www.cnblogs.com/bribe/p/4421311.html
Copyright © 2011-2022 走看看