2

我有这样的excel文档

id    | Name   |  Address | Other | 
-----------------------------------
#1    | xxxx   |  xxxx    | xxxx  |
#2    | yyyy   |  yyyy    | yyyy  |

现在我需要使用用户输入的字符串搜索excel 文档中的名称字段

例如

用户输入文本---> xxxx

我想在excel文档中搜索带有name字段的字符串

如果它存在意味着显示消息框..我怎样才能用 C#.net 做这个
任何人帮助我

4

2 回答 2

1

基本上,您需要将整个 excel 文件读取到数据表中,然后搜索数据表。

请原谅我,因为我对 LINQ 的了解有限。

// You can change C:\Members.xlsx to any valid path 
// where the file is located.

string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;
    FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'">
                Data Source=C:\Members.xlsx;Extended
    FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'">
                Properties=""Excel 12.0;HDR=YES;"""; 
// if you don't want to show the header row (first row) in the grid
// use 'HDR=NO' in the string

string strSQL = "SELECT * FROM [Sheet1$]";
OleDbConnection excelConnection = new OleDbConnection(connectionString);
excelConnection.Open(); // this will open an Excel file
OleDbCommand dbCommand = new OleDbCommand(strSQL,excelConnection);
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand);

// create data table

DataTable dTable = new DataTable();

dataAdapter.Fill(dTable);

// bind the datasource

dataBingingSrc.DataSource = dTable;
// assign the dataBindingSrc to the DataGridView

dgvExcelList.DataSource = dataBingingSrc;

// dispose used objects

dTable.Dispose() dataAdapter.Dispose(); dbCommand.Dispose(); excelConnection.Close(); excelConnection.Dispose();

然后您可以根据您的要求搜索 dTable。示例搜索如下所示

string strExpr = null;

strSearch = "Name LIKE  'Pet%'";

DataRow[] Rows = null;

Rows = dTable.Select(strSearch);


for (i = 0; i <= Rows.GetUpperBound(0); i++) {
    MessageBox.Show(Row(i)(0).ToString());

}

请让我知道改进。

于 2013-10-09T05:26:11.217 回答
0

一种解决方案是将 Excel 文件导出为 .csv(逗号分隔值)。然后您可以逐行阅读,用逗号分隔行并检查第二个元素(索引 1)是否包含您要搜索的内容。第二个元素,因为您的 Name 列是第二列。

string searched="yourname";

using (StreamReader sr = new StreamReader("filename.csv"))
{
    while(!sr.EndOfStream)
    {
        string[] splitLine = sr.ReadLine().Split(',');
        if (splitLine[1]=="yourname") // or .Contains("yourname")
            return true;
    }
}

没有测试代码,但它应该可以工作。

于 2013-10-09T05:16:54.963 回答