【问题标题】:Retrieving excel sheet cell value检索excel工作表单元格值
【发布时间】:2011-07-08 16:35:35
【问题描述】:

我正在使用 c# 来读取 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();

在这里,我正在从其他工作表中读取单元格,并希望将该值插入到其他工作表中。
但我没有得到任何“价值”的价值..

【问题讨论】:

  • 你如何确定value 没有值?
  • 为什么要将value 分配给ws.Cells[row, clmn] 两次?

标签: c# excel office-interop excel-interop


【解决方案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);

【讨论】:

    【解决方案2】:

    你可以试试这个……

    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 变量是行号。

    【讨论】:

      【解决方案3】:
      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  
             }
        

      【讨论】:

      • 好吧,我尝试了 3 次引用我的代码,但是当我按下代码标签时没有任何反应!那么,任何人都可以编辑它,看看这是否适用于他的情况?
      猜你喜欢
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      相关资源
      最近更新 更多