Visual Studio Windows Forms C# Interop.Excel - Excel Class 对象

Visual Studio Windows Forms C# Interop.Excel - Excel Class Object

我在 Visual Studio 中创建了一个 C# Windows Form 项目,我正尝试通过 interop.excel 使用 Excel 工作簿。我创建了一个自定义 "excel class" 并在我的 Form1.
中创建了一个对象 我正在努力解决的是是否可以通过按下按钮打开 excel 工作簿,即通过按下按钮创建 class 对象,然后能够在其他按钮按下时使用该对象.

下面显示了两个版本的代码。一个有效,一个无效。当程序启动时,工作的只是打开 Excel 工作簿。另一个尝试在程序启动后使用窗体上的按钮按下来打开工作簿。在不起作用的代码中,对象 does not exist in the current context.
非常感谢任何有关如何使按钮按下代码工作的帮助!

此代码有效:

namespace XLtest1
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    ExcelClass ex  = new ExcelClass(@"C:\path\TestBook.xlsx", 1);

    private void ReadCell_Click(object sender, EventArgs e)
    {
        ex.ReadCell();
    }

...

此代码不:

namespace XLtest1
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public void OpenFile()
    {
        ExcelClass ex  = new ExcelClass(@"C:\path\TestBook.xlsx", 1);
    }

    private void OpenWorkbook_Click(object sender, EventArgs e)
    {
      OpenFile();
    }

    private void ReadCell_Click(object sender, EventArgs e)
    {
        ex.ReadCell(); // "ex" does not exist in the current context 
    }

...

我想你问的是能够在另一个按钮按下时重用代码吗?如果是这样,您是否可以选择使用所需代码创建一个函数并在每次按下按钮时调用该函数?

您在 ReadCell 中使用了一个不了解 ex 的局部变量。

您可以创建一个变量

public partial class Form1 : Form
{
public Form1()
{
    InitializeComponent();
}
private ExcelClass ex = null; //create your member field here

public void OpenFile()
{
    ex = new ExcelClass(@"C:\path\TestBook.xlsx", 1);
}

private void OpenWorkbook_Click(object sender, EventArgs e)
{
  OpenFile();
}

private void ReadCell_Click(object sender, EventArgs e)
{
    if (ex!= null) {
        ex.ReadCell();
    } else {
        //do nothing, or inform user they have to press other button to open the file
    }
}