把需要报表的数据送往EXCEL通用报表组件
来源:互联网 发布:商城系统 源码 编辑:程序博客网 时间:2024/04/29 23:03
利用VB.Net开发出一个通用的报表组件。该组件具有灵活、动态报表功能,用户可以选择其报表内容,报表数据不仅用户可以控制打印,还可以多种文件格式保存。现在把它实现的方法及过程阐述如下:
实现原理:利用EXCEL强大的电子表格功能,把我们需要报表的数据送往EXCEL。同时经过一定的控制,提供给用户一个操作界面就达到目的。这一总个过程,都封装到一个组件中,供软件直接调用。
开发步骤
1、启动Visual Studio.NET。在新建项目中选择Visual Basic项目,在模板中选择类库,在名称中输入类库文件名如Report确定,则进入类库开发环境中,把Class1换名为CReport。在项目菜单中加入引用,找到 Microsoft Excel 9.0 Object Library 确定后则引用了Excel。在类名最上面写上Imports System Imports System.Windows.Forms,Imports Excel.ApplicationClass,Imports Excel.XlLineStyle,Imports Excel.XlPattern,Imports Excel.XlBorderWeight,Imports Excel.Constants,Imports Excel.XlBordersIndex八条引用语句。这里我们引用了有关.NET的系统命名空间和Excel应用及常量的命名空间。即:
Imports System
Imports System.Windows.Forms
Imports Excel.ApplicationClass
Imports Excel.XlLineStyle
Imports Excel.XlPattern
Imports Excel.XlBorderWeight
Imports Excel.Constants
Imports Excel.XlBordersIndex
2、定义命名空间为Reopot,即:
Namespace Reopot
3、定义公共类CReport,该类为供应用软件调用。定义类CReport的私有变量frmSetup,该变量将启动一个供用户操作的界面。定义类CReport的属性DataGrid,该属性供用户传送一待打印的数据网格名,定义类CReport的属性DataTable,该属性供用户传送一待打印的数据表格名。定义类CReport的公有方法Run,该方法启动该组件。分别编写它们的功能。代码如下:
Public Class CReport
Dim frmSetup As New frmPrintSetup()
Public Property DataGrid() As DataGrid
Get
' DataTable = mDataTable
End Get
Set(ByVal Value As DataGrid)
frmSetup.DataTable = Value.DataSource
frmSetup.MainTitle = Value.CaptionText
End Set
End Property
Public Property DataTable() As DataTable
Get
' DataTable = mDataTable
End Get
Set(ByVal Value As DataTable)
frmSetup.DataTable = Value
End Set
End Property
Public Sub Run()
frmSetup.ShowDialog()
frmSetup = Nothing
End Sub
End Class
4、定义公共类CPublicExcel,该类主要定义Excel的程序对象,启动Excel并打印及保存报表。代码如下:
'这个类是不改变的 (公共性)
Public Class CPublicExcel
Public xlApp As New Excel.Application() 'excel程序对象
'Public gblnSaveReport As Boolean ' 该Report是否输出成为XLS文件
'Public gstrPath As String ' 该Report输出成为XLS的文件名
Private ExcelWasNotRunning As Boolean '原来的excel程序的状态
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal
hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
As Long
'识别excel是否运行
Private Function DetectExcel() As Boolean
Const WM_USER = 1024
Dim hWnd As Long
hWnd = FindWindow("XLMAIN", 0)
If hWnd <> 0 Then ' hWnd <> 0 means Excel is
running.
SendMessage(hWnd, WM_USER + 18, 0, 0)
DetectExcel = True
Else
DetectExcel = False
End If
End Function
'打开excel
Public Sub OpenExcelSheet()
ExcelWasNotRunning = Not DetectExcel()
If ExcelWasNotRunning Then
xlApp = GetObject("", "Excel.Application")
Else
xlApp = GetObject(, "Excel.Application")
End If
xlApp.Workbooks.Add() '(ExcelSheetName)
End Sub
'打印预览报表
Public Sub PrintPreview()
xlApp.Caption = "报表"
xlApp.DisplayAlerts = False
xlApp.Visible = True
xlApp.ActiveWorkbook.PrintPreview()
xlApp.Visible = False
End Sub
'打印报表
Public Sub Print()
xlApp.DisplayAlerts = False
xlApp.Visible = False
xlApp.ActiveWorkbook.PrintOut()
End Sub
'保存报表
Public Sub SaveAs(ByVal FileName As String)
Dim file As System.IO.File
Try
'If file.Exists(FileName) = True Then
' file.Delete(FileName)
'End If
xlApp.ActiveWorkbook.SaveAs(FileName)
Catch ex As Exception 'When y = 0 ' Catch the error.
MsgBox(ex.ToString) ' Show friendly error message.
' Beep() ' Beep after error processing.
End Try
End Sub
End Class
实现原理:利用EXCEL强大的电子表格功能,把我们需要报表的数据送往EXCEL。同时经过一定的控制,提供给用户一个操作界面就达到目的。这一总个过程,都封装到一个组件中,供软件直接调用。
开发步骤
1、启动Visual Studio.NET。在新建项目中选择Visual Basic项目,在模板中选择类库,在名称中输入类库文件名如Report确定,则进入类库开发环境中,把Class1换名为CReport。在项目菜单中加入引用,找到 Microsoft Excel 9.0 Object Library 确定后则引用了Excel。在类名最上面写上Imports System Imports System.Windows.Forms,Imports Excel.ApplicationClass,Imports Excel.XlLineStyle,Imports Excel.XlPattern,Imports Excel.XlBorderWeight,Imports Excel.Constants,Imports Excel.XlBordersIndex八条引用语句。这里我们引用了有关.NET的系统命名空间和Excel应用及常量的命名空间。即:
Imports System
Imports System.Windows.Forms
Imports Excel.ApplicationClass
Imports Excel.XlLineStyle
Imports Excel.XlPattern
Imports Excel.XlBorderWeight
Imports Excel.Constants
Imports Excel.XlBordersIndex
2、定义命名空间为Reopot,即:
Namespace Reopot
3、定义公共类CReport,该类为供应用软件调用。定义类CReport的私有变量frmSetup,该变量将启动一个供用户操作的界面。定义类CReport的属性DataGrid,该属性供用户传送一待打印的数据网格名,定义类CReport的属性DataTable,该属性供用户传送一待打印的数据表格名。定义类CReport的公有方法Run,该方法启动该组件。分别编写它们的功能。代码如下:
Public Class CReport
Dim frmSetup As New frmPrintSetup()
Public Property DataGrid() As DataGrid
Get
' DataTable = mDataTable
End Get
Set(ByVal Value As DataGrid)
frmSetup.DataTable = Value.DataSource
frmSetup.MainTitle = Value.CaptionText
End Set
End Property
Public Property DataTable() As DataTable
Get
' DataTable = mDataTable
End Get
Set(ByVal Value As DataTable)
frmSetup.DataTable = Value
End Set
End Property
Public Sub Run()
frmSetup.ShowDialog()
frmSetup = Nothing
End Sub
End Class
4、定义公共类CPublicExcel,该类主要定义Excel的程序对象,启动Excel并打印及保存报表。代码如下:
'这个类是不改变的 (公共性)
Public Class CPublicExcel
Public xlApp As New Excel.Application() 'excel程序对象
'Public gblnSaveReport As Boolean ' 该Report是否输出成为XLS文件
'Public gstrPath As String ' 该Report输出成为XLS的文件名
Private ExcelWasNotRunning As Boolean '原来的excel程序的状态
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal
hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
As Long
'识别excel是否运行
Private Function DetectExcel() As Boolean
Const WM_USER = 1024
Dim hWnd As Long
hWnd = FindWindow("XLMAIN", 0)
If hWnd <> 0 Then ' hWnd <> 0 means Excel is
running.
SendMessage(hWnd, WM_USER + 18, 0, 0)
DetectExcel = True
Else
DetectExcel = False
End If
End Function
'打开excel
Public Sub OpenExcelSheet()
ExcelWasNotRunning = Not DetectExcel()
If ExcelWasNotRunning Then
xlApp = GetObject("", "Excel.Application")
Else
xlApp = GetObject(, "Excel.Application")
End If
xlApp.Workbooks.Add() '(ExcelSheetName)
End Sub
'打印预览报表
Public Sub PrintPreview()
xlApp.Caption = "报表"
xlApp.DisplayAlerts = False
xlApp.Visible = True
xlApp.ActiveWorkbook.PrintPreview()
xlApp.Visible = False
End Sub
'打印报表
Public Sub Print()
xlApp.DisplayAlerts = False
xlApp.Visible = False
xlApp.ActiveWorkbook.PrintOut()
End Sub
'保存报表
Public Sub SaveAs(ByVal FileName As String)
Dim file As System.IO.File
Try
'If file.Exists(FileName) = True Then
' file.Delete(FileName)
'End If
xlApp.ActiveWorkbook.SaveAs(FileName)
Catch ex As Exception 'When y = 0 ' Catch the error.
MsgBox(ex.ToString) ' Show friendly error message.
' Beep() ' Beep after error processing.
End Try
End Sub
End Class
- 把需要报表的数据送往EXCEL通用报表组件
- 基于EXCEL的WEB报表输出组件
- 基于EXCEL的WEB报表输出组件
- 基于EXCEL的WEB报表输出组件
- 通过POI组件把数据写入到Excel文件中
- 用jxl导入报表Excel数据,如果excel是日期格式的话需要减去8小时
- 用excel组件生成excel报表
- 把数据转成excel格式的方法
- excel函数vlookup--查找需要的数据
- 送往网吧的验尸报告
- 把数据导出Excel 出现异常:HRESULT:0x800A03EC 需要注意数据中的"="号
- DCOM技术自定义Excel模版报表组件的一些构思(适用于Excel 2003)
- 报表需要的
- bmp图片数据送往SQL SERVER
- asp生成excel数据报表
- asp生成excel数据报表
- 数据报表导出Excel功能
- java数据写入Excel报表
- gif的动画图片,可否实现文字水印和图片水印的效果呢?
- 回到原来 - 林忆莲
- 猜一猜: Console.WriteLine(5000.88 + 5000 == 10000.88); 结果为True还是False?
- 一位人事经理对中国职业人的批判
- OpenGL之应用程序框架
- 把需要报表的数据送往EXCEL通用报表组件
- Linux下将Tomcat配置成为系统服务
- Oracle维护常用SQL语句
- Grady Booch 先生简介
- James Rumbaugh 先生简介
- Ivar Jacobson 先生简介
- OracleDBA新手经常碰到的10个Oracle错误
- Oracle 快速删除数据字典管理的表空间
- 自从笔记本丢了以后