Не удается перебрать коллекцию листов Excel в C# - PullRequest
0 голосов
/ 08 января 2020

Невозможно перебрать коллекцию листов Excel в C#, рабочий лист из коллекции листов каждый раз как-то один и тот же лист (первый из листов).

wsheets.Count == 3

        private void frmExcel_Data_Load(object sender, EventArgs e)
        {
            //gridviews references
            DataGridView dataGridView1 = dataGrid_Excel;
            DataGridView dataGridView2 = dataGrid_Excel2;
            DataGridView dataGridView3 = dataGrid_Excel3;

            List<DataGridView> dataGridViews = new List<DataGridView>() { dataGridView1, dataGridView2, dataGridView3 };

            foreach(DataGridView dataGridView in dataGridViews)
            {
                SheetToGridView(dataGridView);
            }
        }


        private void SheetToGridView(DataGridView dataGridView)
        {
            try
            {
                //Problem
                Sheets wsheets = Globals.ThisAddIn.Application.Sheets;
                //read_Excel_File_into_DataGridView(wsheets[2], dataGridView);// Second worksheet is retrieved
                for (int i = 1; i < Globals.ThisAddIn.Application.Sheets.Count; i++)
                {
                    read_Excel_File_into_DataGridView(Globals.ThisAddIn.Application.Sheets[i], dataGridView);//Same wsheet everytime (the first one from collection)
                }
                //foreach (Worksheet wsheet in wsheets)
                //{
                //    read_Excel_File_into_DataGridView(wsheet, dataGridView);//Same wsheet everytime (the first one from collection)
                //}
            }
            catch (Exception) { }
        }

1 Ответ

0 голосов
/ 10 января 2020

Я размышляю, потому что я только что попробовал это на обычном проекте взаимодействия, но если вы получаете доступ к Sheets из рабочей книги вместо объекта приложения, похоже, это работает нормально. В качестве теста я запустил его, чтобы убедиться, что имя менялось, чтобы каждый раз иметь правильный объект листа.

Этот может не быть вашей проблемой. Я упомянул в своем комментарии, что ваш read_Excel_File_into_DataGridView метод может принимать, но игнорировать параметр рабочей таблицы, которую вы передаете.

Однако попробуйте это и посмотрите, будет ли лучше.

Microsoft.Office.Interop.Excel.Application excel = 
    (Microsoft.Office.Interop.Excel.Application)Marshal.GetActiveObject("Excel.Application");
Workbook wb = (Workbook)excel.ActiveWorkbook;

for (int i = 1; i < wb.Worksheets.Count; i++)
{
    MessageBox.Show(wb.Worksheets[i].Name);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...