匹配字符串值与excel电子表格中具有相同或接近相同值的单元格

时间:2017-03-28 17:21:54

标签: c# excel ip match

我正在尝试将输入的IP地址与excel中的电子表格中的单元格进行匹配。我输入了IP,并且变量在excel电子表格中搜索最接近的匹配。我的代码的问题是excelIP变量,无论什么只存储我的电子表格中的第一个单元格值,所以永远不会匹配。

using System;
using System.Net;
using Microsoft.Office.Interop.Excel;
using Excel = Microsoft.Office.Interop.Excel;
using System.Data.OleDb;
using System.Data;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;

namespace Investigations
{
    class Program
    {


        static void Main(string[] args)
        {



            IPAddress addr = IPAddress.Parse("8.8.8.8");
            IPHostEntry entry = Dns.GetHostEntry(addr);
            Console.WriteLine("IP Address: " + addr);
            Console.WriteLine("Host Name: " + entry.HostName);


            Excel.Application xlApp = new Excel.Application();
            Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"C:\Users\Subnets1.xlsx");
            Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
            Excel.Range xlRange = xlWorksheet.UsedRange;





            for(int i = 0; i < xlWorksheet.Rows.Count; i++)
            {
                IPAddress excelIP;

                if (IPAddress.TryParse(xlWorksheet.Cells[i + 1, 1].Value.ToString(), out excelIP))
                {
                    if (excelIP.ToString().Equals(addr))
                    {
                        Console.Write(excelIP.ToString());
                        Console.WriteLine(" -This id was found");
                    }

                    else
                    {
                        Console.WriteLine("No Match ");
                        break;
                    }



                }
            }

        }

    }
 }

1 个答案:

答案 0 :(得分:0)

您的代码需要进行2次小改动

  1. 删除其他地方的break;。这将导致程序退出
  2. for statement更改为使用xlRange而不是xlWorksheet,否则也会中断。正确的陈述如下:
  3. for (int i = 0; i < xlRange.Rows.Count; i++)

    尝试一下,让我知道你的意见

    编辑:注意到您可能只希望只有1个匹配或不匹配的结果,所以您需要这样:

            var match = false;
    
            for (int i = 0; i < xlRange.Rows.Count; i++)
            {
    
                IPAddress excelIP;
    
                if (IPAddress.TryParse(xlWorksheet.Cells[i + 1, 1].Value.ToString(), out excelIP))
                {
                    if (excelIP.ToString().Equals(addr))
                    {
                        match = true;
                        Console.Write(excelIP.ToString());
                        Console.WriteLine(" -This id was found");
                    }
                }
            }
            if (!match)
            {
                Console.WriteLine("No Match ");
            }
    

    在这种情况下,布尔匹配声明为false,仅在找到匹配时才更改为true。使用该变量,如果找到值,则只能写入控制台一次