Разбор и извлечение ссылок на ячейки из формул Excel?

Я ищу, чтобы разобрать и извлечь ссылки на ячейки из формул Excel. Допустим, у меня есть следующая формула внутри клетки P5:

=SUM(P1:P4)+Q3

Я ищу вывод расположения ячеек, участвующих в формуле для получения ответа, т.е. P1, P2, P3, P4, Q3 как вывод (их местоположение / представление в некоторой другой форме также приемлемо).

Мой вопрос заключается в том, есть ли такой парсер для этого, а если нет, то какую технику я должен использовать. Возможно, формула, которую я перечислил в качестве примера, довольно проста, в идеале я хотел бы охватить все потенциальные формулы, возможно, даже те, которые имеют ссылку на другие листы и рабочие книги. Я ожидал и действительно надеялся на решение на основе VSTO C#, но мне очень трудно найти одну или даже соответствующую функцию в библиотеке VSTO.

2 ответа

Полное решение для поиска прецедентов по формуле является сложной задачей: даже инструмент прецедентов Excel не справляется с этой задачей. Для начала, используя C#, попробуйте https://github.com/spreadsheetlab/XLParser

Для простых формул:

Sub PrettyPoorParser()
    Dim r As Range, rr As Range
    With Range("D4")
        Set r = .DirectPrecedents
        msg = r.Count
        For Each rr In r
            msg = msg & vbCrLf & rr.Address(0, 0)
        Next rr
    End With

    MsgBox msg
End Sub

введите описание изображения здесь

К сожалению, этот простой подход не будет работать со всеми формулами. Его легко одурачить, используя INDIRECT() и ссылки вне листа.

EDIT # 1:

Вместо того, чтобы использовать парсер рекурсивного спуска, он использует свойство объекта Range. Это свойство довольно хорошее, но не всеобъемлющее. Что касается запуска этого кода в среде VBA-EXCEL:

Макросы очень просты в установке и использовании:

  1. ALT-F11 открывает окно VBE
  2. ALT-I ALT-M открывает новый модуль
  3. вставьте материал и закройте окно VBE

Если вы сохраните книгу, макрос будет сохранен вместе с ней. Если вы используете версию Excel более поздней, чем в 2003 году, вы должны сохранить файл как.xlsm, а не.xlsx

Чтобы удалить макрос:

  1. откройте окно VBE, как указано выше
  2. очистить код
  3. закройте окно VBE

Чтобы использовать макрос из Excel:

  1. ALT-F8
  2. Выберите макрос
  3. Нажмите RUN

Чтобы узнать больше о макросах в целом, смотрите:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

а также

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

Макросы должны быть включены, чтобы это работало!

Несколько лет назад я начал работать над реальным парсером (в качестве инструмента отладки), но получил это задание.

Другие вопросы по тегам