Как перебирать листы Excel в C#? - PullRequest
0 голосов
/ 08 января 2020

У меня есть рабочая книга с несколькими листами, и я пытался перебрать их, но это вызывает у меня проблемы. Код ниже выдает ошибку:

Microsoft.Office.Tools.Excel.Worksheet '. Эта операция завершилась неудачно, поскольку вызов QueryInterface для компонента COM для интерфейса с IID '{297DC8D9-EABD-45A1-BDEF-68AB67E5C3C3}' завершился ошибкой из-за следующей ошибки: такой интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)) .

, но я не совсем понимаю, что это вообще значит.

Ошибка возникает при попытке присвоить переменной листа первый лист в моей переменной листов, который является просто рабочей книгой.

public List<Worksheet> GetAllDatasheets()
    {
        var datasheets = new List<Worksheet>();
        var sheets = _book;
        foreach (Worksheet sheet in sheets.Worksheets)
        {
            if (sheet.Name.StartsWith("$"))
                datasheets.Add(sheet);
        }
        return datasheets;
    }

РЕДАКТИРОВАТЬ: Вот мой полный код:

using Workbook = Microsoft.Office.Tools.Excel.Workbook;
using Worksheet = Microsoft.Office.Tools.Excel.Worksheet;

private Workbook _book;

    public ExcelObjectDAL()
    {
        _book = Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveWorkbook);
    }

public List<Worksheet> GetAllDatasheets()
    {
        var datasheets = new List<Worksheet>();
        var sheets = _book;
        foreach (var sheet in sheets.Worksheets)
        {
            var actualSheet = (Worksheet) sheet;
            if (actualSheet.Name.StartsWith("$"))
                datasheets.Add(actualSheet);
        }
        return datasheets;
    }

1 Ответ

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

Я думаю, это то, что вы ищете:

 public List<string> GetAllDatasheets()
        {
            Excel.Application excelApp = new Excel.Application();
            Excel.Workbook workBook = excelApp.Workbooks.Open(filePath);

            var datasheets = new List<string>();
            foreach (Excel.Worksheet sheet in workBook.Worksheets)
            {
                if (sheet.Name.StartsWith("$"))
                    datasheets.Add(sheet.Name);
            }

            excelApp.Quit();
            return datasheets;
        }

Если у вас есть имя рабочего листа, которое вы знаете достаточно, вам не нужно составлять список с типом Рабочий лист

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