vb.net中 导出excel表格代码怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb.net中 导出excel表格代码怎么写相关的知识,希望对你有一定的参考价值。

private void ExportExcelFromDataGrid
( string filename , System.Web.UI.WebControls.DataGrid ToExcelGrid )
...
Response.Clear();
Response.Buffer= true;
Response.Charset="utf-8";
Response.AppendHeader ("Content-Disposition","attachment;filename="+Server.UrlEncode ( filename ) );
Response.ContentEncoding=System.Text.Encoding.Default;//设置输出流为简体中文
Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
this.EnableViewState = false;
System.Globalization.CultureInfo myCItrad =
new System.Globalization.CultureInfo("ZH-CN",true);
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
System.Web.UI.htmlTextWriter oHtmlTextWriter =
new System.Web.UI.HtmlTextWriter(oStringWriter);
ToExcelGrid.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();


private void Button4_Click(object sender, System.EventArgs e)
...
this.Panel1.Visible = false;
string filename = "内训师.xls";
this.DataGrid1.Columns[6].Visible = true;
this.DataGrid1.Columns[7].Visible = true;
this.DataGrid1.Columns[this.DataGrid1.Columns.Count-1].Visible = false; // *
this.DataGrid1.Columns[this.DataGrid1.Columns.Count-2].Visible = false; // *
this.DataGrid1.AllowSorting = false; // *
this.DataGrid1.AllowPaging = false;
this.DataGrid1.SelectedIndex = -1; // *
this.BindGrid();
this.ExportExcelFromDataGrid ( filename , this.DataGrid1 );


原理是利用DataGrid(其实是其父类Control)的RenderControl方法输出,整个DataGrid的外观时,将这些HTML代码写入到缓冲区,同时设置一下 ContentType ,让Excel自己的自动纠错功能将这个输出存为一个Excel文件。

很多网上的朋友使用了以上这种可粘贴性强的代码,发现不好用,反映的错误类似:
“LinkButton必须放在一个具有runat=server的标签的Form”之类的话,而更多的网友说:
问题很明显,因为DataGrid没有放在runat=server 的Form里面,加上就可以了。

我认为,这种回答是很不准确的,理由如下:

通常使用这种代码的人他/她的DataGrid,最起码已经能用了,所以必定放在那个具有runat=server 的form标签里了。 报错是LinkButton,而不是DataGrid,很多细心的朋友很可能会说,我一直在用DataGrid,LinkButton在哪里来的。 其实真正的问题是,上面的代码没有加了 // * 的那几行代码引起的。
当然如果你的DataGrid,没有排序,没有使用那种按钮列的话,是不会出问题的。
言归正传,LinkButtion其实是你将DataGrid设为可排序时候,的表头包含的,所以我要将DataGrid的排序设为False。
同样得到上面的其实,那些按钮列,什么"编辑"、“删除”等等这些,也是用了LinkButton,把他设为不可见就是了。
其实说得再明白一点就是,将有可能产生LinkButton,或其他控件的东西都不让它输出就是了

vb.net dataGridView中的数据导出为excel表2010-03-01 15:03在form1窗体里添加一个dataGridView1(根据自己是使用情况要给他命名,符合命名规范哟。)在添加一个Button1(命名)。记着,dataGridView的属性里有一个allowUsersToAddRows,要设置成FALSE。否则会发生一个错误,当然错误是什么你自己试一下就ok了。

还有一点要注意:因为你要用到excel表,所以要首先在项目里添加引用哟:项目(project)-添加引用(add reference)-Microsoft .Office.Interop.Excel

Button1的代码:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'要先添加引用才能用到 Microsoft.Office.Interop.Excel.Application()
Dim MyExcel As New Microsoft.Office.Interop.Excel.Application()
MyExcel.Application.Workbooks.Add(True)
MyExcel.Visible = True

'去除dataGridView1的编号列(这里也可以不要)
Dim m As Integer
For m = 0 To DataGridView1.ColumnCount - 1
MyExcel.Cells(1, m + 1) = Me.DataGridView1.Columns(m).HeaderText
Next m

'往excel表里添加数据
Dim i As Integer
For i = 0 To DataGridView1.RowCount - 1
Dim j As Integer
For j = 0 To DataGridView1.ColumnCount - 1
If Me.DataGridView1(j, i).Value Is System.DBNull.Value Then

MyExcel.Cells(i + 2, j + 1) = ""
Else
MyExcel.Cells(i + 2, j + 1) = DataGridView1(j, i).Value.ToString

End If
Next j
Next i

End Sub追问

这个朋友的答案确实很棒!都是网页用到的 ,我用的是winform程序开发,不好意思!

参考技术A 1.在工程中引用Microsoft Excel 12.0 Object Library

2、在通用对象的声明过程中定义EXCEL对象:
Dim xlApp As Excel.Application
Dim xlBook As Excel.WorkBook
Dim xlSheet As Excel.Worksheet

3、在程序中操作VB.NET EXCEL常用命令:

Set xlApp = CreateObject("Excel.Application") '创建EXCEL对象
Set xlBook = xlApp.Workbooks.Open("文件名") '打开已经存在的EXCEL工件簿文件
xlApp.Visible = True '设置EXCEL对象可见(或不可见)
Set xlSheet = xlBook.Worksheets("表名") '设置活动工作表
xlSheet.Cells(row, col) =值 '给单元格(row,col)赋值
xlSheet.PrintOut '打印工作表
xlBook.Close (True) '关闭工作簿
xlApp.Quit '结束EXCEL对象
Set xlApp = Nothing '释放xlApp对象
xlBook.RunAutoMacros (xlAutoOpen) '运行EXCEL启动宏 xlBook.RunAutoMacros (xlAutoClose) '运行EXCEL关闭宏

VB.net导出花式Excel

        第一接触导出Excel表格是在第一次做机房收费系统的时候,能够顺利导出以满足:

        现在已经很简单了这个逻辑,其实就是通过代码将Excel表格画出来:

  <strong><span style="font-size:18px;"> '导出</span></strong>
<strong><span style="font-size:18px;">整段代码唯一不好理解的便是myExcel.Cell(i,j)这是从第i行第j列开始填充数据
    Private Sub btnExport_Click(sender As Object, e As EventArgs) Handles btnExport.Click
        MessageBox.Show("导出的数据如不保存将会丢失", "系统提示")
      

        Dim myExcel As New Microsoft.Office.Interop.Excel.Application()  '建立Excel连接
        myExcel.Application.Workbooks.Add(True)    '添加一个工作薄
        myExcel.Visible = True    '可见

        '将datagridview中的字段名导出   
        Dim m As Integer
        For m = 0 To dgvData.ColumnCount - 1  '获取datagridview的列的个数
            myExcel.Cells(1, m + 1) = Me.dgvData.Columns(m).HeaderText    '在Excel的第一行填写m列的datagridview的标题
        Next m

        '往excel表里添加数据   
        Dim i As Integer
        For i = 0 To dgvData.RowCount - 1      '定义datagridview里有多少行数据要往里填充
            Dim j As Integer
            For j = 0 To dgvData.ColumnCount - 1   '<span style="font-family: Arial, Helvetica, sans-serif;">定义datagridview里有多少列数据要往里填充</span>

                If Me.dgvData(j, i).Value Is System.DBNull.Value Then  '进行非null判断
                    myExcel.Cells(i + 2, j + 1) = ""        '如果是则用空代替
                Else
                    myExcel.Cells(i + 2, j + 1) = dgvData(j, i).Value    '然后开始填充
                End If
            Next j
        Next i
    End Sub</span></strong>

效果如图:




        在实际的需求中这样的Excel显然是不合格的也不会是用户需要的,如果要弄出如下格式的我们又该怎么办呢? 




          通过学习和查阅资料会发现只要我们了解了足够多的Excel的属性和方法就可以做出来,举例如下:

<strong><span style="font-size:18px;">        Private Sub butExcel_Click(sender As Object, e As EventArgs) Handles btnExcel.Click
        MessageBox.Show("导出的数据如不保存将会丢失", "系统提示")
     

        Dim myExcel As New Microsoft.Office.Interop.Excel.Application()  '建立Excel连接
        myExcel.Application.Workbooks.Add(True)
        myExcel.Visible = True


        Dim i, j, k As Integer '定义变量
        myExcel.Cells.HorizontalAlignment = 3    '定义单元格文本对齐方式
        myExcel.Cells.Font.Size = 14      '定义文本字体大小


        Select Case cmbTable.Text.Trim()
            Case "党政人才类别统计表1"
                myExcel.Range("A2").ColumnWidth = 45       '设定指定单元格集的列宽,此处是指A2所对应的列
                myExcel.Range("B2", "P2").ColumnWidth = 16   <span style="font-family: Arial, Helvetica, sans-serif;">'设定指定单元格集的列宽,此处是指B2和P2所对应的列</span>

                myExcel.Cells(1, 16) = cmbTable.Text   
                myExcel.Range("A1", "P1").Merge()      '合并单元格
                myExcel.Range("A1", "P1").Font.Bold = True                '字体加粗  
                'myExcel.Range("A1", "P1").Font.ColorIndex = 32            '字体颜色蓝色  
                myExcel.Range("A1", "P1").Font.Size = 25
                '添加表头b
                myExcel.Range("B2", "E2").Merge()
                myExcel.Range("F2", "J2").Merge()
                myExcel.Range("F2", "J2").Font.Bold = True                '字体加粗  
                'myExcel.Range("F2", "J2").Font.ColorIndex = 32            '字体颜色蓝色  
                myExcel.Range("F2", "J2").Font.Size = 20
                myExcel.Cells(2, 6) = "学历"        '给第二行第六列的单元格赋值




                myExcel.Range("K2", "P2").Merge() '合并单元格
                myExcel.Range("K2", "P2").Font.Bold = True                '字体加粗  
                'myExcel.Range("K2", "P2").Font.ColorIndex = 32            '字体颜色蓝色  
                myExcel.Range("K2", "P2").Font.Size = 20
                myExcel.Cells(2, 11) = "年龄"


        End Select
        For k = 0 To dgvData.ColumnCount - 1
            myExcel.Cells(3, k + 1) = dgvData.Columns(k).HeaderText
        Next k


        '添加数据
        For i = 0 To dgvData.RowCount - 1
            For j = 0 To dgvData.ColumnCount - 1
                myExcel.Cells(i + 4, j + 1) = dgvData(j, i).Value
            Next
        Next
    End Sub
</span></strong>

           效果图:




        我们掌握了下面的这些属性和方法就能做出属于我们需求的Excel表格了:

        如有需要请点击我       接着点我     最后一次

以上是关于vb.net中 导出excel表格代码怎么写的主要内容,如果未能解决你的问题,请参考以下文章

VB.net导出花式Excel

vb.net dataGridView导出EXCEL

c#导出EXCEL合并单元格代码

vb.net怎么访问excel表格

vb.net 导出PDF

利用VB.NET实现导出DataTable数据到excel中,各位大侠帮帮忙,最好有源码,谢谢,江湖救急