You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Excel行索引将特定行插入DataGridView(C#实现)

嘿,我来帮你搞定这个需求!结合你提到的通过行ID用WHERE子句获取Excel行数据并填充DataGridView的思路,我给你两种实用的实现方案,附代码示例:

方案一:使用OleDb(贴合你的SQL查询习惯)

这种方式用SQL语句操作Excel,完全符合你说的select * from [sheet...]的思路,需要注意不同Excel版本的连接字符串差异:

步骤说明

  1. 先通过搜索匹配值(比如B列的VALUE2)获取对应的行ID;
  2. 用行ID作为WHERE条件查询整行数据;
  3. 将查询结果填充到DataGridView中。

代码实现

首先引用必要的命名空间:

using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;

然后实现核心方法:

// 根据行ID获取Excel行数据并添加到DataGridView
private void AddToDataGridView(int rowId)
{
    // 针对.xlsx文件的连接字符串,.xls文件替换成Jet.OLEDB.4.0
    string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\YourExcelFile.xlsx;Extended Properties='Excel 12.0 Xml;HDR=YES;'";

    using (OleDbConnection conn = new OleDbConnection(connectionString))
    {
        conn.Open();
        // 假设你的Excel表格有个名为"ID"的列存储行ID,用WHERE子句精准定位
        string query = $"SELECT * FROM [Sheet1$] WHERE ID = {rowId}";
        
        using (OleDbCommand cmd = new OleDbCommand(query, conn))
        {
            OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
            DataTable dt = new DataTable();
            adapter.Fill(dt);

            // 将查询到的行添加到DataGridView
            if (dt.Rows.Count > 0)
            {
                dataGridView1.Rows.Add(dt.Rows[0].ItemArray);
            }
        }
    }
}

// 辅助方法:通过搜索值(比如B列的VALUE2)获取对应的行ID
private int GetRowIdBySearchValue(string searchValue)
{
    string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\YourExcelFile.xlsx;Extended Properties='Excel 12.0 Xml;HDR=YES;'";
    
    using (OleDbConnection conn = new OleDbConnection(connectionString))
    {
        conn.Open();
        // 搜索B列等于目标值的行,返回对应的ID
        string query = $"SELECT ID FROM [Sheet1$] WHERE B = '{searchValue}'";
        
        using (OleDbCommand cmd = new OleDbCommand(query, conn))
        {
            object result = cmd.ExecuteScalar();
            return result != null ? int.Parse(result.ToString()) : -1;
        }
    }
}

调用示例

// 当搜索匹配到B列的VALUE2时
int matchedRowId = GetRowIdBySearchValue("VALUE2");
if (matchedRowId != -1)
{
    AddToDataGridView(matchedRowId);
}
方案二:使用EPPlus(更轻量的Excel操作库)

如果你不想依赖OleDb驱动,EPPlus是个不错的选择,它直接操作Excel文件,无需安装额外驱动,需要先通过NuGet安装EPPlus包。

代码实现

using OfficeOpenXml;
using System.IO;
using System.Windows.Forms;

private void AddToDataGridView(int rowId)
{
    FileInfo excelFile = new FileInfo("C:\\YourExcelFile.xlsx");
    
    using (ExcelPackage package = new ExcelPackage(excelFile))
    {
        ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"];
        int targetRow = 0;

        // 遍历表格找到行ID对应的行(假设ID在A列)
        for (int i = worksheet.Dimension.Start.Row; i <= worksheet.Dimension.End.Row; i++)
        {
            if (worksheet.Cells[i, 1].Value?.ToString() == rowId.ToString())
            {
                targetRow = i;
                break;
            }
        }

        // 获取该行所有列的数据
        object[] rowData = new object[worksheet.Dimension.End.Column];
        for (int col = 1; col <= worksheet.Dimension.End.Column; col++)
        {
            rowData[col - 1] = worksheet.Cells[targetRow, col].Value ?? DBNull.Value;
        }

        // 添加到DataGridView
        dataGridView1.Rows.Add(rowData);
    }
}

补充说明

  • 如果你的“行ID”指的是Excel本身的行号(而非表格中的ID列),只需调整查询逻辑:比如OleDb方式可以用SELECT * FROM [Sheet1$A{rowNum}:Z{rowNum}]直接定位行;EPPlus则直接用targetRow = rowId即可。
  • 注意处理空值和异常情况,比如未找到匹配行、Excel文件不存在等。

内容的提问来源于stack exchange,提问作者sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:15:18