繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM