设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2584|回复: 1
打印 上一主题 下一主题

asp.net保存文件方法请教

[复制链接]
跳转到指定楼层
1#
发表于 2009-9-11 09:06:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
asp.net中我想把DataGrid中的数据导出到EXCEL中,提示保存文件对话框。(我是用VB语言来开发),有谁知道这个该怎么做吗?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2009-9-15 10:42:07 | 只看该作者


  1. Imports System.Collections.Generic
  2. Imports System.ComponentModel
  3. Imports System.Data
  4. Imports System.Drawing
  5. Imports System.Text
  6. Imports System.Windows.Forms
  7. Imports Excel

  8. Namespace FJPMIS.priceClient.Public
  9.     Class ExportExcel
  10.         '
  11.         ''' <summary>
  12.         ''' 将DataGridView中的数据导出到Excel中,并加载显示出来(无加载模板)
  13.         ''' 只用于一般的导出Excel
  14.         ''' </summary>
  15.         ''' <param name="caption">要显示的页头</param>
  16.         ''' <param name="date">打印日期</param>
  17.         ''' <param name="dgv">要进行导出的DataGridView</param>
  18.         Public Sub ExportToExcel(ByVal caption As String, ByVal [date] As String, ByVal dgv As DataGridView)
  19.             'DataGridView可见列数
  20.             Dim visiblecolumncount As Integer = 0
  21.             For i As Integer = 0 To dgv.Columns.Count - 1
  22.                 If dgv.Columns(i).Visible = True AndAlso (TypeOf dgv.Columns(i) Is DataGridViewTextBoxColumn) Then
  23.                     visiblecolumncount += 1
  24.                 End If
  25.             Next
  26.             
  27.             Try
  28.                 '当前操作列的索引
  29.                 Dim currentcolumnindex As Integer = 1
  30.                 '当前操作行的索引
  31.                 Dim Mylxls As New Excel.ApplicationClass()
  32.                 Mylxls.Application.Workbooks.Add(True)
  33.                 'Mylxls.Cells.Font.Size = 10.5; //设置默认字体大小
  34.                 '设置标头
  35.                 Mylxls.Caption = caption
  36.                 '显示表头
  37.                 Mylxls.Cells(1, 1) = caption
  38.                 '显示时间
  39.                 Mylxls.Cells(2, 1) = [date]
  40.                 For i As Integer = 0 To dgv.Columns.Count - 1
  41.                     If dgv.Columns(i).Visible = True AndAlso (TypeOf dgv.Columns(i) Is DataGridViewTextBoxColumn) Then
  42.                         '如果显示
  43.                         Mylxls.Cells(3, currentcolumnindex) = dgv.Columns(i).HeaderText
  44.                         Mylxls.get_Range(Mylxls.Cells(3, currentcolumnindex), Mylxls.Cells(3, currentcolumnindex)).Cells.Borders.LineStyle = 1
  45.                         '设置边框
  46.                         Mylxls.get_Range(Mylxls.Cells(3, currentcolumnindex), Mylxls.Cells(3, currentcolumnindex)).ColumnWidth = dgv.Columns(i).Width / 8
  47.                         'Mylxls.get_Range(Mylxls.Cells[3, currentcolumnindex], Mylxls.Cells[3, currentcolumnindex]).Font.Bold = true; //粗体
  48.                         'Mylxls.get_Range(Mylxls.Cells[3, currentcolumnindex], Mylxls.Cells[3, currentcolumnindex]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; //居中显示
  49.                         currentcolumnindex += 1
  50.                     End If
  51.                 Next
  52.                 Mylxls.get_Range(Mylxls.Cells(1, 1), Mylxls.Cells(1, visiblecolumncount)).MergeCells = True
  53.                 '合并单元格
  54.                 Mylxls.get_Range(Mylxls.Cells(1, 1), Mylxls.Cells(1, 1)).RowHeight = 30
  55.                 '行高
  56.                 'Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, 1]).Font.Name = "黑体";
  57.                 'Mylxls.get_Range(Mylxls.Cells[1, 1], Mylxls.Cells[1, 1]).Font.Size = 14; //字体大小
  58.                 Mylxls.get_Range(Mylxls.Cells(1, 1), Mylxls.Cells(1, visiblecolumncount)).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
  59.                 '居中显示
  60.                 Mylxls.get_Range(Mylxls.Cells(2, 1), Mylxls.Cells(2, 2)).MergeCells = True
  61.                 '合并
  62.                 Mylxls.get_Range(Mylxls.Cells(2, 1), Mylxls.Cells(2, 2)).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft
  63.                 '左边显示
  64.                 'Mylxls.get_Range(Mylxls.Cells[1, 2], Mylxls.Cells[1, 2]).ColumnWidth = 12; //列宽度
  65.                 Dim dataArray As Object(,) = New Object(dgv.Rows.Count - 1, visiblecolumncount - 1) {}
  66.                
  67.                 '当前操作列的索引
  68.                 'int currentcolumnindex = 1;
  69.                 '当前操作行的索引
  70.                 For i As Integer = 0 To dgv.Rows.Count - 1
  71.                     '循环填充数据
  72.                     currentcolumnindex = 1
  73.                     For j As Integer = 0 To dgv.Columns.Count - 1
  74.                         If dgv.Columns(j).Visible = True AndAlso (TypeOf dgv.Columns(j) Is DataGridViewTextBoxColumn) Then
  75.                             If dgv(j, i).Value IsNot Nothing Then
  76.                                 '如果单元格内容不为空
  77.                                 dataArray(i, currentcolumnindex - 1) = dgv(j, i).Value.ToString()
  78.                             End If
  79.                             currentcolumnindex += 1
  80.                         End If
  81.                     Next
  82.                 Next
  83.                 Mylxls.get_Range(Mylxls.Cells(4, 1), Mylxls.Cells(dgv.Rows.Count + 3, visiblecolumncount)).Value2 = dataArray
  84.                 '设置边框
  85.                 Mylxls.get_Range(Mylxls.Cells(4, 1), Mylxls.Cells(dgv.Rows.Count + 3, visiblecolumncount)).Cells.Borders.LineStyle = 1
  86.                 '设置边框
  87.                     
  88.                 Mylxls.Visible = True
  89.             Catch
  90.                 MessageBox.Show("信息导出失败,请确认你的机子上装有Microsoft Office Excel 2003!", "错误", MessageBoxButtons.OK, MessageBoxIcon.[Error])
  91.             Finally
  92.                
  93.             End Try
  94.         End Sub
  95.         
  96.         '
  97.         ''' <summary>
  98.         ''' 将DataGridView中的数据导出到Excel中,并加载显示出来(加载模板)
  99.         ''' 仅用于导出已定义好模版的Excel导出,主要如“旬报表”,“月报表”等
  100.         ''' 请注意:模板应放在应程序的PrintTemplate目录下
  101.         
  102.         ''' </summary>
  103.         ''' <param name="ModelName">模版的名称</param>
  104.         ''' <param name="Date">打印日期</param>
  105.         ''' <param name="dgv">要进行导出的DataGridView</param>
  106.         Public Sub ExportToExcelByModel(ByVal ModelName As String, ByVal [Date] As String, ByVal dgv As DataGridView)
  107.             Dim m_objExcel As Excel.Application = Nothing
  108.             Dim m_objBook As Excel._Workbook = Nothing
  109.             Dim m_objSheets As Excel.Sheets = Nothing
  110.             Dim m_objSheet As Excel._Worksheet = Nothing
  111.             Dim m_objOpt As Object = System.Reflection.Missing.Value
  112.             Try
  113.                 m_objExcel = New Excel.Application()
  114.                 Dim path As String = System.Windows.Forms.Application.StartupPath.ToString().Replace(vbBack & "in" & vbNullChar & "ebug", "") & vbNullChar & "rintTemplate"";"
  115.                 path = path + ModelName
  116.                 m_objBook = m_objExcel.Workbooks.Open(path, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, _
  117.                 m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, _
  118.                 m_objOpt, m_objOpt, m_objOpt)
  119.                
  120.                 m_objSheets = DirectCast(m_objBook.Worksheets, Excel.Sheets)
  121.                 m_objSheet = DirectCast((m_objSheets.get_Item(1)), Excel._Worksheet)
  122.                
  123.                 '填充日期
  124.                 m_objExcel.Cells(2, 1) = [Date].ToString()
  125.                
  126.                 '当前操作列的索引
  127.                 Dim currentcolumnindex As Integer = 1
  128.                 '当前操作行的索引
  129.                 Dim currentrowindex As Integer = 4
  130.                 For i As Integer = 0 To dgv.Rows.Count - 1
  131.                     '循环填充数据
  132.                     currentcolumnindex = 1
  133.                     currentrowindex = 4 + i
  134.                     For j As Integer = 0 To dgv.Columns.Count - 1
  135.                         If dgv.Columns(j).Visible = True Then
  136.                             If dgv(j, i).Value IsNot Nothing Then
  137.                                 '如果单元格内容不为空
  138.                                 m_objExcel.Cells(currentrowindex, currentcolumnindex) = dgv(j, i).Value.ToString()
  139.                             End If
  140.                             m_objExcel.get_Range(m_objExcel.Cells(currentrowindex, currentcolumnindex), m_objExcel.Cells(currentrowindex, currentcolumnindex)).Cells.Borders.LineStyle = 1
  141.                             '设置边框
  142.                             currentcolumnindex += 1
  143.                         End If
  144.                     Next
  145.                 Next
  146.                 m_objExcel.DisplayAlerts = False
  147.                 m_objExcel.Visible = True
  148.                 System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBook)
  149.                 System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel)
  150.             Catch
  151.                 MessageBox.Show("信息导出失败,请确认你的机子上装有Microsoft Office Excel 2003并且模版未被删除!", "错误", MessageBoxButtons.OK, MessageBoxIcon.[Error])
  152.             Finally
  153.                 GC.Collect()
  154.             End Try
  155.         End Sub
  156.     End Class
  157. End Namespace
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-3 23:00 , Processed in 0.327633 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表