asp.net中获取excel中工作表的名字的问题。。
我需要将excel中的表导入到数据库中,在导入之前我要把excel中的工作表名全读出来,供用户选择我使用如下的方法,在网上找的
string strDbPath =filepath;
string strConn = "";
strConn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strDbPath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
OleDbConnection Conn = new OleDbConnection(strConn);
Conn.Open();
dt = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
if (dt != null && dt.Rows.Count > 0)
{
this.RadioButtonList1.Items.Clear();
string tname = "";
foreach (DataRow row in dt.Rows)
{
tname = row["TABLE_NAME"].ToString().Trim();
this.RadioButtonList1.Items.Add(tname);
}
}
此方法能读出表名但是有个问题
就是每个表都读出来有2个表名,比如:一个EA_Class表,读出来的名字有两个:EA_Class,EA_Class$,这是怎么回事啊,这样就造成用户的迷惑了
急盼高手解决
谢谢 --------------------编程问答-------------------- 没人知道什么原因吗?
在线等啊 --------------------编程问答-------------------- 而且我还发现一个奇怪的问题
如果excel 里的表是我自己在excel里建的
就只有一个表名
如果这些表是通过sqlserver里的数据导出功能导出来的就会有两个名字
--------------------编程问答-------------------- 帮你顶。
在百度里想搜一下有关上传excel,然后如何获取他里面的表名。
就找到这来了。 --------------------编程问答-------------------- http://www.cnblogs.com/Jinglecat/archive/2006/08/15/477472.html
我找到答案了!在晓风残月的blog里。
--------------------编程问答-------------------- dt = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
========
需要注意的是,此方式获取的,“表名”不仅仅是我们可见的哪几个 sheet(工作表)还是包括每个工作表中自定义的【命名区域】 --------------------编程问答-------------------- 我最近就实现了一个用户浏览EXCEL文件,然后将此文件导入SQL并显示出来,但我只读sheet1$,别的工作表用不到。。你想要代码的话留QQ。。 --------------------编程问答-------------------- 在VB.net中用法如下, 获取的表名没有重复值, 都是在工作簿后面加上了$符号, 因为在程序引用工作表是加面一定要$符号的.
请看下面的示例:
Imports System.Data.OleDb
Public Class Form1
'获取Excel数据库中的各个表名称,示例
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'定义Connection对象,并初始化其ConnectionString属性
Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\computerlist.xls;Extended properties=Excel 8.0")
'定义Command对象,并初始其Connection属性
Dim Cm As New OleDbCommand("", Cn)
Try '捕获错误信息
Cn.Open() '打开连接
ListBox1.Items.Clear() '清空表框
'定义System.Data.DataTable对象,存储GetOleDbSchemaTable函数返回值
Dim objTable As System.Data.DataTable = Cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
'关于GetOleDbSchemaTable函数,MSDN中解释如下:
'Public Function GetOleDbSchemaTable( _
'ByVal schema As Guid, _
'ByVal restrictions As Object() _
') As DataTable 具体信息参见MSDN
If Not objTable Is Nothing Then
If objTable.Rows.Count > 0 Then
For Each row As DataRow In objTable.Rows
ListBox1.Items.Add(row.Item("TABLE_NAME").ToString) '获取表名并填充列表框控件
Next
End If
End If
Cn.Close()
'MsgBox("Excel connected success!")
Catch ex As Exception
MsgBox(ex.Source, MsgBoxStyle.Critical, ex.Message)
End Try
End Sub
End Class --------------------编程问答-------------------- 感谢楼主分享问题 学习了
补充:.NET技术 , ASP.NET