快速业务通道

生成Excel高级报表

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-04-12

 

此示例主要用到了excel引用,宏。先看下效果图:


 

这里用的数据库是SQL server.说一下思路:

先制作一个excel样式,如上图,我这里标题是固定的,部门和日期是动态的,列名是固定的,中间那块数据是动态的,部门考勤员名字是动态的,其他都是静态.

把样式先做好.以下图是我先做好的样式:

 


8,9为什么要留两行,是为了第10行的统计函数设置,合计那行是已经设置好excel公式的,如C10是Sum(C8:C9)依此类推,如果往8,9中间插入行那excel

会自动扩展第10行的公式,如原是Sum(C8:C9)那插入一行就自动变成sum(C8:C10),这个大家应该都知道.而且往8,9中间插入行他的格式是根前一行

相同的,所以就这里就设置好了动态数据区的格式了.其他几个地方也是一样.

第三行的日期我是让他引用sheet2中的A2,部门是B2,考勤员是C2

下图是Sheet2,其中sheetdate,department,oper是列名,用来向sheet2这三个字段插入记录的


 

效果图中的主要数据区我是放在sheet3中,以下是sheet3样式,同样是列名,以效果图中是对应的.


 

sheet2只有一条记录,所以直接在sheet1对应处引用即可,如何让sheet1中引用sheet3中的数据,因为sheet3中的记录是动态的,

也不知道有多少行,所以要利用宏了.写宏其实也很简单,我这里也没写多少行代码.

Sub Macro1()
''
''
 Macro1 Macro
''
 宏由 XiaoBier 录制,时间: 2008-9-24
''
''
 快捷键: Ctrl+q
''

Dim i As Integer
Dim count As Integer
Dim rownum As Integer
count 
= Sheet3.UsedRange.Rows.count - 1 ''这里是获取sheet3中的记录行数,减掉列名首行

Sheets(
"Sheet1").Select  ''选中sheet1

''在sheet1中的8和9行之间插入行数
For i = 3 To count Step 1
    Sheet1.Range(
"A9").Select
        Selection.EntireRow.Insert
Next i

rownum 
= 1

''将sheet1中数据行引用sheet3中的数据
For i = 8 To count + 7 Step 1

    Range(
"A" & i) = rownum
    
    Range(
"B" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Sheet3!R[-6]C[-1],"""")"
    
    Range(
"C" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
    
    Range(
"D" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
    
    Range(
"E" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
    
    Range(
"F" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
    
    Range(
"G" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
    
    Range(
"H" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
    
    Range(
"I" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
    
    Range(
"J" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
    
    Range(
"K" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
    
    Range(
"L" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
    
    Range(
"M" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
    
    Range(
"N" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
    
    Range(
"O" & i) = Null
    rownum 
= rownum + 1
Next i

End Sub

''这个子程序让一打开excel就自动调用宏
Sub auto_open()
Call Macro1
End Sub

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号