VB操作EXCEL

一.设置excel对象,strDestPath是EXCEL数据源位置。
Private Function prepareExcel(ByVal strDestPath As String)
   Set exlApp = CreateObject("Excel.Application")
   Set book = exlApp.Workbooks.Open(strDestPath)

End Function

二.操作EXCEL中的行列。

1.行列的改变,strCell需要改变的单元格,intRowOffset行改变的数量,intColOffset列改变的数量,返回值为改变后的单元格。
Public Function changeRowColumn(ByVal strCell As String, ByVal intRowOffset As Integer, ByVal intColOffset As Integer) As String

    Dim intRow, intCol As Integer
    Dim strCell_Changed As String
    intCol = Asc(Left$(strCell, 1)) + intColOffset
    intRow = Mid$(strCell, 2) + intRowOffset
    strCell_Changed = Chr$(intCol) & intRow
    changeRowColumn = strCell_Changed

End Function

比如:strNewCell = changeRowColumn("A1", 1,2)返回的单元格为B3。

2.复制给定的范围,strStartCell开始单元格,strEndCell结束单元格,intDestRow需要插入的目标行位置,intRowNum共需要插入的行数。

Public Function copyRange(ByVal strStartCell As String, ByVal strEndCell As String, ByVal intDestRow As Integer, sheet As Excel.Worksheet, ByVal intRowNum As Integer) As Integer

    Dim intEndRow As Integer
    Dim strCell As String
    strCell = strStartCell
    Range(strStartCell, strEndCell).Copy
    If intRowNum > 0 Then
        For i = intDestRow To intRowNum + intDestRow
            strCell = changeRowColumn(strCell, 1, 0)
            Range(strCell).Select
            ActiveSheet.Paste  
        Next i 
    End If
    intEndRow = i
    copyRange = intEndRow

End Function
3.行浮动转换成行列固定。

Public Function changeTableRowFixed(sheet As Excel.Worksheet, ByVal rowNum As Integer, intStartRow As Integer)
   Dim intRow  As Integer
   '如果是行浮动的报表
   If blnRowFix = False Then
      '获取数据区的第一行
      intRow = intStartRow
      '先复制数据区的第一行
      sheet.Rows(intRow & ":" & intRow).Copy
      '然后循环插入,把表格转化成行列固定的
      If rowNum <> 1 Then 
         For i = intRow + 1 To rowNum + intRow - 1
            sheet.Rows(i & ":" & i).PasteSpecial
         Next i
      End If
   End If
End Function

4.填充给定范围,1个数据源填充2个不相邻的范围。

Public Function fillRange_2(strStartCell_1 As String, strEndCell_1 As String, strStartCell_2 As String, strEndCell_2 As String, RS As ADODB.Recordset, sheet As Excel.Worksheet)

    If RS.RecordCount > 0 Then
        RS.MoveFirst
        '重新定义数组
        ReDim arrData(0 To RS.RecordCount - 1, 0)
        ReDim arr(0 To RS.RecordCount - 1, 0)
        For i = 0 To RS.RecordCount - 1
            For j = 1 To RS.Fields.Count - 1
                Select Case j:'将数据源RS中的索引为1和2的数据列填入表格

                    Case 1: arrData(i, 0) = RS.Fields(j).Value
                    Case 2: arr(i, 0) = RS.Fields(j).Value
                End Select 
            Next j   
            RS.MoveNext 
        Next i
        '填充excel给定的范围
        sheet.Range(strStartCell_1, strEndCell_1) = arrData
        sheet.Range(strStartCell_2, strEndCell_2) = arr
    End If

End Function

5.删除多余的单元格,同时下方的单元格上移

Public Function deleteExtraCell(intLastCol As Integer, intFirstRow As Integer, intFirstCol As Integer)

    Dim strBeginCell, strEndCell As String
    strBeginCell = Chr$(intFirstCol) & intFirstRow
    strEndCell = Chr$(intLastCol) & 199
    Range(strBeginCell, strEndCell).Delete Shift:=xlUp
End Function

三.EXCEL保存及资源释放设置。

'显示excel
exlApp.Visible = True
exlApp.WindowState = xlMaximized

'将sheet1设为活动工作簿
exlApp.Worksheets(1).Activate
'将sheet1的第一行第一列单元格设为活动单元格
exlApp.ActiveSheet.Cells(1, 1).Activate

'清除剪贴板上的内容
Clipboard.Clear

'关闭excel时不弹出是否保存的窗口
exlApp.ActiveWorkbook.Saved = False
exlApp.DisplayAlerts = False

'保存
book.SaveAs FileName

'释放excel资源
Set sheet = Nothing
Set book = Nothing
Set exlApp = Nothing

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值