zoukankan      html  css  js  c++  java
  • EXCEL VBA编程的一些小结

    最近单位内部的项目里要用到些报表EXCEL的生成,虽说JAVA 的POI可以有这能力,但觉得还是可能比较麻烦,因此还是转用.net来搞,用visual studio 2003配合office 2003,用到了一些VBA,因此小结并归纳之,选了些资料归纳在这里,以备今后查考

    首先创建 Excel 对象,使用ComObj:

    Dim ExcelID as Excel.Application

    Set ExcelID as new Excel.Application

    1) 显示当前窗口:

    ExcelID.Visible := True;

    2) 更改 Excel 标题栏:

    ExcelID.Caption := '应用程序调用 Microsoft Excel';

    3) 添加新工作簿:

            ExcelID.WorkBooks.Add;

    4) 打开已存在的工作簿:

            ExcelID.WorkBooks.Open( 'C:\Excel\Demo.xls' );

    5) 设置第2个工作表为活动工作表:

            ExcelID.WorkSheets[2].Activate; 

     或 ExcelID.WorkSheets[ 'Sheet2' ].Activate;

    6) 给单元格赋值:

            ExcelID.Cells[1,4].Value := '第一行第四列';

    7) 设置指定列的宽度(单位:字符个数),以第一列为例:

            ExcelID.ActiveSheet.Columns[1].ColumnsWidth := 5;

    8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:

            ExcelID.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米

    9) 在第8行之前插入分页符:

            ExcelID.WorkSheets[1].Rows[8].PageBreak := 1;

    10) 在第8列之前删除分页符:

            ExcelID.ActiveSheet.Columns[4].PageBreak := 0;

    11) 指定边框线宽度:

            ExcelID.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;

               1-    2-   3-    4-   5-斜( \ )     6-斜( / )

    12) 清除第一行第四列单元格公式:

            ExcelID.ActiveSheet.Cells[1,4].ClearContents;

    13) 设置第一行字体属性:

    ExcelID.ActiveSheet.Rows[1].Font.Name := '隶书';

    ExcelID.ActiveSheet.Rows[1].Font.Color := clBlue;

    ExcelID.ActiveSheet.Rows[1].Font.Bold   := True;

    ExcelID.ActiveSheet.Rows[1].Font.UnderLine := True;

    14) 进行页面设置:

     a.页眉:

               ExcelID.ActiveSheet.PageSetup.CenterHeader := '报表演示';

     b.页脚:

               ExcelID.ActiveSheet.PageSetup.CenterFooter := '第&P页';

     c.页眉到顶端边距2cm:

               ExcelID.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;

     d.页脚到底端边距3cm:

               ExcelID.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;

     e.顶边距2cm:

               ExcelID.ActiveSheet.PageSetup.TopMargin := 2/0.035;

     f.底边距2cm:

               ExcelID.ActiveSheet.PageSetup.BottomMargin := 2/0.035;

     g.左边距2cm:

               ExcelID.ActiveSheet.PageSetup.LeftMargin := 2/0.035;

     h.右边距2cm:

               ExcelID.ActiveSheet.PageSetup.RightMargin := 2/0.035;

     i.页面水平居中:

               ExcelID.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;

     j.页面垂直居中:

               ExcelID.ActiveSheet.PageSetup.CenterVertically := 2/0.035;

     k.打印单元格网线:

               ExcelID.ActiveSheet.PageSetup.PrintGridLines := True;

    15) 拷贝操作:

     a.拷贝整个工作表:

               ExcelID.ActiveSheet.Used.Range.Copy;

      b.拷贝指定区域:

               ExcelID.ActiveSheet.Range[ 'A1:E2' ].Copy;

     c.从A1位置开始粘贴:

               ExcelID.ActiveSheet.Range.[ 'A1' ].PasteSpecial;

     d.从文件尾部开始粘贴:

               ExcelID.ActiveSheet.Range.PasteSpecial;

    16) 插入一行或一列:

       a. ExcelID.ActiveSheet.Rows[2].Insert;

       b. ExcelID.ActiveSheet.Columns[1].Insert;

    17) 删除一行或一列:

        a. ExcelID.ActiveSheet.Rows[2].Delete;

        b. ExcelID.ActiveSheet.Columns[1].Delete;

    18) 打印预览工作表:

            ExcelID.ActiveSheet.PrintPreview;

    19) 打印输出工作表:

            ExcelID.ActiveSheet.PrintOut;

    20) 工作表保存:

          If not ExcelID.ActiveWorkBook.Saved then

              ExcelID.ActiveSheet.PrintPreview

       End if

    21) 工作表另存为:

            ExcelID.SaveAs( 'C:\Excel\Demo1.xls' );

    22) 放弃存盘:

            ExcelID.ActiveWorkBook.Saved := True;

    23) 关闭工作簿:

            ExcelID.WorkBooks.Close;

    24) 退出 Excel:

    ExcelID.Quit;

    25) 设置工作表密码:

    ExcelID.ActiveSheet.Protect "123", DrawingObjects:=True, Contents:=True, Scenarios:=True

    26) EXCEL的显示方式为最大化

    ExcelID.Application.WindowState = xlMaximized   

    27) 工作薄显示方式为最大化

    ExcelID.ActiveWindow.WindowState = xlMaximized 

    28) 设置打开默认工作薄数量

    ExcelID.SheetsInNewWorkbook = 3

    29) '关闭时是否提示保存(true 保存;false 不保存)

    ExcelID.DisplayAlerts = False 

    30) 设置拆分窗口,及固定行位置

    ExcelID.ActiveWindow.SplitRow = 1

    ExcelID.ActiveWindow.FreezePanes = True

    31) 设置打印时固定打印内容

    ExcelID.ActiveSheet.PageSetup.PrintTitleRows = "$1:$1" 

    32) 设置打印标题

    ExcelID.ActiveSheet.PageSetup.PrintTitleColumns = ""  

    33) 设置显示方式(分页方式显示)

    ExcelID.ActiveWindow.View = xlPageBreakPreview 

    34) 设置显示比例

    ExcelID.ActiveWindow.Zoom = 100                 

    35) 让Excel 响应 DDE 请求

    Ex.Application.IgnoreRemoteRequests = False

     

    VB操作EXCEL

    Private Sub Command3_Click()

    On Error GoTo err1

        Dim i As Long

        Dim j As Long

        Dim objExl As Excel.Application   '声明对象变量

        Me.MousePointer = 11            '改变鼠标样式

        Set objExl = New Excel.Application '初始化对象变量

        objExl.SheetsInNewWorkbook = 1 '将新建的工作薄数量设为1

        objExl.Workbooks.Add          '增加一个工作薄

        objExl.Sheets(objExl.Sheets.Count).Name = "book1" '修改工作薄名称

        objExl.Sheets.Add , objExl.Sheets("book1") ‘增加第二个工作薄在第一个之后

        objExl.Sheets(objExl.Sheets.Count).Name = "book2"

       objExl.Sheets.Add , objExl.Sheets("book2") ‘增加第三个工作薄在第二个之后

    objExl.Sheets(objExl.Sheets.Count).Name = "book3"

     

    objExl.Sheets("book1").Select     '选中工作薄<book1>

        For i = 1 To 50                   '循环写入数据

            For j = 1 To 5

    If i = 1 Then

                            objExl.Selection.NumberFormatLocal = "@" '设置格式为文本

    objExl.Cells(i, j) = " E " & i & j

                Else

                   objExl.Cells(i, j) = i & j

                End If

            Next

        Next

     

              objExl.Rows("1:1").Select         '选中第一行

              objExl.Selection.Font.Bold = True   '设为粗体

              objExl.Selection.Font.Size = 24     '设置字体大小

              objExl.Cells.EntireColumn.AutoFit  '自动调整列宽

    objExl.ActiveWindow.SplitRow = 1 '拆分第一行

              objExl.ActiveWindow. SplitColumn = 0 '拆分列

    objExl.ActiveWindow.FreezePanes = True   '固定拆分          objExl.ActiveSheet.PageSetup.PrintTitleRows = "$1:$1" '设置打印固定行

    objExl.ActiveSheet.PageSetup.PrintTitleColumns = ""    '打印标题    objExl.ActiveSheet.PageSetup.RightFooter = "打印时间: " & _

                       Format(Now, "yyyy年mm月dd日 hh:MM:ss")

              objExl.ActiveWindow.View = xlPageBreakPreview    '设置显示方式

              objExl.ActiveWindow.Zoom = 100                 '设置显示大小

        '给工作表加密码

    objExl.ActiveSheet.Protect "123", DrawingObjects:=True,  _

    Contents:=True, Scenarios:=True

              objExl.Application.IgnoreRemoteRequests = False

              objExl.Visible = True                       '使EXCEL可见

              objExl.Application.WindowState = xlMaximized 'EXCEL的显示方式为最大化

              objExl.ActiveWindow.WindowState = xlMaximized '工作薄显示方式为最大化

              objExl.SheetsInNewWorkbook = 3           '将默认新工作薄数量改回3个

       Set objExl = Nothing    '清除对象

              Me.MousePointer = 0   '修改鼠标

    Exit Sub

    err1:

    objExl.SheetsInNewWorkbook = 3

    objExl.DisplayAlerts = False '关闭时不提示保存

    objExl.Quit                '关闭EXCEL

    objExl.DisplayAlerts = True   '关闭时提示保存

    Set objExl = Nothing

    Me.MousePointer = 0

    End Sub



    一般在搞透视表时,是先用录制宏的方法来实现的,当然可以再看下代码
    Dim excel As Excel.Application
            Dim xBk As Excel._Workbook
            Dim xSt As Excel._Worksheet
            Dim xRange As Excel.Range
            Dim xPivotCache As Excel.PivotCache
            Dim xPivotTable As Excel.PivotTable
            Dim xPivotField As Excel.PivotField
            Dim cnnsr As String, sql As String
            Dim RowFields() As String = {"", "", ""}
            Dim PageFields() As String = {"", "", "", "", "", ""}

            'SERVER     是服务器名或服务器的IP地址
            'DATABASE 是数据库名
            'Table           是表名

            Try
                ' 开始导出
                cnnsr = "ODBC;DRIVER=SQL Server;SERVER=" + SERVER 
                cnnsr = cnnsr + ";UID=;APP=Report Tools;WSID=ReportClient;DATABASE=" + DATABASE
                cnnsr = cnnsr + ";Trusted_Connection=Yes"

                excel = New Excel.ApplicationClass
                xBk = excel.Workbooks.Add(True)
                xSt = xBk.ActiveSheet

                xRange = xSt.Range("A4")
                xRange.Select()

                ' 开始
                xPivotCache = xBk.PivotCaches.Add(SourceType:=2)
                xPivotCache.Connection = cnnsr
                xPivotCache.CommandType = 2

                sql = "select * from " + Table

                xPivotCache.CommandText = sql
                xPivotTable = xPivotCache.CreatePivotTable(TableDestination:="Sheet1!R3C1", TableName:="数据透视表1", DefaultVersion:=1)

                '准备行字段
                RowFields(0) = "字段1"
                RowFields(1) = "字段2"
                RowFields(2) = "字段3"
                '准备页面字段
                PageFields(0) = "字段4"
                PageFields(1) = "字段5"
                PageFields(2) = "字段6"
                PageFields(3) = "字段7"
                PageFields(4) = "字段8"
                PageFields(5) = "字段9"
                xPivotTable.AddFields(RowFields:=RowFields, PageFields:=PageFields)

                xPivotField = xPivotTable.PivotFields("数量")
                xPivotField.Orientation = 4

                ' 关闭工具条
                'xBk.ShowPivotTableFieldList = False
                'excel.CommandBars("PivotTable").visible = False

                excel.Visible = True

            Catch ex As Exception
                If cnn.State = ConnectionState.Open Then
                    cnn.Close()
                End If
                xBk.Close(0)
                excel.Quit()
                MessageBox.Show(ex.Message, "报表工具", MessageBoxButtons.OK, MessageBoxIcon.Warning)
            End Try

  • 相关阅读:
    IE8下,时间函数问题
    sublime有时候用快捷键时出现的是css的快捷键
    热词高亮并去重
    关于百分比的margin
    手机端后退功能
    CSS3小水滴代码
    关于Gmapping的学习2
    关于概率运动模型
    A*算法的学习
    经典ICP算法
  • 原文地址:https://www.cnblogs.com/top5/p/1591948.html
Copyright © 2011-2022 走看看