2017-02-07 21 views
0

Excelファイルを読み込もうとしています。いくつかのセルは数式を含み、 "#REF!"として読み込まれます。私は数値計算のためにセルの値を求めています。私は数式については気にしません。数式を処理する方法はありますか? OLEDBでこれを行うことはできますか、またはinteropに切り替える必要がありますか?前もって感謝します。れたconnectionStringに、 OLEDBを使用してExcelを読み込み、一部のセルが正しく読み取られない

var connectionString = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0;HDR=NO;IMEX=1""", fileName); 
string firstSheetName; 
using (OleDbConnection con = new OleDbConnection(connectionString)) 
{ 
    con.Open(); 
    DataTable dt = con.GetSchema("Tables"); 
    firstSheetName = dt.Rows[0]["TABLE_NAME"].ToString(); 
} 

var adapter = new OleDbDataAdapter("SELECT * FROM [" + firstSheetName + "]", connectionString); 
var ds = new DataSet(); 
adapter.Fill(ds, "anyNameHere"); 
var data = ds.Tables["anyNameHere"]; 
string cellValue = (string)data.Rows[i].ItemArray[4]; 

私が "ImportMixedTypes =テキストTypeGuessRows = 0" を追加しようとしました。

var connectionString = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0;HDR=NO;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text""", fileName); 

これは役に立ちませんでした。

答えて

1

お試しください。 Getスキーマを使用する代わりに、getoledbschemaを使用します。

 OleDbConnection connExcel = new OleDbConnection(conStr); 
     OleDbCommand cmdExcel = new OleDbCommand(); 
     OleDbDataAdapter oda = new OleDbDataAdapter(); 
     DataTable dt = new DataTable(); 
     cmdExcel.Connection = connExcel; 

     connExcel.Open(); 
     DataTable dtExcelSchema; 
     dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
     string SheetName=GettingSheetName(dtExcelSchema); 
     connExcel.Close(); 

     //Read Data from First Sheet 
     connExcel.Open(); 
     cmdExcel.CommandText = "SELECT * From [" + SheetName + "]"; 
     oda.SelectCommand = cmdExcel; 
     oda.Fill(dt); 
     connExcel.Close(); 
+0

これはそのトリックでした。 – kurgaan

関連する問題