2017-08-17 80 views
1

嗨,我有一個Excel文件settings.xlsx。我想從這個文件中讀取數據,並將我的代碼中使用的變量與數據一起分配。從Excel文件中讀取數據在c#

例如

   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 

我試圖打開一個文件在我code.But,因爲我是新來的C#,我不能夠理解什麼是我的代碼去錯了。 我被困在這一點。打開功能給出錯誤。請幫助我。我試圖打開我的C#代碼中的Excel文件。但不知何故,它說開放函數重載方法不帶一個參數。如何打開和閱讀文件?

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

這裏是一個小的演示如何讀取範圍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; 
    } 

值複製到對象的2D陣列的細胞。進一步處理取決於值類型。

請注意,數組的傳輸比單個單元複製操作的嵌套循環要快得多。

+0

喜我的代碼有什麼問題? 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)。有一點需要注意:在Excel電子表格中的數字需要檢索的雙打再投,如果你想別的東西:

int myAddress = (int)(double)xlDT.Rows[1][1];