Разбор и извлечение ссылок на ячейки из формул Excel? - PullRequest
0 голосов
/ 27 мая 2018

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

=SUM(P1:P4)+Q3

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

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

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

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

0 голосов
/ 27 мая 2018

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

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

enter image description here

К сожалению, этот простой подход не будет работать со всеми формулами.Его легко обмануть, используя 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

Для этого должны быть включены макросы!

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

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