我正在尝试将一个单元格与一个字符串进行比较,以便在它相等时替换它。但是当我尝试执行下面的代码时,会发生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);
我该怎么做?
答案 0 :(得分:1)
如果你知道要检查的单元格,例如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;
}
}
}
答案 1 :(得分:0)
尝试这样做以获得一个简单的范围:
int row = 1;
string col = "D";
string text = sheet.get_Range(col + row.ToString()).Value;
0x800A03EC错误是Excel返回的值,表示NAME_NOT_FOUND(请参阅this SA question)。看起来你传递了一个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;
}
}
}
}
}
}