如何通过名称获取并比较Excel电子表格中单元格的内容?

我试图比较一个string单元格,以取代它,如果它是平等的。 但是,当我尝试执行下面的0x800A03EC错误发生的代码。

int cont = 0; string cell; do { cont++; cell = rCol.ToUpper() + cont.ToString(); // = "D1" string cellData = ((Excel.Range)sheet.Cells[cell]).Value2.ToString(); if (cellData == from) { sheet.Cells[cell] = to; } } while (sheet.Cells[cell] == null); 

我怎样才能做到这一点?

如果您知道要检查的单元格,例如A1,则可以这样做:

 using System; using System.Runtime.InteropServices; using Excel = Microsoft.Office.Interop.Excel; namespace Test { class Program { static void Main(string[] args) { // create app var excelApp = new Excel.Application(); // open workbook var workbook = excelApp.Workbooks.Open( @"C:\Users\Home\Documents\Book1.xlsx", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); // open sheet var sheet = (Excel.Worksheet)workbook.Sheets[1]; // create some variables var from = "Pete"; var to = "Dave"; // compare cell A1 [1,1] with 'from' if (string.Equals(sheet.Cells[1,1].Value, from)) { sheet.Cells[1, 1].Value = to; } // save the workbook workbook.Save(); // close the workbook and release resources workbook.Close(true, workbook.Path); Marshal.ReleaseComObject(workbook); workbook = null; } } } 

试试这个来获得一个简单的范围:

 int row = 1; string col = "D"; string text = sheet.get_Range(col + row.ToString()).Value; 

0x800A03EC错误是由Excel返回的值,意思是NAME_NOT_FOUND(请参阅此SA问题 )。 看起来你正在传递一个Excel无法find的参数,可能是因为你传递了一个string(“D1”),而不是两个整数参数(4,1)。

不可能知道你在哪里得到rCol.ToUpper()的值,而不会看到更多的代码。 但是,如果您试图通过一系列的行和列检查是否存在相等条件(这就是您正在尝试的),那么您将很快遇到如何使用大写字母来递增列值的麻烦问题(只是尝试,没有多less乐趣!)。

我最近在VB中做的一个解决scheme是使用本地Excel函数索引,它使用数字值来获取特定的单元格。 您需要将types为Excel.WorksheetFunction的对象转换为使用该函数。 但是我发现有比使用Excel函数更容易的解决scheme:

 using System.Runtime.InteropServices; using Microsoft.Office.Interop.Excel; namespace exceltest { class Program { static void Main(string[] args) { Microsoft.Office.Interop.Excel.Application xl = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook workbook = xl.Workbooks.Open(@"C:\test.xlsx"); Microsoft.Office.Interop.Excel.Worksheet sheet = workbook.Sheets[1]; xl.Visible = true; //use this if you want to use native Excel functions (such as index) Microsoft.Office.Interop.Excel.WorksheetFunction wsFunc = xl.WorksheetFunction; int maxNum = 100; // set maximum number of rows/columns to search string from = "blah"; string to = "blum"; //this is pretty slow, since it has to interact with 10,000 cells in Excel // just one example of how to access and set cell values for (int col = 1; col <= maxNum; col++) { for (int row = 1; row <= maxNum; row ++) { Range cell = (Range)sheet.Cells[row, col]; if ((string)cell.Value == from) //cast to string to avoid null reference exceptions { cell.Value = to; } } } } } 

}