如何从每个单元格中获取数据

本文关键字:获取 数据 单元格 | 更新日期: 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;
    }