C#获取excel表名是乱码(中文部分变成问号)。

hxd20123 2012-06-17 02:36:56
代码是:
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0\";Data Source=" + excelFileName))
{
conn.Open();
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
for (int i = 0; i < dt.Rows.Count; i++)
{

string mc = dt.Rows[i][2].ToString().Trim();


}

conn.Close();
}

我的表名是:“1样式二”获得的表名却是:1??? ,但是我的马excel打开再保存一次他又不会出现乱码了。
麻烦大家帮个忙,谢谢了。。。
...全文
1519 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
五位数 2014-04-01
  • 打赏
  • 举报
回复
我也是这个问题。一直没有解决。希望高手来给出解决方案。
lockie 2013-09-10
  • 打赏
  • 举报
回复
我也遇到了这个问题,楼主最后怎么解决的?跪求
dnfon 2012-06-20
  • 打赏
  • 举报
回复
可以采用读取Access的方式读取excel中的数据
首先添加System.Data.OleDb引用

参考下:http://www.it165.net/pro/html/201206/2815.html
__天涯寻梦 2012-06-20
  • 打赏
  • 举报
回复
看看 java 生成的地方用的什么编码
hxd20123 2012-06-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

我亲自试了一下,因为我用的是 Excel 2010 的,连接字符串有点区别,但是没有你说的问题,而且我的系统是英文版的。
C# code

using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=\"Excel 12.0;HDR=YES\"……
[/Quote]
你这种应该是手动加的,手动加的没有问题。。我打开后保存一次中文都没有问题了。就是生成后读出来是乱码。
hxd20123 2012-06-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

excel哪里来的,是不是标准的excel文件,网上很多生成excel的方法并不是标准的excel格式的文件
[/Quote]

是java生成的,请问怎么办呢。。 感觉就是那边生成的问题。我打开后保存 下就好了。
火星大能猫 2012-06-18
  • 打赏
  • 举报
回复
excel哪里来的,是不是标准的excel文件,网上很多生成excel的方法并不是标准的excel格式的文件
youzelin 2012-06-18
  • 打赏
  • 举报
回复
我亲自试了一下,因为我用的是 Excel 2010 的,连接字符串有点区别,但是没有你说的问题,而且我的系统是英文版的。

using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=\"Excel 12.0;HDR=YES\";Data Source=\"C:\\Users\\youz\\Desktop\\survivers.xlsx\""))
{
conn.Open();
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
for (int i = 0; i < dt.Rows.Count; i++)
{
string mc = dt.Rows[i][2].ToString().Trim();
Console.WriteLine(mc);
}

conn.Close();
}

// 输出结果:(没有出现'?')
1样式表
survivers
hxd20123 2012-06-18
  • 打赏
  • 举报
回复
问题还是未解决,大家帮下忙呀。一般带问号的是什么编码问题引起的?
fsstolw 2012-06-18
  • 打赏
  • 举报
回复
呵呵,你可以试一下,我操作的表名字都是中文的。
[Quote=引用 3 楼 的回复:]
引用 1 楼 的回复:

我用下面这种方式取,是正常的,你可以试试:
//获取EXCEL表中的SHEET名称
DataTable dtExcelSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
……


不行的,你这个代码和我的不是一样的吗? 你获取的英文当然没有问题。。我是说中文的才有问题。
[/Quote]
刘奔 2012-06-17
  • 打赏
  • 举报
回复
牛逼!
hxd20123 2012-06-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

我用下面这种方式取,是正常的,你可以试试:
//获取EXCEL表中的SHEET名称
DataTable dtExcelSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
……
[/Quote]

不行的,你这个代码和我的不是一样的吗? 你获取的英文当然没有问题。。我是说中文的才有问题。
fml927 2012-06-17
  • 打赏
  • 举报
回复
文字编码的问题,C#默认采用unicode编码。而中文系统产生的文件一般是GB2132编码 也可以用编码转换函数 转换一下就好
fsstolw 2012-06-17
  • 打赏
  • 举报
回复
我用下面这种方式取,是正常的,你可以试试:
//获取EXCEL表中的SHEET名称
DataTable dtExcelSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new object[] { null, null, null, "TABLE" });

for (int i = 0; i < dtExcelSchema.Rows.Count; i++)
{
SheetName = dtExcelSchema.Rows[i]["TABLE_NAME"].ToString();

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧