65.9K
CodeProject 正在变化。 阅读更多。
Home

一个方便的类,用于访问 Excel 工作表单元格

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.71/5 (10投票s)

2010年11月23日

CPOL

1分钟阅读

viewsIcon

34408

downloadIcon

365

该类接受对 Excel.Worksheet 的引用,并允许您使用重载的下标运算符以清晰直观的方式读取/写入 Excel 单元格的 Value2,并获取给定单元格对应的 Excel.Range。

引言

有时,在使用 Excel.Interop 类时,您可能想从代码中打开一个工作表并调整各种单元格的值。 记住语法很难。

oSheet = (Excel.Worksheet)oBook.Worksheets[1];
((Excel.Range)oSheet.Cells[1, 1]).Value2 = "blah";

我不知道您是否同意,但我可能希望将我正在使用的 Excel.Worksheet 对象封装在一个漂亮的类中,也许带有重载的运算符 [],这样我就不必整天记住复杂的语法,或者查找代码片段并复制粘贴。 我认为这样的代码形式

cellObj[1, 1]="blah";
int myCellValue = Convert.ToInt32(cellObj[1,2]);

可能更具可读性。 那么,让我们看看是否可以创建一个类来帮助我们实现这一点。

ExcelCell 类

首先,让我们直接进入核心部分。 这是我们类的定义,ExcelCell,它封装了 Excel 中的 Excel.Worksheet 对象,并允许访问单个单元格。

using Office = Microsoft.Office.Core;
using Excel = Microsoft.Office.Interop.Excel;
 
public class ExcelCell : Object
{
    private Excel.Worksheet oSheet;
 
    public ExcelCell(Excel.Worksheet oSheet)
    {
        this.oSheet = oSheet;
    }
 
    public object this[int row, int column]
    {
        get
        {
            if (oSheet == null)
                throw new InvalidOperationException(
                "Excel.Worksheet reference is null.");
            return ((Excel.Range)oSheet.Cells[row, column]).Value2;
        }
        set
        {
            if (oSheet == null)
            throw new InvalidOperationException(
                "Excel.Worksheet reference is null.");
            ((Excel.Range)oSheet.Cells[row, column]).Value2 = value;
        }
    }
 
    public Excel.Range GetRange(int row, int column)
    {
        if (oSheet == null)
            throw new InvalidOperationException(
        "Excel.Worksheet reference is null.");
        return ((Excel.Range)oSheet.Cells[row, column]);
    }
}

注意:您应该确保在项目中将 Microsoft.Office.CoreMicrosoft.Office.Interop.Excel 模块加载为引用。 它们可以是版本 12 及更高版本。

使用该类

要使用该类,假设您有一个打开的 Excel.Application 实例和一个打开的 Excel.Workbook 实例(以 .xls.xlsx 等格式),并且您的实例分别命名为 oExceloBook。 让我们看看这个类是如何工作的

ExcelCell cell = new ExcelCell((Excel.Worksheet)oBook.Worksheets[1]);
 
cell[4, 2] = "happy";
cell[4, 4] = "day"; // sets Value2

int cellValue = Convert.ToInt32(cell[4,5]);
// reading a cell -- very straightforward.

就这样,完成了!

关注点

这个类的有趣之处在于它展示了如何重载 [,] 运算符。 快速的 Google 搜索也可以找到相关信息,但请注意,在将此类放入程序后,您的 Excel 编程将变得多么简化。

历史

  • 2010 年 11 月 23 日:提交文章。
© . All rights reserved.