Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Экспорт из ячейки Excel в TextBox 
:(
    Опции темы
Arkadijnich
Дата 20.2.2014, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 15.8.2013

Репутация: нет
Всего: нет



Доброго Всем дня!
В ячейку Excel А1 поступают данные в режиме On-line по DDE. Не получается подключиться к данной ячейке из формы, чтобы данные отображались в TextBox1.  Событие   WorkSheet_Change не работает в этом случае. Надо как –то по другому. Кто сталкивался с данным вопросом подскажите.
С Уважением. Спасибо.

PM MAIL   Вверх
Akina
Дата 20.2.2014, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Цитата(Arkadijnich @  20.2.2014,  17:19 Найти цитируемый пост)
Событие   WorkSheet_Change не работает в этом случае

Опрашивай по таймеру, скажем, раз в секунду. Одна ячейка - много ресурсов не съест...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Arkadijnich
Дата 21.2.2014, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 15.8.2013

Репутация: нет
Всего: нет



Код пишу в VS2010 на VB.Net. Связь с Excel установлена. Знающие рекомендуют идти методами Calculate() или SetLinkOnData. Я их не знаю. Подскажите кто в курсе.
С Уважением. Спасибо.  
PM MAIL   Вверх
Akina
Дата 21.2.2014, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454





--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Arkadijnich
Дата 21.2.2014, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 15.8.2013

Репутация: нет
Всего: нет



Akina, Спасибо!
Начинаю погружение.
PM MAIL   Вверх
Arkadijnich
Дата 21.2.2014, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 15.8.2013

Репутация: нет
Всего: нет



Вот так мои пробелы виднее.

Код

Imports Microsoft.Office.Interop

Public Class Form1
    Private WithEvents xlApp As Excel.Application
    Private WithEvents xlSheet1 As Excel.Worksheet

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        xlApp = New Excel.Application
        xlApp.Visible = True

        ' А дальше у меня беда

        AddHandler xlSheet1.Calculate, New Excel.??????????????????????????? (AddressOf xlSheet1_Calculate)

    End Sub

    Private Sub xlSheet1_Calculate()
        Invoke(Sub()

    ????????????????????????????????????????????????????????????
       TextBox1.Text = xlSheet1.Cells ( 1 , 1). Value
    .............................................................
            End Sub)
    End Sub

End Class


PM MAIL   Вверх
diadiavova
Дата 22.2.2014, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(Arkadijnich @  21.2.2014,  13:18 Найти цитируемый пост)
AddHandler xlSheet1.Calculate, New Excel.??????????????????????????? (AddressOf xlSheet1_Calculate)

Что это? smile 
Вот код, на основе твоего, у меня работает
Код

Imports Microsoft.Office.Interop
Public Class Form1
    Private WithEvents xlApp As Excel.Application
    Private WithEvents xlSheet1 As Excel.Worksheet

    Private Sub xlSheet1_Calculate() Handles xlSheet1.Calculate
        Invoke(Sub()
                   TextBox1.Text = xlSheet1.Cells(1, 1).Value
               End Sub)
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        xlApp = New Excel.Application

        xlApp.Visible = True
        Dim b = xlApp.Workbooks.Add()
        xlSheet1 = b.Worksheets.Add
    End Sub
End Class


Не думаю, что обработка этого события решит проблему, описанную в топикстарте, но тем не менее smile  


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Arkadijnich
Дата 23.2.2014, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 15.8.2013

Репутация: нет
Всего: нет



Diadiavova, у меня данный код работать не хочет, что-то на то.
PM MAIL   Вверх
diadiavova
Дата 23.2.2014, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(Arkadijnich @  23.2.2014,  21:38 Найти цитируемый пост)
Diadiavova, у меня данный код работать не хочет, что-то на то. 

А как ты его пытаешься заставить работать? Я, например, ввел в A1 некий текст, а потом, для того, чтобы инициировать событие Calculate в другую ячейку ввел формулу( например =2*2) и нажала энтер. Произошло данное событие и в текстбоксе формы отобразился текст из указанной ячейки. Вряд ли тебе это поможет, но я об этом и написал. Попробуй советом Акины воспользоваться или уточни, что именно тебе советовали. Тут вся проблема в том, что во время редактирования ячейки события не возникают, скорей всего в это время и ее значение остается прежним. Меняется значение тогда, когда с нее переводится фокус. Можно попробовать по таймеру вызывать метод Calculate, чтобы инициировать одноименное событие(не знаю сработает или нет), тогда этим кодом можно будет воспользоваться.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Arkadijnich
Дата 24.2.2014, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 15.8.2013

Репутация: нет
Всего: нет



Diadiavova, Ваш код работает как положено!
Выход подсказали следующий: в любую ячейку вводим формулу =Сегодня() и все работает.
Но появилась задержка. Поясню:
    Данные в ячейку А1 поступают в режиме On-Line  по DDE. Поток отображается и в А1 и в TextBox1, но разница между А1 и  TextBox1 в одну строку. Допустим данные идут в колонку С. В момент времени t в С1=10, С2= 15 ....... С23= 17,С24= 55. Так вот А1 = 55, а TextBox1 = 23, некое отстование. Надо разбираться.
С Уважением. Огромное спасибо за помощь! 
PM MAIL   Вверх
diadiavova
Дата 24.2.2014, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(Arkadijnich @  24.2.2014,  19:33 Найти цитируемый пост)
 Поток отображается и в А1 и в TextBox1, но разница между А1 и  TextBox1 в одну строку.

Я не могу знать как устроена таблица экселя, но принцип работы подобных элементов управления мне знаком по датагридам. Когда сущствует много разных ячеек и при этом ячейки эти можно редактировать как текстбоксы, создается впечатление, что это и есть текстбоксы. В какой-то степени это так и есть, но только в момент редактирования. Обычно ячейка это просто небольшая область контрола, контролируемая неким объектом, который содержит всю информацию о ячейке и выполняет ее прорисовку. Но вот когда ячейка переходит в режим редактирования, то на ее место становится реальный текстбокс, который в ином случае находится либо на месте другой ячейки, либо вообще невидим. В него передаются данные ячейки и в момент редактирования пользователь взаимодействует именно с ним, а вот ячейке данные передаются только тогда, когда она выходит из режима редактирования и текстбокс либо перемещается на другую ячейку, либо становится невидимым. Именно в это время и происходит событие ченджь и все остальное. Таким образом для того, чтобы отслеживать изменения в режиме реального времени, надо иметь доступ не к ячейке, а к этому самому эдитконтролу(текстбоксу например). В датагриде есть способ получить к нему доступ и подписаться на его события, а вот модель автоматизации экселя вряд ли его предоставляет, так что я вообще не думаю, что есть возможность снимать данные прямо во время редактирования.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Arkadijnich
Дата 24.2.2014, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 15.8.2013

Репутация: нет
Всего: нет



Diadiavova, еще раз большое спасибо за содействие!
И, из любопытства, а как работает метод SetLinkOnData?
С Уважением. Спасибо.
PM MAIL   Вверх
diadiavova
Дата 24.2.2014, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(Arkadijnich @  24.2.2014,  21:31 Найти цитируемый пост)
а как работает метод SetLinkOnData?

Не, тут я - пас smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0612 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.