2016-12-28 19 views
0

を使用して、特殊な文字が含まれている私は、Excelシートの3つの列があります。私は、データをフェッチしようとするとは、Excelからデータを取得OLEDB C#

  1. 仕入
  2. PHONENO
  3. EMAILID

をExcelからPhoneNo列に012-231564データ型が含まれている場合、結果のデータセットには空白セルが含まれます

var connString = string.Format("Provider=Microsoft.Jet.OleDb.4.0; 
Data Source={0};Extended Properties=\"Text;HDR=YES;FMT=Delimited\"", 
Path.GetDirectoryName(Server.MapPath("~/DataMiningFiles/" + StrFileName))); 

var query = "SELECT * FROM [" + Path.GetFileName(Server.MapPath("~/DataMiningFiles/" + StrFileName)) + "]"; 

using (var adapter = new OleDbDataAdapter(query, conn)) { 
    var ObjGetExcelData = new DataSet("CSV File"); 
    adapter.Fill(ObjGetExcelData); 
} 

答えて

0

私はこのtbhについてかなり変わってしまいます。だから見ることができます...

  1. 私はobseleteであるので、私はそのドライバを使用しません。 Microsoft.ACE.OLEDB.12.0を使用
  2. 混合データ型をインポートするには、IMEX = 1を指定する必要があります。
  3. 拡張プロパティでテキストファイルのインポートが指定されていますが、エクセルをインポートすると言っています。もしそうなら、それを指定してください。
  4. 一般的に私はこの表を表で読んでいます。私はあなたのDataSetに多くを読み取る試みに精通していないよ。私は新年に飽きてしまってもいいかもしれません。この例では、しかしなお、「VAR」変数の使用を避けるようにしてみてください...

    string sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + 
              "Data Source=e:\\Test.xlsx;" + 
              "Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\""; 
    
    OleDbConnection oConnection = new OleDbConnection(); 
    oConnection.ConnectionString = sConnectionString; 
    oConnection.Open(); 
    
    //Find all readable Named Ranges and Worksheets 
    DataTable ExcelSheetNames = oConnection.GetSchema("Tables"); 
    
    foreach (DataRow SheetNameRow in ExcelSheetNames.Rows) 
    { 
        string SheetName = (string)SheetNameRow["Table_Name"]; 
    
        //Only handle WorkSheets. Named Ranges are otherwise named. 
        if (SheetName.EndsWith("$") | SheetName.EndsWith("$'")) 
        { 
         DataTable SheetContents = new DataTable(); 
    
         //Read the contents of the sheet into a DataTable 
         using (OleDbCommand oCmd = new OleDbCommand("Select * From [" + SheetName + "]", oConnection)) 
         { 
          SheetContents.Load(oCmd.ExecuteReader()); 
         } 
    
         //You can also put the DataTable load on one line (I do) 
         //SheetContents.Load(new OleDbCommand("Select * From [" + SheetName + "]", oConnection).ExecuteReader()); 
    
         //Print the content of cells A2..C2 to the console window 
         Console.WriteLine(SheetContents.Rows[0].ItemArray[0]); 
         Console.WriteLine(SheetContents.Rows[0].ItemArray[1]); 
         Console.WriteLine(SheetContents.Rows[0].ItemArray[2]); 
    
        } 
    } 
    
    oConnection.Close(); 
    

に動作します。強くそれらを入力し、あなたは後で多くの心痛や自分自身を保存します。

あなたは、あなたは単にそれをすべてをコーディングすることができます読みたいシートの名前を知っていれば...

string sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + 
           "Data Source=e:\\Test.xlsx;" + 
           "Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\""; 

    OleDbConnection oConnection = new OleDbConnection(); 
    oConnection.ConnectionString = sConnectionString; 
    oConnection.Open(); 

    DataTable SheetContents = new DataTable(); 

    SheetContents.Load(new OleDbCommand("Select * From [Sheet1$]", oConnection).ExecuteReader()); 

    Console.WriteLine(SheetContents.Rows[0].ItemArray[0]); 
    Console.WriteLine(SheetContents.Rows[0].ItemArray[1]); 
    Console.WriteLine(SheetContents.Rows[0].ItemArray[2]); 

    oConnection.Close(); 
関連する問題