vb.net表格导出 vb导出excel( 四 )


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)vb.net表格导出的RenderControl方法输出vb.net表格导出 , 整个DataGrid的外观时vb.net表格导出 , 将这些HTML代码写入到缓冲区,同时设置一下 ContentType ,让Excel自己的自动纠错功能将这个输出存为一个Excel文件 。
很多网上的朋友使用了以上这种可粘贴性强的代码,发现不好用,反映的错误类似vb.net表格导出:
“LinkButton必须放在一个具有runat=server的标签的Form”之类的话 , 而更多的网友说:
问题很明显 , 因为DataGrid没有放在runat=server 的Form里面,加上就可以了 。
我认为,这种回答是很不准确的,理由如下:
通常使用这种代码的人vb.net表格导出他/她的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

推荐阅读