2011-07-08 103 views
2

我使用c#讀取excel表格中特定單元格的值。但按我的代碼,我沒有得到任何價值..檢索excel表格單元格值

我對獲取單元格的值代碼:

foreach (DataRow dr in sourceds.Tables[0].Rows) { 
    while (clmn < dr.ItemArray.Count()) { 
     value = ((Microsoft.Office.Interop.Excel.Range)ws.Cells[row,clmn]).Text.ToString(); 
     ws.Cells[row, clmn] = value; 
     ws.Cells[row, clmn] = value; 
     clmn++; 
    } 
    row++; 
} 
wb.Save(); 

我在這裏讀其他表的單元格,希望將在其它該值片。
但我沒有得到任何值的「價值」。

+0

你怎麼確定'價值'沒有價值? –

+2

爲什麼給'ws.Cells [row,clmn]'賦值''兩次? – comecme

回答

1

.Text參數將只有一個值,如果內容是文本。一般而言,您希望使用.Value.ToString()

你提到從另一張表獲得價值。你在哪裏設置表單?您應該可以執行類似wb.Sheets[0].Cells[row,clmn].Value.ToString()的操作(假設您需要第一張表中的數據)。

看着這個代碼,你正在逐個單元格複製項目。這是很容易使用選擇/複製/粘貼功能來代替:

Range r1 = wb.Sheets[0].Cells["C1", "E5" ]; // define corners of selection square 
Range r2 = wb.Sheets[1].Cells["A1"];  // destination 
r1.Select(); 
r1.Copy(r2); 
0
  1. 在應用程序中添加Microsoft.Office.Interop.Excel.dll。按照你的方法的代碼行
  2. 寫/或使用此方法:

     private void readExcel() 
        { 
         object _row = 1; 
         object _column = 1; 
         Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); 
         excelApp.Visible = false; 
         excelApp.ScreenUpdating = false; 
         excelApp.DisplayAlerts = false; 
         Microsoft.Office.Interop.Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(@"D:\\Book1.xlsx", 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false); 
         Microsoft.Office.Interop.Excel.Sheets excelSheets = excelWorkbook.Worksheets; 
         string currentSheet = "Sheet1"; 
         Microsoft.Office.Interop.Excel.Worksheet excelWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)excelSheets.get_Item(currentSheet); 
         Microsoft.Office.Interop.Excel.Range range = (Microsoft.Office.Interop.Excel.Range)excelWorksheet.UsedRange; 
         string sValue = (range.Cells[_row, _column] as Microsoft.Office.Interop.Excel.Range).Value2.ToString(); 
         //sValue has your value 
        } 
    
+0

嗯,我試過3次引用我的代碼,但沒有任何反應,當我按代碼標籤!那麼,任何人都可以編輯它,看看它是否適合他的情況? – ridoy

+0

好的,我做到了。 – ridoy

1

你可以試試這個...

MyCellValue = (((Microsoft.Office.Interop.Excel.Range)oWorkSheet.Cells[myRow, myCol]).Value2 != null ? ((Microsoft.Office.Interop.Excel.Range)oWorkSheet.Cells[myRow, myCol]).Value2.ToString().Trim() : ""); 

您檢查值不爲空所以你沒有得到一個例外。 myCel變量可以是數字(表示列的數字)或字符串(表示列的名稱,即「A」)。 myRow變量是行的編號。