2017-08-17 8 views
1

こんにちは私はExcelファイルsettings.xlsxを持っています。私はこのファイルからデータを読み込み、自分のコードで使われている変数にそのデータを割り当てたいと思います。CでExcelファイルからデータを読み取る#

   Column1 Column2 
     Row1 Data  500 
     Row2 Address  30 
     Row3 Value  FPGA 

私はデータ、アドレスと変数としての私のコードで価値を持っています。 誰かが私の擬似コードでC#を助けてファイルを開き、自分の要件に従ってファイルを読むことができますか? Excelファイルの "Data"ワードを検索し、 "Data"を含むセルの横にある値を変数 "Data"に割り当てたいとします。私はそれが混乱していることを知っているが、私は本当に最終的なデータを以下のように見せたい。

Data=500 //Finally I want my variables to have the data as follows 
     Address=30 
     Value= FPGA 

私はC#に新しいですから、私は私のコードで間違って起こっているかを理解することはできませんよ、私のcode.Butでファイルを開いてみました。 私はこの時点で立ち往生しています。オープン関数がエラーを出しています。親切に私を助けてください。私はC#コードでExcelファイルを開こうとしました。しかし、どういうわけか、Open関数のオーバーロードメソッドは1つの引数を取っていないと言っています。ファイルを開いて読み込む方法は?

string Filepath = @Filename; 
Excel.Application excelapp = new Excel.Application(); 
excelapp.Visible = true; 
var MyBook = excelapp.Workbooks.Open(Filepath); 

somoneが同じものに対して擬似コードを与えると、本当に役に立ちます。

こんにちは、 ファイルを開くことができました。

string Filepath = Path.Combine(Directory.GetCurrentDirectory(), Filename); 
Excel.Application excelapp = new Excel.Application(); 
excelapp.Visible = true; 
var Workbook = excelapp.Workbooks.Open(Filepath, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0,true,1, 0); 

var xlWorkSheet =(Excel.Worksheet)Workbook.Worksheets.get_Item(2); Excel.Range range = xlWorkSheet.UsedRange;

しかし、変数にセルの値を格納しようとすると、エラーが発生します。私は何とかCells.valueを使うことができません。私は以下を使ってみましたが、データを保存できませんでした。誰でも助けることができますか?

uint pbaudRate2 = Convert.ToUInt32(range.Value2.ToString());ここ

Why is cells.value not coming for me?

+0

エースOLEDBは私の好ましい選択は、あなたが定期的にSQLを使用したExcelシートを照会することができますです – bradbury9

答えて

0

セル値は、オブジェクトの2次元配列にコピーされExcel細胞

// cf. http://support.microsoft.com/kb/302084/en-us 
    Excel.Application XL = new Microsoft.Office.Interop.Excel.Application(); 
    Excel._Workbook WB = XL.Workbooks.Open(fileName, ReadOnly: true); 
    Excel._Worksheet WS = (Excel._Worksheet)WB.Sheets[sheetName]; 
    Excel.Range R = WS.get_Range(GetAddress(row1, col1), GetAddress(row2, col2)); 
    object[,] arr = (object[,])R.Value; 


    .... 

    private string GetAddress(int rowNumber, int columnNumber) 
    { 
     int dividend = columnNumber; 
     string columnName = String.Empty; 
     int modulo; 

     while (dividend > 0) 
     { 
      modulo = (dividend - 1) % 26; 
      columnName = Convert.ToChar(65 + modulo).ToString() + columnName; 
      dividend = (int)((dividend - modulo)/26); 
     } 

     return columnName + rowNumber; 
    } 

の範囲を読み取る方法小さなデモです。さらなる処理は値のタイプに依存します。

アレイの転送は、単一セルコピー操作のネストループよりもはるかに高速であることに注意してください。

+0

こんにちは:もう一つ注意すべき:あなたが何かをしたい場合はExcelスプレッドシート内の数字はダブルスとして取得した後、キャストする必要があります私のコードで何が間違っていますか? uint pbaudRate2 = Convert.ToUInt32(range.Value2.ToString());変数のセルの値を格納するには? – dipk11

0

Excelファイルを少し変更することができれば、データを読むのがはるかに簡単です。最初の行には列名が必要です(名前は「ColumnName」、「ColumnValue」など)。後続行のデータも必要です。次に、次のようなコードを使用できます。

string xlConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=yourfullfilepathandname.xlsx;Extended Properties='Excel 8.0;HDR=Yes;';"; 
var xlConn = new OleDbConnection(xlConnStr); 

var da = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", xlConn); 
var xlDT = new DataTable(); 
da.Fill(xlDT); 

これで、DataTableから値にアクセスできるようになりました。あなたの場合:xlDT.Rows [1] [1]はアドレスの値を保持します(この場合は30)。

int myAddress = (int)(double)xlDT.Rows[1][1]; 
関連する問題