Visual Studio Windows Forms C # Interop.Excel - Объект класса Excel - PullRequest
0 голосов
/ 17 февраля 2019

Я создал проект C # Windows Form в Visual Studio и пытаюсь работать с книгой Excel через interop.excel.Я создал собственный «класс Excel» и создал его объект в моем Form1.
. Я борюсь с тем, возможно ли открыть книгу Excel с помощью нажатия кнопки, т. Е. Создать объект класса изнажмите кнопку, а затем сможете использовать этот объект в других нажатий кнопки.

Ниже показаны две версии кода.Один работает, другой нет.Тот, который работает, просто открывает книгу 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 
    }

...

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Вы используете локальную переменную внутри ReadCell, которая не знает, например.

Вы можете создать переменную

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
    }
}
0 голосов
/ 17 февраля 2019

Я думаю, вы спрашиваете, можно ли повторно использовать код при нажатии другой кнопки?Если это так, будет ли у вас возможность создать функцию с необходимым кодом и просто вызывать эту функцию при каждом нажатии кнопки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...