在excel文档中搜索名称

时间:2013-10-09 04:40:45

标签: c# .net vb.net

我有这样的excel文件

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

现在我需要使用用户输入的字符串

搜索Excel文档中的名称字段

例如

用户输入文字--->的 XXXX

  

我想在excel中搜索名称字段的字符串   文件

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

2 个答案:

答案 0 :(得分: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());

}

请告诉我改进情况。

答案 1 :(得分:0)

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

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;
    }
}

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