当前位置:编程学习 > C#/ASP.NET >>

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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,