如何从每个单元格中获取数据
本文关键字:获取 数据 单元格 | 更新日期: 2023-09-27 18:20:17
我正在为在医院工作的朋友做一个应用程序。
该应用程序的基本功能就是从excel中获取数据,进行排序并显示。我坚持要掌握所有的数据。excel文件有3列和n行。第一列的单元格并不总是填充的。
我尝试过不同的方法来获取这些数据,但总是无法使其正常工作。我试图在搜索中包含空单元格,但现在temp返回所有空字符串。
如何迭代每一行直到结束,并在每次迭代时从每一列获取数据,即使它是空的-返回"?
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);
从Nuget中获取closedXML,然后按照此方法将excel数据返回到Datatable中,这样就可以从每一行中获取数据。
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;
}