Извлечение значений из раскрывающегося списка в Excel через VB. NET или C# - PullRequest
0 голосов
/ 03 марта 2020

Итак, у меня есть этот файл Excel, созданный другим программистом. Формулы скрыты, и большинство из них заблокированы. Я могу вводить значения только в определенные ячейки, что не проблема, потому что мне нужно только автоматизировать заполнение данных в эти разрешенные ячейки. У меня есть изображение, показанное ниже ...

Под «Номер товара» и «Лот №» столбцы Я могу вводить значения и на основе введенных значений, определенные варианты в «Счет № ссылки» стать доступным для выбора через выпадающее меню в Excel. Таблица данных, из которой выпадающий список соответствует данным, также скрыта. Мне не нужно знать таблицу. Мне просто нужно извлечь значения, которые доступны и основаны на данных из моей базы данных, он автоматически выберет значение из вариантов, если это применимо. Я могу ввести данные в «Номер товара» и «Номер лота» с помощью этого кода в VB. NET ...

Dim excel As New Microsoft.Office.Interop.Excel.Application()
Dim pvw = excel.Workbooks.Open(TextBox1.Text)
Dim wb As Microsoft.Office.Interop.Excel.Workbook = pvw
Dim ws As Microsoft.Office.Interop.Excel.Worksheet = TryCast(wb.Sheets(1), Microsoft.Office.Interop.Excel.Worksheet)

ws.Range("A9").Value = "154166"
ws.Range("C9").Value = "AUAM-601"

Я могу получить формулу ячеек в разделе «Счет-фактура №». через этот код ... Строка 9 в качестве примера

Dim formulaRange As String = ws.Range("E9").Validation.Formula1

Формула, которую я получаю для строки 9: ...

= IF ($ A9 <> "", INDIRECT (INDIRECT («Inventory! D» и MATCH (A9 и C9, Inventory! A: A, 0))))

Сейчас я застрял, пытаясь найти способ сделать доступный выбор по этой формуле. Я использую функцию Evaluate, но все еще безрезультатно. В результате я получаю значение -2146826265. Я понятия не имею, как это сделать.

На основании этой ссылки ... Как прочитать значения выпадающих или флажков Excel из c# или vb. net?

Это должен быть код для получения значений ...

Dim splitFormulaRange As String() = formulaRange.Substring(1, formulaRange.Length - 1).Split(":"c)
Dim valRange As Excel.Range = CType(ws.Range(splitFormulaRange(0), splitFormulaRange(1)), Excel.Range)

For nRows As Integer = 1 To valRange.Rows.Count
   For nCols As Integer = 1 To valRange.Columns.Count
      Dim aCell As Excel.Range = CType(valRange.Cells(nRows, nCols), Excel.Range)
        MsgBox(aCell.Value2)
   Next
Next

Я лично проверил это, и оно работает, когда указанная формула является простым диапазоном. Тем не менее, это не работает с формулой, которую я имею в моем Excel. Как я go об этом? Большое спасибо.

...