C#读取Excel内容(包含日文),提示外部表不是预期的格式

时间:2021-08-01 20:32:15
读Excel的程序我是这样写的:
 private void EcxelToGridView(string BtnExcPath,string sheetName)
        {
           
            //根据路径打开一个Excel文件并将数据填充到ds中
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + BtnExcPath + ";Extended Properties ='Excel 8.0;HDR=YES;IMEX=1'";
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            string strExcel = "";
            OleDbDataAdapter myCommand = null;

            strExcel = "select * from [" + sheetName + "]";


  在conn.Open()出报错。
手动打开该Excel文件,保存提示可能含有与Unicode文本不兼容的功能。
如果另保存一份,则C#读取没有问题。
这问题怎么处理,每天都有一个新的Excel文件,C#能做到自动另保存一份,而不用手工保存吗

7 个解决方案

#1


另保存一份?直接把这个文件复制一下不就可以吗?
conn.Open()报什么错?

#2


BtnExcPath 值是什么?有可能这个影响的

#3



string strConn = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + filenameurl + ";Extended Properties=Excel 8.0;";

        OleDbConnection conn = new OleDbConnection(strConn);

        conn.Open(); 
        
        string tableName=conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0][2].ToString().Trim();

        OleDbDataAdapter odda = new OleDbDataAdapter("select * from ["+tableName+"]",conn);

#4


“手动打开该Excel文件,保存提示可能含有与Unicode文本不兼容的功能。
如果另保存一份,则C#读取没有问题。
这问题怎么处理,每天都有一个新的Excel文件,C#能做到自动另保存一份,而不用手工保存吗”

说明是excel本身问题!
你在代码用FileInfo.CopyTo ,另存一份试试。。。

#5


 

public static DataTable ExcelToDataTable(string strExcelFileName, string strSheetName)
{
//源的定义
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";

//Sql语句
//string strExcel = string.Format("select * from [{0}$]", strSheetName); 这是一种方法
string strExcel = "select * from   [sheet1$]";

//定义存放的数据表
DataSet ds = new DataSet();

//连接数据源
OleDbConnection conn = new OleDbConnection(strConn);

conn.Open();

//适配到数据源
OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);
adapter.Fill(ds, strSheetName); 

conn.Close();

return ds.Tables[strSheetName];
}
 


然后直接把Table的数据Fill到DateGridView里面

#6


引用 4 楼 sdl2005lyx 的回复:
“手动打开该Excel文件,保存提示可能含有与Unicode文本不兼容的功能。
如果另保存一份,则C#读取没有问题。
这问题怎么处理,每天都有一个新的Excel文件,C#能做到自动另保存一份,而不用手工保存吗”

说明是excel本身问题!
你在代码用FileInfo.CopyTo ,另存一份试试。。。


FileInfo.CopyTo 不行,还是一样。

excel中含有日文,我想与这个有关系,我读Excel的方法处理不了这种情况?是要换一种读方法?

#7


复制和另保存不一样

#1


另保存一份?直接把这个文件复制一下不就可以吗?
conn.Open()报什么错?

#2


BtnExcPath 值是什么?有可能这个影响的

#3



string strConn = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + filenameurl + ";Extended Properties=Excel 8.0;";

        OleDbConnection conn = new OleDbConnection(strConn);

        conn.Open(); 
        
        string tableName=conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0][2].ToString().Trim();

        OleDbDataAdapter odda = new OleDbDataAdapter("select * from ["+tableName+"]",conn);

#4


“手动打开该Excel文件,保存提示可能含有与Unicode文本不兼容的功能。
如果另保存一份,则C#读取没有问题。
这问题怎么处理,每天都有一个新的Excel文件,C#能做到自动另保存一份,而不用手工保存吗”

说明是excel本身问题!
你在代码用FileInfo.CopyTo ,另存一份试试。。。

#5


 

public static DataTable ExcelToDataTable(string strExcelFileName, string strSheetName)
{
//源的定义
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";

//Sql语句
//string strExcel = string.Format("select * from [{0}$]", strSheetName); 这是一种方法
string strExcel = "select * from   [sheet1$]";

//定义存放的数据表
DataSet ds = new DataSet();

//连接数据源
OleDbConnection conn = new OleDbConnection(strConn);

conn.Open();

//适配到数据源
OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);
adapter.Fill(ds, strSheetName); 

conn.Close();

return ds.Tables[strSheetName];
}
 


然后直接把Table的数据Fill到DateGridView里面

#6


引用 4 楼 sdl2005lyx 的回复:
“手动打开该Excel文件,保存提示可能含有与Unicode文本不兼容的功能。
如果另保存一份,则C#读取没有问题。
这问题怎么处理,每天都有一个新的Excel文件,C#能做到自动另保存一份,而不用手工保存吗”

说明是excel本身问题!
你在代码用FileInfo.CopyTo ,另存一份试试。。。


FileInfo.CopyTo 不行,还是一样。

excel中含有日文,我想与这个有关系,我读Excel的方法处理不了这种情况?是要换一种读方法?

#7


复制和另保存不一样