网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.查看系统的cpp (C PreProcessor).
.用纯粹的C++编写COM组件.
.C语言库函数(V类字母).
.如何在Win9x/2k下建立共享目录.
.不规则窗体组件源代码.
.活用 SetSelTextBuf.
.Boost源码剖析:C++泛型函数指针.
.C趣味程序百例(20).
.C/C++笔试、面试题目大汇总.
.教您在C/C++中如何构造通用的对象.
.设计的一个计算器类的源代码,很简.
.C / C++的和Java的异常机制.
.在C语言中以编程的方式获取函数名.
.DrawDib函数组的使用.
.用c写的一个日历文件.
.C++ Builder 初学问与答(七).
.Windows Sockets:操作顺序.
.VB利用API函数设定屏幕颜色数.
.Delphi中建表.
.C++/VC++编程的疑难问题及解答.

《用做好的Excel報表模板來做報表》

发表日期:2008-3-8


小弟獻醜一回了,各位大俠請不要砸我,要砸輕點砸,這兩天感冒了
    --2005、07、14
《用做好的Excel報表模板來做報表》
首先需要有個已經做好的excel報表模板,本例的是:tabOrder.xls
裡面技術不多,就是復制模板的時候有點技巧
Private Sub Command1_Click()
    '訂貨單報表
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
   
    Dim strPubConnect As New ADODB.Connection
    With strPubConnect
        .ConnectionString = "Provider=SQLOLEDB.1;PassWord=sa;Persist Security Info=True;User ID=sa;Initial Catalog=Northwind;Data Source=A382"
        .CommandTimeout = 0
        .Open
    End With
   
    Dim rsQuery As New ADODB.Recordset
    Dim strSql As String
    Dim strPathName As String
    Dim strPathExcel As String
    Dim intCountNum As Integer
       
    strPathExcel = "D:\ProdUCt Skill\ToExcel\tabOrder.xls" 'excel報表模板路徑(一般放在網絡盤,因為公司的報表會集中在一塊)
   
    DialogReport.DefaultExt = "*.xls"
    DialogReport.Filter = "Excel(*.xls)*.xls"
    DialogReport.ShowSave
    strPathName = DialogReport.FileName    If strPathName = strName Then
        Screen.MousePointer = 0
        Exit Sub
    End If
    If strPathName = "" Then
        Screen.MousePointer = 0
        Exit Sub
    End If
   
    Set xlApp = New Excel.Application
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Open(strPathExcel)
    Set xlSheet = xlBook.Worksheets(1)
    xlApp.DataEntryMode = xlOff
   
    Dim intPages As Integer
    Dim intOrderI As Integer
   
    '**********************統計有多少頁********************
    Set rsQuery = New ADODB.Recordset
    strSql = "select OrderID,CustomerID,EmployeeID,ShipVia,Freight,ShipName,ShipCity,ShipPostalcode from orders"
    rsQuery.Open strSql, strPubConnect, adOpenStatic
        If Not rsQuery.EOF Then
            If (rsQuery.RecordCount / 23) - Int(rsQuery.RecordCount / 23) > 0 Then
                intPages = Int(rsQuery.RecordCount / 23) + 1
            Else
                intPages = Int(rsQuery.RecordCount / 23)
            End If
            If intPages = 0 Then
                intPages = 1
            End If
           
            rsQuery.Close
        Else
            rsQuery.Close
        End If
    '**********************統計有多少頁********************
   
    '**********************根據統計出來的頁數進行復制******
    For intOrderI = 1 To intPages - 1
        xlSheet.Range("A1:R52").Copy Destination:=xlSheet.Range("A" & Trim(Str(52 * intOrderI + 1)))
    Next
    '**********************根據統計出來的頁數進行復制******
   
    '父表
'    Dim intCount As Integer
    Dim intJ As Integer
    Set rsQuery = New ADODB.Recordset
    strSql = "select top 1 EmployeeID,LastName,FirstName,Title,HireDate,City,Region,PostalCode,Country,HomePhone,Address from Employees"
    rsQuery.Open strSql, strPubConnect, adOpenStatic
   
    If rsQuery.EOF = False Then
        For intJ = 0 To intPages - 1
            xlSheet.Cells(52 * intJ + 6, 3) = rsQuery("EmployeeID") & ""
            xlSheet.Cells(52 * intJ + 7, 3) = rsQuery("FirstName") & ""
            xlSheet.Cells(52 * intJ + 8, 3) = rsQuery("HomePhone") & ""
            xlSheet.Cells(52 * intJ + 9, 3) = rsQuery("HomePhone") & ""
            xlSheet.Cells(52 * intJ + 10, 3) = rsQuery("LastName") & ""
            xlSheet.Cells(52 * intJ + 11, 3) = rsQuery("Address") & ""
            xlSheet.Cells(52 * intJ + 10, 7) = rsQuery("PostalCode") & ""
'            xlSheet.Cells(52 * intJ + 8, 7) = rsQuery("sum_money") & ""
            xlSheet.Cells(52 * intJ + 7, 7) = rsQuery("city") & ""
            xlSheet.Cells(52 * intJ + 9, 7) = rsQuery("title") & ""
        Next
    End If
    Set rsQuery = Nothing
  
   
    '子表
    Set rsQuery = New ADODB.Recordset
    strSql = "select OrderID,CustomerID,EmployeeID,ShipVia,Freight,ShipName,ShipCity,ShipPostalcode from orders"
    rsQuery.Open strSql, strPubConnect, adOpenStatic
   
    If (rsQuery.RecordCount / 23) - Int(rsQuery.RecordCount / 23) > 0 Then
        intPages = Int(rsQuery.RecordCount / 23) + 1
    Else
        intPages = Int(rsQuery.RecordCount / 23)
    End If
    If intPages = 0 Then
        intPages = 1
    End If
   
    For intOrderI = 1 To intPages - 1
        xlSheet.Range("A1:R52").Copy Destination:=xlSheet.Range("A" & Trim(Str(52 * intOrderI + 1)))
    Next
   
    Dim n As Integer
    Dim i As Integer
    Dim dboMoney As Double
    i = 0
    If rsQuery.EOF = False Then
        For n = 1 To rsQuery.RecordCount
            If n = 23 * (i + 1) + 1 Then
                i = i + 1
            End If
'            xlSheet.Cells(52 * i + 13 + n - (23 * i), 1) = n
            xlSheet.Cells(52 * i + 13 + n - (23 * i), 2) = rsQuery("CustomerID") & ""
            xlSheet.Cells(52 * i + 13 + n - (23 * i), 3) = rsQuery("OrderID") & ""
            xlSheet.Cells(52 * i + 13 + n - (23 * i), 4) = rsQuery("ShipName") & ""
            xlSheet.Cells(52 * i + 13 + n - (23 * i), 5) = rsQuery("Freight") & ""
            xlSheet.Cells(52 * i + 13 + n - (23 * i), 6) = rsQuery("OrderID") & ""
            xlSheet.Cells(52 * i + 13 + n - (23 * i), 7) = rsQuery("ShipVia") & ""
            xlSheet.Cells(52 * i + 13 + n - (23 * i), 8) = rsQuery("ShipPostalcode") & ""
'            dboMoney = dboMoney + rsQuery("money") & ""
            If n = rsQuery.RecordCount Then
                xlSheet.Cells(52 * i + 13 + n - (23 * i) + 1, 3) = "( 以下空白 )"
            End If
            rsQuery.MoveNext
        Next n
    End If
    Set rsQuery = Nothing
   
    strCompanyID = ""
    strOutDate = ""
    xlBook.SaveAs strPathName
    strName = strPathName
    xlApp.Visible = True
''    xlBook.Close
    Set xlApp = Nothing
    Screen.MousePointer = 0
End Sub
這個報表被分成了兩部分,第一部分是供應商的基本資料,下一部分產品資料。(一個供應商對應N多的產品資料)
這樣方便於根據每個供應商來做成各自的報表,其中本例中所引用的數據是Sql數據庫Employees表和orders表
中的資料,不過我是為了能夠體現出這個報表,而自己手邊又沒有完善的數據,sql語句自己可以靈活的寫,
可以自己寫成些統計之和等都可以實現。
相關EXCEL圖片如下:《用做好的Excel報表模板來做報表》
上一篇:自定义控件(模板+数据绑定) 人气:850
下一篇:Net是未来的趋势吗? 人气:504
浏览全部C/C++的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐