frmExcelPrint.vb
上传用户:jx_fiona
上传日期:2014-03-08
资源大小:1387k
文件大小:9k
源码类别:

打印编程

开发平台:

Others

  1. ' Excel输出、Excel打印预览、Excel模板定制 -- 通打天下报表
  2. ' 将所有的格式、报表统计、图形分析等等借用Excel强大功能
  3. Public Class frmExcelPrint
  4.     Inherits System.Windows.Forms.Form
  5. #Region " Windows 窗体设计器生成的代码 "
  6.     Public Sub New()
  7.         MyBase.New()
  8.         '该调用是 Windows 窗体设计器所必需的。
  9.         InitializeComponent()
  10.         '在 InitializeComponent() 调用之后添加任何初始化
  11.     End Sub
  12.     '窗体重写 dispose 以清理组件列表。
  13.     Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
  14.         If disposing Then
  15.             If Not (components Is Nothing) Then
  16.                 components.Dispose()
  17.             End If
  18.         End If
  19.         MyBase.Dispose(disposing)
  20.     End Sub
  21.     'Windows 窗体设计器所必需的
  22.     Private components As System.ComponentModel.IContainer
  23.     '注意: 以下过程是 Windows 窗体设计器所必需的
  24.     '可以使用 Windows 窗体设计器修改此过程。
  25.     '不要使用代码编辑器修改它。
  26.     Friend WithEvents dataGrid1 As System.Windows.Forms.DataGrid
  27.     Friend WithEvents btnExcelTemplate As System.Windows.Forms.Button
  28.     Friend WithEvents btnExcel As System.Windows.Forms.Button
  29.     Friend WithEvents btnExcelPreview As System.Windows.Forms.Button
  30.     <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
  31.         Me.dataGrid1 = New System.Windows.Forms.DataGrid
  32.         Me.btnExcelTemplate = New System.Windows.Forms.Button
  33.         Me.btnExcel = New System.Windows.Forms.Button
  34.         Me.btnExcelPreview = New System.Windows.Forms.Button
  35.         CType(Me.dataGrid1, System.ComponentModel.ISupportInitialize).BeginInit()
  36.         Me.SuspendLayout()
  37.         '
  38.         'dataGrid1
  39.         '
  40.         Me.dataGrid1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
  41.                     Or System.Windows.Forms.AnchorStyles.Left) _
  42.                     Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
  43.         Me.dataGrid1.CaptionText = "MIS金质打印通  通打天下报表  作者:长江支流  下载:www.webmis.com.cn"
  44.         Me.dataGrid1.DataMember = ""
  45.         Me.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText
  46.         Me.dataGrid1.Location = New System.Drawing.Point(0, 40)
  47.         Me.dataGrid1.Name = "dataGrid1"
  48.         Me.dataGrid1.ReadOnly = True
  49.         Me.dataGrid1.Size = New System.Drawing.Size(712, 408)
  50.         Me.dataGrid1.TabIndex = 13
  51.         '
  52.         'btnExcelTemplate
  53.         '
  54.         Me.btnExcelTemplate.Location = New System.Drawing.Point(392, 8)
  55.         Me.btnExcelTemplate.Name = "btnExcelTemplate"
  56.         Me.btnExcelTemplate.Size = New System.Drawing.Size(312, 23)
  57.         Me.btnExcelTemplate.TabIndex = 11
  58.         Me.btnExcelTemplate.Text = "Excel模板套打、格式、统计分析报表、图形分析"
  59.         '
  60.         'btnExcel
  61.         '
  62.         Me.btnExcel.Location = New System.Drawing.Point(8, 8)
  63.         Me.btnExcel.Name = "btnExcel"
  64.         Me.btnExcel.Size = New System.Drawing.Size(180, 23)
  65.         Me.btnExcel.TabIndex = 10
  66.         Me.btnExcel.Text = "Excel输出"
  67.         '
  68.         'btnExcelPreview
  69.         '
  70.         Me.btnExcelPreview.Location = New System.Drawing.Point(200, 8)
  71.         Me.btnExcelPreview.Name = "btnExcelPreview"
  72.         Me.btnExcelPreview.Size = New System.Drawing.Size(180, 23)
  73.         Me.btnExcelPreview.TabIndex = 12
  74.         Me.btnExcelPreview.Text = "Excel打印预览"
  75.         '
  76.         'frmExcelPrint
  77.         '
  78.         Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
  79.         Me.ClientSize = New System.Drawing.Size(712, 446)
  80.         Me.Controls.Add(Me.dataGrid1)
  81.         Me.Controls.Add(Me.btnExcelTemplate)
  82.         Me.Controls.Add(Me.btnExcel)
  83.         Me.Controls.Add(Me.btnExcelPreview)
  84.         Me.Name = "frmExcelPrint"
  85.         Me.Text = "Excel输出、Excel打印预览、Excel模板定制 -- 通打天下报表"
  86.         CType(Me.dataGrid1, System.ComponentModel.ISupportInitialize).EndInit()
  87.         Me.ResumeLayout(False)
  88.     End Sub
  89. #End Region
  90.     '用Excel打印
  91.     Private Sub btnExcel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcel.Click
  92.         Me.Cursor = Cursors.WaitCursor
  93.         ImportPrint(False)
  94.         Me.Cursor = Cursors.Default
  95.     End Sub
  96.     '直接调用Excel打印预览,用户可以调整列宽、设置页面、页边距、页眉页脚、调整居中方式
  97.     Private Sub btnExcelPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcelPreview.Click
  98.         Me.Cursor = Cursors.WaitCursor
  99.         ImportPrint(True)
  100.         Me.Cursor = Cursors.Default
  101.     End Sub
  102.     '用Excel定制模板打印,所有的格式、报表统计、图形分析等等借用Excel强大功能
  103.     Private Sub btnExcelTemplate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcelTemplate.Click
  104.         Me.Cursor = Cursors.WaitCursor
  105.         ExcelTemplatePrint()
  106.         Me.Cursor = Cursors.Default
  107.     End Sub
  108.     '加载打印示例数据
  109.     Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  110.         Me.dataGrid1.DataSource = Me.GetDataSource()
  111.     End Sub
  112.     Private Function GetDataSource() As System.Data.DataTable
  113.         Return PrintDataSource.GetDataSource(10)
  114.     End Function
  115.     Private Sub ImportPrint(ByVal IsPrintPreview As Boolean)
  116.         Dim dt As New System.Data.DataTable
  117.         dt = CType(dataGrid1.DataSource, DataTable)
  118.         Dim font As New Font("黑体", 21, FontStyle.Bold)
  119.         '用Excel打印,步骤为:打开、写数据、打印预览、关闭
  120.         Dim excel As New GoldPrinter.ExcelAccess
  121.         excel.Open()
  122.         excel.FormCaption = Me.dataGrid1.CaptionText    '"MIS金质打印通  通打天下报表"
  123.         excel.MergeCells(1, 1, 1, dt.Columns.Count)     '合并单元格写标题,并设置字体
  124.         excel.SetFont(1, 1, 1, dt.Columns.Count, font)
  125.         excel.SetCellText(1, 1, 1, dt.Columns.Count, "为灾区募捐,为中国程序员呐喊")
  126.         '打印网格及网格线
  127.         excel.SetCellText(dt, 3, 1, True)
  128.         '可以在打印预览时单击“页边距”,调整每列的宽。单击“设置页边距”,选择水平居中方式
  129.         If (IsPrintPreview) Then
  130.             excel.PrintPreview()
  131.             excel.Close()
  132.         Else
  133.             excel.ShowExcel()
  134.         End If
  135.         font.Dispose()
  136.     End Sub
  137.     '用Excel模板打印,比较适合套打、格式、统计分析报表、图形分析、自定义打印
  138.     Private Sub ExcelTemplatePrint()
  139.         '用Excel打印,步骤为:打开、写数据、打印预览、关闭
  140.         Dim dt As New System.Data.DataTable
  141.         dt = CType(dataGrid1.DataSource, DataTable)     '少打几行看看,哈,打多少也行,只要你不闲慢
  142.         Dim excel As New GoldPrinter.ExcelAccess
  143.         Dim strExcelTemplateFile As String = System.IO.Path.GetFullPath("..ExcelTemplateexample.xlt")
  144.         excel.Open(strExcelTemplateFile)                '用模板文件
  145.         excel.IsVisibledExcel = True
  146.         excel.FormCaption = Me.dataGrid1.CaptionText    '"MIS金质打印通  通打天下报表"
  147.         Dim intDataTemplateRowIndex As Int32 = 16       '//15、16、17为模板数据行,在中间插入,则SUM(E15:E17)会自动更新如SUM(E15:E18)
  148.         Dim intDataStartRowIndex As Int32 = 18         '//写数据起始行,这里应用了Excel本身的技巧,把格式和合计留给Excel本身去做。
  149.         '//大家可以打开Excel文件,其中模板定义了三个数据行即15、16、17行(定义格式如小数位数、对齐),还有一个合计行18行,合计行定义了形如 =SUM(E15:E17) 。
  150.         '//为什么定义三行数据行呢?因为定义多于两行的话,插入复制单元格后Excel会自动把SUM(E15:E17)中间的合计行也会增加一行
  151.         '//如拷贝第16行,并在16行插入复制单元格后,数据行会成为4行,而合计=SUM(E15:E17)自动变成=SUM(E15:E18)、
  152.         '//同理,图形统计也利用了这一原理
  153.         '//***哈哈,大家注意了,以上是Excel本身的技术,与程序无关啊,我只是在制作Excel模板的时候用了Excel本身的技术,大家如果看不明白我上面的解释,不用管。
  154.         '打印网格上面说明
  155.         excel.SetCellText(12, "B", "010-81120172")
  156.         'excel.SetCellText(12, "E", "go@webmis.com.cn")
  157.         '打印网格及网格线,可以直接调用
  158.         'excel.SetCellText(dt, intDataStartRowIndex, 1, True)
  159.         '打印网格下面说明
  160.         excel.SetCellText(19, "B", "010-81120172")
  161.         excel.SetCellText(20, "B", "flygoldfish@sina.com")
  162.         excel.SetCellText(19, "E", "150439795")
  163.         excel.SetCellText(20, "E", System.DateTime.Now.ToLongDateString())
  164.         excel.SetCellText(21, "A", "定制模板打印真方便啊,可以把好多事情如格式、计算、图表等让Excel自己做。")
  165.         excel.SetCellText(22, "A", "不信?打开" + strExcelTemplateFile)
  166.         '打印数据网格
  167.         '这里用另一种方法,直接输出到模板文件指定的数据行上,不影响其它数据
  168.         Dim i, j As Int32
  169.         For i = 0 To dt.Rows.Count - 1
  170.             excel.InsertRow(intDataTemplateRowIndex, intDataTemplateRowIndex) '拷贝插入模板行并设置行高
  171.             excel.SetRowHeight(intDataTemplateRowIndex, 14.25F)
  172.         Next
  173.         For i = 0 To dt.Rows.Count - 1
  174.             For j = 0 To dt.Columns.Count - 1
  175.                 excel.SetCellText(intDataStartRowIndex + i, j + 1, dt.Rows(i)(j).ToString())
  176.             Next
  177.         Next
  178.         '画边框及网格线
  179.         excel.SetBordersEdge(intDataStartRowIndex, 1, intDataStartRowIndex + dt.Rows.Count - 1, dt.Columns.Count, False)
  180.         '删除模板数据行
  181.         excel.DeleteRow(17)
  182.         excel.DeleteRow(16)
  183.         excel.DeleteRow(15)
  184.         excel.PrintPreview()    '预览
  185.         excel.Close()           '关闭并释放
  186.     End Sub
  187. End Class