Извлечение формул Excel из ячеек с использованием vb.net в качестве строк - PullRequest
1 голос
/ 06 февраля 2011

Как трудно это может быть ... или я так думал.Я пытаюсь извлечь значения, цвета, комментарии и любые формулы для диапазона ячеек в данном рабочем листе.Конечная цель - преобразовать электронную таблицу, которую кто-то использовал в качестве базы данных, в таблицы Access.

worksheet.Cells(row,column).Value 'extract value WORKS
worksheet.Cells(row,column).Font.ColorIndex' extract color index WORKS
worksheet.Cells(row,column).Comment.Text 'extractcomment РАБОТАЕТ
worksheet.Cells(row,column).Formula 'формула извлечения НЕ РАБОТАЕТ

Возвращаемое значение для .Formula такое же, как .Value.Это не то, что мне нужно.Я ищу текстовое представление формулы (для извлечения информации о скорости, встроенной в формулу).

1 Ответ

0 голосов
/ 07 февраля 2011

Спасибо Дэвиду за тестирование кода в VBA. Я должен был сделать это, прежде чем отправлять вопрос.

Обновление: я тестировал код, используя VBA. Оно работает. Поэтому я вернулся к своему коду VB.Net и нашел проблему. Я думаю, что есть ошибка в свойствах VB.Net и вот почему.

У меня есть класс ExcelSheet, который содержит ссылку на Excel.Worksheet. Он реализует индексатор [row, colum], который возвращает другой класс ExcelRange, который содержит ссылку на Excel.Range. Ошибка, которую я заметил, заключается в том, что 1-й MsgBox отображает формулы в виде их строкового представления, а 2-й MsgBox отображает оцененные данные. Моим быстрым решением было зафиксировать формулу в конструкторе.

Private myCell As Excel.Range  
Private myFormula As String  

Friend Sub New(ByRef cell As Excel.Range)  
myCell = cell  
MsgBox(myCell.Formula,,"Constructor") 'Displays formula as string  
myFormula = myCell.Formula 'Saving formula as string  
End Sub

Public ReadOnly Property Formula() As String  
  Get  
    MsgBox(myCell.Formula,,"Property") 'Displays evaluated data  
    Return myFormula 'Return formula saved as string in constructor  
  End Get  
End Property

Это решило мою проблему, но мне любопытно, почему VB.Net ведет себя так.

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