2015-11-01 60 views
0

我正在为我在医院工作的朋友做一个应用程序。如何从每个单元格获取数据?

该应用程序基本上只是从Excel中抓取数据,对其进行排序并显示。 我坚持抓住所有的数据。 excel文件有3列和n行。第一列的单元格并不总是被填充。

我尝试了采取这些数据的不同方式,并且始终无法使其正常工作。我试图将空单元格包含到搜索中,但现在temp会将所有空字符串返回给我。

如何迭代每一行直到结束,并在每次迭代时从每列中获取数据,即使它是空的 - return“”?

  Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); 
      Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(currentExcelLocation, 0, true, 5, "", "", false, Excel.XlPlatform.xlWindows, 
                     "", false, true, 0, false, false, false); 
      Excel.Sheets excelSheets = excelWorkbook.Worksheets; 
      Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(3); 
      int iTotalRows = excelWorksheet.UsedRange.Rows.Count; 
      for (int i = 1; i <= iTotalRows; ++i) 
      { 
       string tempL = (excelWorksheet.Cells[i, 1] as Excel.Range).SpecialCells(Excel.XlCellType.xlCellTypeBlanks).Text.ToString(); 
       if (tempL != "") { temp = tempL; } 
       string tempS = (excelWorksheet.Cells[i, 2] as Excel.Range).Value2.ToString(); 
       string tempD = (excelWorksheet.Cells[i, 3] as Excel.Range).Value2.ToString(); 
       DataScheme.Symptoms tempSD = new DataScheme.Symptoms(tempS, tempD); 
       if (data.FindIndex(a => a.Location == temp) < 0) { data.Add(new DataScheme(temp)); } 
       data.Find(b => b.Location == temp).SympList.Add(tempSD); 
       textBox6.Text += temp + Environment.NewLine; 
      } 
      excelWorkbook.Close(0); 
      excelApp.Quit(); 
      Marshal.FinalReleaseComObject(excelApp); 
      Marshal.FinalReleaseComObject(excelWorkbook); 
      Marshal.FinalReleaseComObject(excelSheets); 
      Marshal.FinalReleaseComObject(excelWorksheet); 
+0

最后你的意思是每行最后一个数据单元? –

回答

1

从的NuGet获得closedXML,然后按照这个方法来Excel数据返回到数据表,然后这样你可以从每一行数据。

public static DataTable ImportSheet(string fileName) 
    { 
     var datatable = new DataTable(); 
     var workbook = new XLWorkbook(fileName); 
     var xlWorksheet = workbook.Worksheet(1); 
     var range = xlWorksheet.Range(xlWorksheet.FirstCellUsed(), xlWorksheet.LastCellUsed()); 

     var col = range.ColumnCount(); 
     var row = range.RowCount(); 

     datatable.Clear(); 
     for (var i = 1; i <= col; i++) 
     { 
      var column = xlWorksheet.Cell(1, i); 
      datatable.Columns.Add(column.Value.ToString()); 
     } 

     var firstHeadRow = 0; 
     foreach (var item in range.Rows()) 
     { 
      if (firstHeadRow != 0) 
      { 
       var array = new object[col]; 
       for (var y = 1; y <= col; y++) 
       { 
        array[y - 1] = item.Cell(y).Value; 
       } 

       datatable.Rows.Add(array); 
      } 
      firstHeadRow++; 
     } 
     return datatable; 
    } 
+0

谢谢你的回答。我安装了ClosedXML。但它不想使用xls文件,在var workbook = new XLWorkbook(fileName);上停止执行。它虽然与xlsx一起工作。但没关系。和datatable.Rows [23] [0] .ToString();返回不是字符串的东西。 23,0是excel中的空单元格。它适用于非空单元虽然 – Qeeet

+0

什么是单元的价值是什么问题,是的,我假设您使用的是xlsx,因为这是过去8年excel文件中的最新标准 –

+0

closedXML确实处理空单元格,那么最有可能的问题是你的代码,你可以编辑你的问题,以显示你如何处理数据表和获取行值 –

相关问题