.Net 使用 Intercom OP 调用 Excel 实现报表

来源:互联网 发布:易语言源码网站 编辑:程序博客网 时间:2022/05/28 06:35
 
回来写博客拉!原则上是每日一篇,不过周末一般比较偷懒一点,嘿嘿。。。。
Anyway, 今天复习的东西还是比较实用的(应该说每天的复习重点都很实用)
.net 一般报表都用水晶,但当用户要改改东西就是 excel, word 比较好了,黑帅当年的毕业设计就是用的这个技术
首先, 因为 Excel, Word 之类都是 COM 组件,而不是 .net (关于 COM 和 .net 的概念就不说了啊,这方面的资料一堆的)
要调用 3 个 Namespace
System.Reflection 用来取得 Assmbly 的,
System.Runtime.InteropServices 这个是用来处理 COM 的异常
Excel, 不说大家也知道是啥
 
Excel 四元素
1.    Excel.Application 调用的主程序
2.       Excel.workbook
3.       Excel.worksheet
4.       excel.chart (图表,没错,这里我就教大家做一个图文并茂的 Excel 报表)
 
初始化
xlsBook = xlsapp.Workbooks.Add()
xlsdoc = xlsBook.Worksheets.Add()
xlsdoc.Name = "Report" 这个就是名字拉
xlschart = xlsBook.Charts.Add
 
这个就是具体的
Dim excel_Cell = xlsdoc.Cells(X,Y)
这个就是具体的格子拉
要赋值的话就是 .value2
 
图表方面,用Excel.XlChartType. 选择
比如说xl3DPie
.SetSourceData 来额定区域
 
还有就是 App Visible 居然也是可以调的
最后就是退出好像有点问题,所以用了两次 Finailize
 
Anyway, 具体的代码如下,这是 100% 原创(Shuan 哥你也写了很多呢D)请注意源码例子的完整性,咳咳,设计直接抽取的,懒得改了,不懂得问俺,哈哈
    Public Overloads Sub ExportAgenttoExcel(ByVal DataS As System.Data.DataTable, ByVal Comdat As String(), ByVal id As Integer)
        
Dim xlsapp As New Excel.Application
        
Dim xlsBook As Excel.Workbook
        
Dim xlsdoc As Excel.Worksheet
        
Dim xlschart As Excel.Chart

        xlsBook 
= xlsapp.Workbooks.Add()
        xlsdoc 
= xlsBook.Worksheets.Add()
        xlsdoc.Name 
= "Report"
        xlschart 
= xlsBook.Charts.Add

        
Dim count(Comdat.Length - 1As Integer
        
Dim i, j As Integer

        
For i = 0 To Comdat.Length - 1 'Count initialization
            count(i) = 0
        
Next

        
For i = 0 To DataS.Rows.Count - 1
            
For j = 0 To DataS.Columns.Count - 1 'Fill the actual Agent
                If DataS.Columns(j).ColumnMapping <> MappingType.Hidden Then
                    
Dim excel_Cell = xlsdoc.Cells(i * DataS.Columns.Count + j + 11)
                    excel_Cell.value2 
= DataS.Columns(j).Caption
                    excel_Cell 
= xlsdoc.Cells(i * DataS.Columns.Count + j + 12)
                    excel_Cell.value2 
= DataS.Rows(i).Item(j)
                
End If
            
Next
            count(DataS.Rows(i).Item(id)) 
+= 1
        
Next
        
Dim chartdoc = xlsBook.Worksheets.Add()
        chartdoc.name 
= "Chart"
        
For i = 1 To count.Length
            
With chartdoc
                .Range(
"A" + i.ToString()).Value = Comdat(i - 1)
                .Range(
"B" + i.ToString()).Value = count(i - 1)
            
End With
        
Next

        
With xlschart
            .ChartType 
= Excel.XlChartType.xl3DPie  'Here we are setting the type of chart we want 
            .SetSourceData(chartdoc.Range("A1:B4")) 'This is the range from where the chart will be built 

            .PlotArea.Interior.ColorIndex 
= 2
            .ChartArea.Interior.ColorIndex 
= 2
            .ChartArea.Interior.PatternColorIndex 
= 1
            .Location(Excel.XlChartLocation.xlLocationAsObject, 
"Chart")
        
End With
        xlsBook.SaveAs(
"tmpXls.xls")
        xlsapp.Visible 
= True
        
If (Not xlsapp Is NothingThen
            xlsapp.Quit()
            xlsapp 
= Nothing
            GC.Collect()
            GC.WaitForPendingFinalizers()
            GC.Collect()
            GC.WaitForPendingFinalizers()
        
End If
    
End Sub