一个通用的Datagrid导出Excel打印的源函数 - 中国WEB开发者网络 (http://www.webasp.net) -- 技术教程 (http://www.webasp.net/article/) --- 一个通用的Datagrid导出Excel打印的源函数 (http://www.webasp.net/article/17/16217.htm) |
| -- 作者:未知 -- 发布日期: 2005-01-18 |
| 一个通用的Datagrid导出Excel打印的源函数
闲暇之余,写成函数,供新人研究学习 'Power by:Landlordh '列宽默认为datagird的tablestyles(0)列宽的五分之一 'G2E(dg1) Public Function G2E(ByVal dg As DataGrid) Dim dt As New DataTable Try dt = CType(dg.DataSource, DataTable) Catch ex As Exception MsgBox(ex.Message) Exit Function End Try Dim total_col As Integer = dt.Columns.Count Dim total_row As Integer = dt.Rows.Count If total_col < 1 Or total_row < 1 Then MsgBox("没有可供导入的数据!", MsgBoxStyle.Information, "系统提示") Exit Function End If 'killEXCEL() '要先在引用中添加EXCEL组件 Dim xlApp As New Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Try GC.Collect() xlBook = xlApp.Workbooks().Add xlSheet = xlBook.Worksheets("sheet1") xlApp.Visible = True Try With xlSheet.PageSetup .RightMargin = 1 .LeftMargin = 1 .CenterHorizontally = True .CenterHeader = "&24 报表" .RightFooter = "&P of &N" End With Catch ex As Exception MsgBox(ex.ToString) Exit Function End Try Dim Col As Integer Dim Row As Integer Dim st_row As Integer = 5 '数据列头开始行,(列头) Dim trueCol As Integer = 0 For Col = 0 To total_col - 1 If dg.TableStyles.Item(0).GridColumnStyles.Item(Col).Width > 0 Then trueCol += 1 Next Dim TitleArray(4, 0) As Object Dim HeaderArray(0, trueCol - 1) As Object Dim DataArray(total_row - 1, trueCol - 1) As Object TitleArray(0, 0) = "TO:" TitleArray(1, 0) = "FORM:" TitleArray(2, 0) = "" TitleArray(3, 0) = "" xlSheet.Range("A1").Resize(4, 1).Value = TitleArray Dim i As Integer = 0 For Col = 0 To total_col - 1 If dg.TableStyles.Item(0).GridColumnStyles.Item(Col).Width > 0 Then i += 1 HeaderArray(0, i - 1) = dt.Columns(Col).ColumnName '设列宽,默认为datagird列宽的五分之一 xlSheet.Cells(st_row, i).ColumnWidth = dg.TableStyles.Item(0).GridColumnStyles.Item(Col).Width / 5 End If Next xlSheet.Range("A" & st_row).Resize(st_row, trueCol).Value = HeaderArray For Row = 0 To total_row - 1 i = 0 For Col = 0 To total_col - 1 If dg.TableStyles.Item(0).GridColumnStyles.Item(Col).Width > 0 Then i += 1 DataArray(Row, i - 1) = dt.Rows(Row).Item(Col) End If Next Next xlSheet.Range("A" & st_row + 1).Resize(total_row, trueCol).Value = DataArray With xlSheet .Range(.Cells(st_row, 1), .Cells(st_row, trueCol)).Font.Bold = True .Range(.Cells(st_row, 1), .Cells(st_row, trueCol)).HorizontalAlignment = 3 .Range(.Cells(st_row, 1), .Cells(total_row + st_row, trueCol)).Borders.LineStyle = 1 '设置数据区第一列到第二列为居中 .Range(.Cells(st_row, 1), .Cells(total_row + st_row, 2)).HorizontalAlignment = 3 End With xlApp.ActiveWorkbook.PrintPreview() Catch ex As Exception xlSheet = Nothing xlApp.DisplayAlerts = False xlBook.RunAutoMacros(Excel.XlRunAutoMacro.xlAutoClose) xlBook.Close() xlBook = Nothing xlApp.Quit() xlApp.DisplayAlerts = True xlApp = Nothing GC.Collect() MsgBox(ex.ToString) Exit Function End Try xlSheet = Nothing xlApp.DisplayAlerts = False xlBook.RunAutoMacros(Excel.XlRunAutoMacro.xlAutoClose) xlBook.Close() xlBook = Nothing xlApp.Quit() xlApp.DisplayAlerts = True xlApp = Nothing GC.Collect() End Function |
| webasp.net |