c#.net读EXCEL表问题(不能读中文工作表名)

时间:2022-08-16 09:37:43
  excel 表中有三个工作表:客户关系,sheet2,sheet3,我只取第一个工作表名,而下面程序返回的是sheet2,如果把“客户关系”改成英文,确又以能认识第一个工作表。请教高手如何获取第一个中文工作表名。谢谢

 public String getExcelFileTable(string Path)
        {
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
            System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(strConn);
            conn.Open();
            System.Data.DataTable table = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
            //DataTable table = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE " });
            string TableName = table.Rows[0]["TABLE_NAME"].ToString();
            TableName = TableName.Substring(0, TableName.Length - 1);
            TableName = HttpUtility.UrlEncode(TableName, System.Text.Encoding.GetEncoding("utf-8"));
            Response.Write("<script language='javascript'>alert('" + TableName + "')</script>");
            conn.Close();
            return TableName;
        }

13 个解决方案

#1


可以不用Ole方式
在com中把Excel的dll引入,可以直接操作Excel的类,用起来很方便

#2


本帖最后由 net_lover 于 2011-10-02 11:05:50 编辑
你遍历下所有的表名,你看看中文的在里面没有

for(int i=0;i<table.Rows.Count;i++)
{
string TableName = table.Rows[i]["TABLE_NAME"].ToString();
//打印TableName 
}

#3


引用 1 楼 skyparty 的回复:
可以不用Ole方式
在com中把Excel的dll引入,可以直接操作Excel的类,用起来很方便



可有代码实例,万分感谢

#4


引用 2 楼 net_lover 的回复:
你遍历下所有的表名,你看看中文的在里面没有

中文在里面是有的。

#5


中文在里面,说明它不是第一个啊,

table.Rows[0]["TABLE_NAME"].ToString();
这样取就是错误的了

#6


引用 5 楼 net_lover 的回复:
中文在里面,说明它不是第一个啊,

table.Rows[0]["TABLE_NAME"].ToString();
这样取就是错误的了

比如:表中是    英国 中国  sheet3 读出来后是  Sheet3$英国$中国$ 

#7


引用 6 楼 lhetiger 的回复:
引用 5 楼 net_lover 的回复:
中文在里面,说明它不是第一个啊,

table.Rows[0]["TABLE_NAME"].ToString();
这样取就是错误的了

比如:表中是 英国 中国 sheet3 读出来后是 Sheet3$英国$中国$。而我要取的数据是英国里面的。请问要如何取。谢谢

#8


引用 7 楼 lhetiger 的回复:
引用 6 楼 lhetiger 的回复:
引用 5 楼 net_lover 的回复:
中文在里面,说明它不是第一个啊,

table.Rows[0]["TABLE_NAME"].ToString();
这样取就是错误的了

比如:表中是 英国 中国 sheet3 读出来后是 Sheet3$英国$中国$。而我要取的数据是英国里面的。请问要如何取。谢谢
 public  String getExcelFileTable()
        {
            OleDbConnection oleConn = new OleDbConnection();
            oleConn.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;data source=D:\\2.xls;Extended Properties=Excel 8.0;";
            oleConn.Open();
            DataTable dtOle = oleConn.GetSchema("Tables");
            DataTableReader dtReader = new DataTableReader(dtOle);

            while (dtReader.Read())
            {
                Response.Write(dtReader["Table_Name"]);
                
            }
            dtReader = null;
            dtOle = null;
            oleConn.Close();
            return "";
          
        }

#9


Spread.NET 中文版

#10


[Sheet3$英国$中国$]

#11


吧sheet2和sheet3删掉吧,好弄点

#12


引用 11 楼 juliohuang 的回复:
吧sheet2和sheet3删掉吧,好弄点
这个方法想过。不过有时候后几个SHEET中会保存有用数据。重新建立一个EXCEL再复制第一个SHEET的数据有点麻烦。所以才想解决这个问题。

#13


请问楼主,现在这个问题是怎么解决的?很想知道

#1


可以不用Ole方式
在com中把Excel的dll引入,可以直接操作Excel的类,用起来很方便

#2


本帖最后由 net_lover 于 2011-10-02 11:05:50 编辑
你遍历下所有的表名,你看看中文的在里面没有

for(int i=0;i<table.Rows.Count;i++)
{
string TableName = table.Rows[i]["TABLE_NAME"].ToString();
//打印TableName 
}

#3


引用 1 楼 skyparty 的回复:
可以不用Ole方式
在com中把Excel的dll引入,可以直接操作Excel的类,用起来很方便



可有代码实例,万分感谢

#4


引用 2 楼 net_lover 的回复:
你遍历下所有的表名,你看看中文的在里面没有

中文在里面是有的。

#5


中文在里面,说明它不是第一个啊,

table.Rows[0]["TABLE_NAME"].ToString();
这样取就是错误的了

#6


引用 5 楼 net_lover 的回复:
中文在里面,说明它不是第一个啊,

table.Rows[0]["TABLE_NAME"].ToString();
这样取就是错误的了

比如:表中是    英国 中国  sheet3 读出来后是  Sheet3$英国$中国$ 

#7


引用 6 楼 lhetiger 的回复:
引用 5 楼 net_lover 的回复:
中文在里面,说明它不是第一个啊,

table.Rows[0]["TABLE_NAME"].ToString();
这样取就是错误的了

比如:表中是 英国 中国 sheet3 读出来后是 Sheet3$英国$中国$。而我要取的数据是英国里面的。请问要如何取。谢谢

#8


引用 7 楼 lhetiger 的回复:
引用 6 楼 lhetiger 的回复:
引用 5 楼 net_lover 的回复:
中文在里面,说明它不是第一个啊,

table.Rows[0]["TABLE_NAME"].ToString();
这样取就是错误的了

比如:表中是 英国 中国 sheet3 读出来后是 Sheet3$英国$中国$。而我要取的数据是英国里面的。请问要如何取。谢谢
 public  String getExcelFileTable()
        {
            OleDbConnection oleConn = new OleDbConnection();
            oleConn.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;data source=D:\\2.xls;Extended Properties=Excel 8.0;";
            oleConn.Open();
            DataTable dtOle = oleConn.GetSchema("Tables");
            DataTableReader dtReader = new DataTableReader(dtOle);

            while (dtReader.Read())
            {
                Response.Write(dtReader["Table_Name"]);
                
            }
            dtReader = null;
            dtOle = null;
            oleConn.Close();
            return "";
          
        }

#9


Spread.NET 中文版

#10


[Sheet3$英国$中国$]

#11


吧sheet2和sheet3删掉吧,好弄点

#12


引用 11 楼 juliohuang 的回复:
吧sheet2和sheet3删掉吧,好弄点
这个方法想过。不过有时候后几个SHEET中会保存有用数据。重新建立一个EXCEL再复制第一个SHEET的数据有点麻烦。所以才想解决这个问题。

#13


请问楼主,现在这个问题是怎么解决的?很想知道