2017-07-21 9 views
-1

私のプログラムで以下のC#コードを使用して、oledbconnectionを使用して97〜2003のスプレッドシートデータをデータテーブルに読み込み、現在のコンテキストに存在しない名前に変換します。行の下Excelableスプレッドシートをデータテーブルに変換する

DataTable rs = null; 

string path = Path.GetFullPath(filePath); 
odConnection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1;';"); 
odConnection.Open(); 
OleDbCommand cmd = new OleDbCommand(); ; 
OleDbDataAdapter oleda = new OleDbDataAdapter(); 
DataSet ds = new DataSet(); 
DataTable dt = odConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
string sheetName = string.Empty; 
if (dt != null) 
{ 
    sheetName = dt.Rows[0]["Sheet_Name"].ToString(); 
} 

cmd.Connection = odConnection; 
cmd.CommandType = CommandType.Text; 
cmd.CommandText = "SELECT * FROM [" + sheetName + "]"; 
oda = new OleDbDataAdapter(cmd); 
oda.Fill(ds, "excelData"); 
rs = ds.Tables["excelData"]; 
+0

詳細を追加してください。例外、行、シートにはExcelがあります –

+0

行3、odConnectionという名前は現在のコンテキストには存在しません。 – PVB

+1

odConnectionが存在しないように宣言していません。 'odConnection'の前に' var'を追加してみてください。例えば –

答えて

1

ここでは、xlsxファイルの特別なシートからすべての列と行を取得する方法の例を示します。このコードでは、xlsxファイルからSheet2のすべてのデータを取り出し、DataTableにその値を入力します。

うまくいけば、これが役に立ちます。

using System; 
using System.Data; 
using System.Data.OleDb; 

namespace ConsoleApp4 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DataTable rs = new DataTable(); 

      using (var odConnection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\Users\IIG\Desktop\test.xlsx;Extended Properties='Excel 12.0;HDR=YES;IMEX=1;';")) 
      { 
       odConnection.Open(); 

       using (OleDbCommand cmd = new OleDbCommand()) 
       { 
        cmd.Connection = odConnection; 
        cmd.CommandType = CommandType.Text; 
        cmd.CommandText = "SELECT * FROM [Sheet2$]"; 
        using (OleDbDataAdapter oleda = new OleDbDataAdapter(cmd)) 
        { 
         oleda.Fill(rs); 
        } 
       } 
       odConnection.Close(); 
      } 
      foreach(DataRow row in rs.Rows) 
      { 
       foreach(object item in row.ItemArray) 
       { 
        Console.Write(item +"\t"); 
       } 
       Console.WriteLine(); 
      } 
     } 
    } 
} 
+0

ありがとう。これは役立ちます – PVB

0

問題を引き起こしている可能性があります -

if (dt != null) 
    { 
     sheetName = dt.Rows[0]["Sheet_Name"].ToString(); 
    } 

これは、シートの名前を返す必要があり

dt.Rows[0]["Table_name"].ToString(); 

を使用してみてください。

+0

何がOPに求めていないようだ... – Prisoner

関連する問題