晓鸥 的个人资料Single Running照片日志列表 工具 帮助

日志


2月1日

编写VBA代码,生成EXCEL

再次针对那个小的系统进行EXCEL输出的开发。

这次不仅仅是复制粘贴,因为客户不需要浏览数据,而是直接输出一个EXCEL文件。

------------------------------------------------------------------------------------

1、数据库操作代表,读取数据,存入recordSet内存对象;

2、遍历内存对象,依次将值写入已经创建的excel应用对象;

3、调整每个工作单的格式,以求美观;

4、弹出对话框,用户选择保存在何处,然后保存excel文件。

------------------------------------------------------------------------------------

image

先形后事,看看操作界面。比较简单的哦,默认帮你填写好当前年份月份,当然你还可以自己进行输入。然后点击输出就可以了哦。

所有的代码全部由该按钮button进行触发。

image

创建一个excel对象,全局控制excel的工作是必须的第一步。

要命的拼接SQL查询语句也是必须的工作

image

剩下的事情就简单好办了哦。

image

遍历数据对象集合,套两个循环,一次把每一cel的值都填写到对应的位置。

为了提高效率,发现如果每个格子都处理,则很消耗资源和时间。于是做了一次判定。如果是空值或者0值,则不填写。一下子效率高起来。毕竟测试的时候数据量还是比较小的。

可以想象,这个做法是最最保险的做法,但是效率似乎远远没有复制粘贴来的好。

复制粘贴的效率如此之高,但是看、查手册后,并没有发现针对recordSet相关的复制接口,因此也就不能直接使用了。那以后再议吧。

-------------------------------------------------------------------------------------

最后,因为不是弹出一个excel,而是后台进行处理,而且时间很长。需要多个工作单的处理,所以需要加上进度条。这个进度条需要使用微软的activeX,可能在2007环境下还需要信任设置,否则是不起作用的。office 2007的设置真麻烦哦。

image

最后的代码工作就是让excel的application反复创建worksheet,并且移动一个位置,再重命名,名就是日期。

image

一切都结束后就会弹出一个对话框,供你保存excel文件哦。

image

看一下打开这个excel文件的效果哦。

image

最后那个excel默认的开启sheet1~sheet3我不知道如何删除,有高手指点一二吧。

1月16日

OLE 从ACCESS 到 EXCEL

最近独立开发一个用access做的小单机应用玩玩.

基本需求就是录入一个表单,然后汇总数据.

由于access中不能使用report来导出内存对象,貌似如此.因此只能制作一个form,然后加载已经完成select的数据.

添加一个button,编写click事件代码.

首先从网络上找了一段添加OLE对象的代码:

Public MyXL As Object
    '打开Excel
Sub GetExcel()
    Const ERR_APP_NOTRUNNING As Long = 429
    On Error Resume Next
    Set MyXL = GetObject(, "Excel.Application")
    If Err = ERR_APP_NOTRUNNING Then
    Set MyXL = CreateObject("Excel.Application")
    End If
    MyXL.Application.Visible = True
End Sub
Sub CopyToClip()

    Forms(FormName).SetFocus
    'Forms(FormName).编号.SetFocus
    DoCmd.RunCommand acCmdSelectAllRecords
    'DoCmd.RunCommand acCmdSelectRecord
    DoCmd.RunCommand acCmdCopy
End Sub

Sub CopyToExcel()

    'GetExcel
    MyXL.Application.Workbooks.Add
    MyXL.Application.ActiveSheet.Paste
End Sub

 

----------------------------------------------------------------

这里就不具体说明了.总之结构创建OLE对象,然后开启一个工作簿,并且将内存数据粘贴上去.

数据都过去后,那剩下的就是格式的调整了.在所有属性的调整中,本人一直在寻找相关的帮助手册,MSDN也逛了好几次.不过最后发现自己走错路线,原来这些excel相关的对象属性全部在excel的帮助中,一直去找access或者office tool是不对的.

以后看来OLE到什么,就去对方找帮助手册看对象属性列表即可.

excel中最重要的就是range类,它的成员各类属性可以直接设定我们所需要看到excel形象.

最常用的可能就是value,直接改写内容值.

其次,就是对齐方式.老子看了好久,文档上写的居然是字符串常量,JB的不管用.最后我发急了,不用常量,直接写int值试试看,结果还真的可以.通过测试,原来文档上的常量字符串对应一个int值,这些枚举居然不是字符串值也是情理中,那么该死的MSDN怎么就不写清楚呢.

水平对齐:HorizontalAlignment {1,2,3,4,5}

With MyXL.Application.ActiveSheet.Range("D4")
        .ColumnWidth = 6.5
        .HorizontalAlignment = 3
    End With

貌似测试下来,1就清除对齐,或者是auto,2是left,3是center,4是right,5未知什么应该也用不到.

于是本人联想到垂直对齐玩玩吧,

代码继续修改:VerticalAlignment

With MyXL.Application.ActiveSheet.Range("D4")
        .VerticalAlignment = 1
        .HorizontalAlignment = 3
    End With

貌似再次发现:1就是上top,2就是中间center,3就是下bottom,4未知

------------------------------------------------------------------------------

修改对齐后,还有修改字体,还好这个比较简单:

With MyXL.Application.Selection.Font
   .Name = "宋体"
   .Size = 20
   End With

 

--------------------------------------------------------------------------------

感觉做OLE最郁闷的其实就是根据客户要求完善格式,以求美观,这个太没有技术,但又太重要了.

接下来就是要搞搞画线的问题了..............