[英]How do I get and compare the contents of a cell in an Excel spreadsheet by name?
我正在尝试将一个单元格与一个字符串进行比较,如果相等则将其替换。 但是,当我尝试执行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找不到的参数,可能是因为您传递的是字符串(“ D1”),而不是两个整数参数(4,1)。
如果不看更多代码,就不可能告诉您在哪里获取rCol.ToUpper()值。 但是,如果您尝试遍历一系列列和行以检查是否等于条件(这就是您要尝试的样子),那么您将很快遇到令人讨厌的问题,即如何使用大写字母增加列值(只是尝试;没有什么乐趣!)。
我最近在VB中所做的一个解决方案是使用本机Excel函数索引,该索引使用数字值获取特定的单元格。 您需要转换类型为Excel.WorksheetFunction的对象才能使用该功能。 但是自那以后,我发现有比使用Excel函数更简单的解决方案:
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;
}
}
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.