一个通用的Datagrid导出Excel打印的源函数

datagrid|excel|打印|导出excel|函数

一个通用的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

时间: 2024-09-07 22:43:42

一个通用的Datagrid导出Excel打印的源函数的相关文章

asp.net-小白提问:我想做一个 ASP.net 后台导出Excel 并且设置它的页眉页脚及列宽。大神有例子吗?

问题描述 小白提问:我想做一个 ASP.net 后台导出Excel 并且设置它的页眉页脚及列宽.大神有例子吗? 如图:我想做一个 ASP.net 后台导出Excel 并且设置它的页眉页脚及列宽.大神有例子吗? 解决方案 用NPOI这个类,可以设置页眉页脚,具体google下.

求助:C#中datagrid导出excel时遇到的问题

问题描述 在网上搜了段datagrid导出excel的程序,打算试一下,但是出现了些问题,stringlist定义都画红线,如图所示,添加了usingSystem.Collections.Generic;求助各位大神怎么回事,或者有其他导出的方法 解决方案 解决方案二:取DataGrid的数据源.解决方案三:鼠标放到划红线的地方不是有提示的吗?解决方案四:把报错的地方改掉解决方案五:报错信息是什么?

asp.net datagrid 导出excel二种方法

asp教程.net datagrid 导出excel二种方法 文章为你提供二款datagrid 导出excel的代码一款是利用vb.net 导出excel一种是利用c# datagrid 导出excel的实例代码. */ //c#:   private void exporttoexcel()         {             savefiledialog savefiledialog = new savefiledialog();             savefiledialog

DataGrid - 导出Excel文件

datagrid|excel|导出excel 方法有很多,我只用了最简单的方法 1.引用 COM组件 Excel.dll 2.实现如下 public void ExportExcel(){ DataSet ds=this.DataSet;//取得dataGrid绑定的DataSet if(ds==null) return; string saveFileName=""; bool fileSaved=false; SaveFileDialog saveDialog=new SaveFi

Silverlight Datagrid 导出 Excel

注意:以下代码未经本人测试,仅供参考  转自http://www.cnblogs.com/ijkjuxit/articles/2093076.html void btnExport_Click(object sender, RoutedEventArgs e)        {            ExportExcel.ExportDataGridSaveAs(true,this.dg);         }         导出类文件如下:   public static class Ex

asp.net c# datagrid 导出excel 的对齐问题

问题描述 导出的数据文本左对齐数字右对齐怎么统一?谢谢 解决方案 解决方案二:protectedvoidexcel_Click(objectsender,EventArgse){Response.Clear();SqlDataAdapterda=newSqlDataAdapter("select*fromTEL_ID",conn);DataSetds=newDataSet();da.Fill(ds,"TEL_INFO");DataTabledt=ds.Tables[

一起谈.NET技术,Silverlight 4中把DataGrid数据导出Excel—附源码下载

Silverlight中常常用到DataGrid来展示密集数据. 而常见应用系统中我们需要把这些数据导入导出到固定Office套件中例如常用的Excel表格. 那么在Silverlight 中如何加以实现? 在参考大量资料后 提供参考思路如下: A:纯客户端导出处理.利用Silverlight 与Javascript 进行交互实现导出Excel. B:服务器端导出.获得DataGrid数据源. 传递给WCF Service到服务器端. 然后把传回数据通过Asp.net中通用处理导出Excel方法

实现easyui的datagrid导出为excel的示例代码_jquery

之前有介绍过如何实现easyui里datagrid内容的打印,今天给大家介绍下如何实现datagrid内容导出为excel文件.以下为代码实现: export.js function ChangeToTable(printDatagrid) { var tableString = '<table cellspacing="0" class="pb">'; var frozenColumns = printDatagrid.datagrid("o

ASP.NET导出Excel打开时提示:与文件扩展名指定文件不一致解决方法_实用技巧

"将页面显示的GridView中的数据,导出到Excel表格中"时遇到这样一个错误: C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致.具体提示如图: 解决办法:这里采用"修改注册表的方法"解决此问题,这并没从根上解决问题: 1.打开注册表编辑器方法:开始 -> 运行 -> 输入regedit -> 确定 2.找到注册表子项HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Exc