我正在尝试将输入的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;
}
}
}
}
}
}
答案 0 :(得分:0)
您的代码需要进行2次小改动
break;
。这将导致程序退出for statement
更改为使用xlRange
而不是xlWorksheet
,否则也会中断。正确的陈述如下: 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。使用该变量,如果找到值,则只能写入控制台一次