文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>asp.net生成excel高级报表

asp.net生成excel高级报表

时间:2010-08-20  来源:szyicol

根据该博文 :http://www.cnblogs.com/xiaobier/archive/2008/10/13/1310399.html

 

自己做了一个excel账单

 

跟他不同的是,我的数据是行和列都是动态,而不是简单的行动态!

 

格式原图:

 

 

 生成的结果

 

 

 

 个人觉得用这种方式是非常的方便,asp.net只需要获取数据填写到excel中,其它事情由宏来处理,也就是说,今天客户要这个格式,明天要那个格式,只需要调整一下模板中的宏就好了,其它就不动了!

 

贴点代码给自己存档


Function FillData() As String
Dim a As String
On Error GoTo err
Dim re As Integer
'首先要确认有多少类别
re = GetTypeName

'插入数据
InsertData re

Sheet1.Select
Sheet1.Range("A1").Select
FillData = ""
Exit Function
err:
FillData = err.Description
End Function


Sub InsertData(cols As Integer)
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim x As Integer

Dim count1 As Integer
Dim count2 As Integer
Dim t1 As String
Dim t2 As String
Dim b As Boolean


Sheet1.Select

Sheet1.Range("B1").FormulaR1C1 = Sheet2.Range("C2").FormulaR1C1

count1 = Sheet2.UsedRange.Rows.count
For j = 2 To count1
    '先插入一行,将主数据填入
    Sheet1.Rows("5:5").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Sheet1.Range("A5").Select
    Selection.NumberFormatLocal = "@"
    Sheet1.Range("A5").FormulaR1C1 = Sheet2.Range("E" & j).FormulaR1C1
    Sheet1.Range("B5").FormulaR1C1 = Sheet2.Range("B" & j).FormulaR1C1
    Sheet1.Range("C5").FormulaR1C1 = Sheet2.Range("D" & j).FormulaR1C1
    Sheet1.Range("D5").FormulaR1C1 = Sheet2.Range("I" & j).FormulaR1C1
    Sheet1.Range("E5").FormulaR1C1 = Sheet2.Range("H" & j).FormulaR1C1
    Sheet1.Range("F5").FormulaR1C1 = Sheet2.Range("F" & j).FormulaR1C1
    Sheet1.Range("G5").FormulaR1C1 = Sheet2.Range("G" & j).FormulaR1C1
    '这是主信息的keyid
    t1 = Sheet2.Range("A" & j).FormulaR1C1
    '开始插入明细
    count2 = Sheet3.UsedRange.Rows.count
    For i = 2 To count2
        b = False

        '如果订单ID相同
        If t1 = Sheet3.Range("A" & i).FormulaR1C1 Then
            '这是科目和币别
            t2 = Sheet3.Range("B" & i).FormulaR1C1 & "(" & Sheet3.Range("C" & i).FormulaR1C1 & ")"
            For k = 8 To 7 + cols
                '如果是科目相同
                If t2 = Sheet1.Range(Cells(3, k), Cells(3, k)).FormulaR1C1 Then
                    x = k
                    Do While x > 0
                        '分类也相同
                        If Sheet1.Range(Cells(2, x), Cells(2, x)).FormulaR1C1 = Sheet3.Range("E" & i).FormulaR1C1 Then
                        
                            Sheet1.Range(Cells(5, k), Cells(5, k)).FormulaR1C1 = Sheet3.Range("D" & i).FormulaR1C1
                            Sheet1.Range(Cells(5, k), Cells(5, k)).Select
                                Selection.NumberFormatLocal = "0.00_ "
                                With Selection
                                    .HorizontalAlignment = xlRight
                                    .VerticalAlignment = xlCenter
                                    .WrapText = False
                                    .Orientation = 0
                                    .AddIndent = False
                                    .IndentLevel = 0
                                    .ShrinkToFit = False
                                    .ReadingOrder = xlContext
                                    .MergeCells = False
                                End With
    
                            b = True
                            Exit Do
                        End If
                        x = x - 1
                    Loop
                End If
                If b = True Then Exit For
            Next k
        End If

    Next i
Next j

Sheet1.Rows(4).Select
Selection.Delete Shift:=xlUp
Sheet1.Rows(3 + count1).Select
Selection.Delete Shift:=xlUp


Dim y As Integer
For y = 1 To 7
    Sheet1.Columns(y).Select
    Selection.EntireColumn.AutoFit
Next y


'计算不同币别的总计
Sheet3.Select
Dim ic As Integer
ic = 1
t1 = ""
t2 = ""
For i = 2 To count2
    t1 = Sheet3.Range("C" & i).FormulaR1C1
    
    If InStr(1, t2, t1) = 0 Then
        Sheet3.Range("A" & (count2 + ic)).FormulaR1C1 = "=SUMIF(C[2] ,""" & t1 & """,C[3])"
        Sheet1.Range("B" & Sheet1.UsedRange.Rows.count).FormulaR1C1 = Sheet1.Range("B" & Sheet1.UsedRange.Rows.count).FormulaR1C1 & "    " & t1 & ":" & Sheet3.Range("A" & (count2 + ic)).Value
        t2 = t2 & t1 & ","
        ic = ic + 1
    End If
Next i


End Sub

Function GetTypeName() As Integer
'取得有多少大类
Dim re As Integer
Dim i As Integer
Dim count As Integer

Dim TypeName() As String

Dim sTypeName As String
Dim t1 As String
count = Sheet3.UsedRange.Rows.count
For i = 2 To count
    t1 = Sheet3.Range("E" & i).FormulaR1C1
    If InStr(1, sTypeName, t1) = 0 Then
        sTypeName = sTypeName & t1 & ","
    End If
Next i
If Len(sTypeName) > 0 Then
    sTypeName = Mid(sTypeName, 1, Len(sTypeName) - 1)
End If

TypeName = Split(sTypeName, ",")
count = UBound(TypeName) + 1


GetTypeName = InsertType(count, TypeName)

 
End Function
Function InsertType(count As Integer, stype() As String) As Integer
    '循环类别列
    Dim re As Integer
    
    Dim i As Integer
    If count = 0 Then
        Exit Function
    End If
    Sheet1.Select
    For i = 1 To count
        Sheet1.Range("H2").FormulaR1C1 = stype(i - 1)
        re = re + InsertSubject(stype(i - 1))
    Next i
    Sheet1.Columns("H:H").Select
    Selection.Delete Shift:=xlToLeft
    InsertType = re
End Function
Function InsertSubject(s As String) As Integer
    
    '插入科目
    Dim re As Integer
    Dim i As Integer
    Dim curCount As Integer
    Dim t1 As String
    Sheet1.Select
    
    count = Sheet3.UsedRange.Rows.count
For i = 2 To count
    If Sheet3.Range("E" & i).FormulaR1C1 = s Then
        t1 = Sheet3.Range("B" & i).FormulaR1C1 & "(" & Sheet3.Range("C" & i).FormulaR1C1 & ")"
        Sheet1.Range("H3").FormulaR1C1 = t1
        '设置公式
        Sheet1.Range("H6").Select
        Sheet1.Range("H6").FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"
        Selection.NumberFormatLocal = "0.00_ "
        With Selection
            .HorizontalAlignment = xlRight
            .VerticalAlignment = xlCenter
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        
        Sheet1.Columns("H:H").Select
        
        '自动列宽
        Selection.EntireColumn.AutoFit
        re = re + 1
        Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        curCount = curCount + 1
    End If
Next i
    

    Sheet1.Range(Cells(2, 9), Cells(2, 8 + curCount)).Merge
    
    InsertSubject = re
End Function

 

 

 

贴代码 的要换一下了,非常烂!!

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载