Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Equation в Word и таблица в Access


Автор: Loiste 29.9.2005, 11:54
Есть такая задача..

Имеется файл Word с вопросами и вариантами ответов по математике. В файле есть не только текст, но и формулы - объекты Equation.

Возможно ли связать формулы, находящиеся в вордовском документе с ячейками таблицы в Access? Чтобы не заполнять формулами базу данных, иначе ее размер будет слишком большой.

Данная связь нужна для того, чтобы потом в форме Access подставлять эти формулы в вопросы и ответы.


Автор: Akina 29.9.2005, 12:41
Цитата(Loiste @ 29.9.2005, 12:54)
Возможно ли связать формулы, находящиеся в вордовском документе с ячейками таблицы в Access?

Конечно нет. Файл Ворда не может быть источником данных связанной таблицы.

Цитата(Loiste @ 29.9.2005, 12:54)
потом в форме Access подставлять эти формулы в вопросы и ответы.

Ты можешь хранить объекты MS Eq в полях Аксессовой БД (тогда БД действительно будет пухлая) или выдергивать их из прилагаемого Вордового документа программно непосресдтвенно при загрузке БД или при выводе на экран формы.

Но я бы пошел по пути разделенных БД, в т.ч. отдельная БД для хранения формул. Это минимизирует накладные расходы и убережет от глюков с возможными изменениями в файле с формулами.

Автор: Loiste 29.9.2005, 13:45
Есть еще один запасной вариант.

Есть идея сделать отдельно для каждого вопроса и ответа свой файл Word с текстом, формулами и т.д (один вопрос - один файл). и связывать его с базой данных Access через поле OLE.

Тогда файлы с вопросами и ответами можно было бы хранить в отдельных папках и при необходимости подставлять их в форму работы с вопросами и тестами.

Только желательно, чтобы в таблице Access хранились ссылки (то есть отдельная ячейка ссылается на отдельный документ), а не сами файлы. Так, чтобы при изменении файла в Word изменения отражались и в формах отображения в Access.

Хотелось бы узнать Ваше мнение как специалиста об этом варианте. smile

Столько мороки с этими заданиями по математике.

Автор: Akina 29.9.2005, 15:30
Loiste
А может взять готовую систему создания "угадаек"? а?

Цитата(Loiste @ 29.9.2005, 14:45)
желательно, чтобы в таблице Access хранились ссылки

ну и храни путь к файлу - в поле типа стринг. и программно выдергивай файл на всеобщее обозрение.
еще рекомендация - упрости себе жизнь и храни Вордовые документы в RTF.

Автор: Loiste 30.9.2005, 13:02
Цитата
А может взять готовую систему создания "угадаек"? а?


Готовую не получится. Надо разрабатывать свою. Вузовскую. smile

Цитата

еще рекомендация - упрости себе жизнь и храни Вордовые документы в RTF.


Это упростит обращение к файлу? Прошу прощения, если мои вопросы кажутся ламерскими. Просто мне раньше не приходилось работать с объектами Microsoft.

В идеале было пожелание хранить и вопросы и ответы в одном файле Word (так как они уже набраны по всем предметам по одному образцу). Эти документы как-то подключать к базе и программе и выдергивать оттуда вопросы и ответы.

Автор: Akina 30.9.2005, 13:36
Цитата(Loiste @ 30.9.2005, 14:02)
Это упростит обращение к файлу?

Нет, это упростит их вывод. Вместо OLE-контейнеров можно будет использовать RichTextBox.
Добавлено @ 13:37
Цитата(Loiste @ 30.9.2005, 14:02)
Эти документы как-то подключать к базе и программе и выдергивать оттуда вопросы и ответы.

МожнО, конечно... но это неправильно. Нет идеологии. Нельзя плясать от того что есть, надо сразу делать по уму.

Автор: Loiste 30.9.2005, 14:33
Цитата(Akina @ 30.9.2005, 13:36)
МожнО, конечно... но это неправильно. Нет идеологии. Нельзя плясать от того что есть, надо сразу делать по уму.

А что бы вы посоветовали? Просто, если хранить такое количество формул в базе ее размер станет чрезвычайно большим.

К тому же, если делать все с чистого листа, то вбивать все эти данные придется мне, а это несколько десятков документов smile

Автор: Akina 30.9.2005, 14:51
Цитата(Loiste @ 30.9.2005, 15:33)
А что бы вы посоветовали? Просто, если хранить такое количество формул в базе ее размер станет чрезвычайно большим.

1) Я уже предлагал борьбу с размером - путем отделения данных от интерфейса, вынесением формул в отдельную БД.
2) Забудьте вообще о том что что-то в Ворде есть - представьте что нет НИЧЕГО. И именно с этого положения начинайте. Разработайте систему хранения и вывода формул, удобную именно вам.
3) Создайте отдельно средства для проведения тестирования и средства для ввода/корректировки вопросов и вариантов ответов. Тогда эти данные придется вбивать тому кто за это отвечает.
4) Крайний случай - хранить формулы в виде рисунков (захват с экрана из Ворда).

Вообще, если несложно - выкуси из какого-нить задания в формате Ворда пару номерочков и приаттачь сюда - посмотреть о чем собсно речь-то идет.

Автор: likhobory 1.10.2005, 01:11
Цитата(Akina @ 30.9.2005, 15:51)
Крайний случай - хранить формулы в виде рисунков

как вариант: сохраняем формулы документа средствами VBA в EMF-формате и кидаем в БД

Автор: Loiste 3.10.2005, 09:35
Цитата(Akina @ 30.9.2005, 14:51)
Вообще, если несложно - выкуси из какого-нить задания в формате Ворда пару номерочков и приаттачь сюда - посмотреть о чем собсно речь-то идет.

Хорошо. Сегодня постараюсь приаттачить. Но, может, тогда просто вордовский файл приаттачить? Не весь конечно, я оставлю только отдно задание.


А пока. Не подскажите примерчик как из Access прочитать *.doc с помощью word.paragraphs ?
Что-то не могу найти такой..

Автор: likhobory 3.10.2005, 13:07
Цитата(Loiste @ 3.10.2005, 10:35)
Что-то не могу найти такой..
используй поиск по форуму
http://forum.vingrad.ru/index.php?showtopic=63299&hl=paragraphs


Автор: Akina 3.10.2005, 13:56
Цитата(Loiste @ 3.10.2005, 10:35)
может, тогда просто вордовский файл приаттачить? Не весь конечно, я оставлю только отдно задание

а я что-то другое сказал? smile

Автор: Loiste 3.10.2005, 14:53
Цитата(Akina @ 3.10.2005, 13:56)
а я что-то другое сказал? smile

Хм..похоже, сегодня не получится..

Спасибо за терпение smile

Автор: Akina 3.10.2005, 15:32
Цитата(Loiste @ 3.10.2005, 15:53)
похоже, сегодня не получится..

ничего, мы до завтра подождем. smile

Автор: Loiste 4.10.2005, 09:54
Всем доброго дня smile

А как по вордовскому документу осуществить поиск слова?

Так правильно будет?:


Код

WordApp.Selection.Find.Text = "текст"


И как прочитать следующий абзац, после того, в котором находится это слово?
Или, перебирая параграфы, проверять условием?

Только больно не бейте. Я не волшебник - я только учусь))

Автор: likhobory 4.10.2005, 10:38
Цитата(Loiste @ 4.10.2005, 10:54)
Так правильно будет?

поскольку используешь Selection , то поиск будет идти только в выденном диапазоне,если нужен поиск в опред диапазоне - используй Range или Content - для поиска по всему доку.
Цитата(Loiste @ 4.10.2005, 10:54)
прочитать следующий абзац

Код
NextParText = Selection.Next(Unit:=wdParagraph, Count:=1).Text

Автор: Loiste 4.10.2005, 12:48
Цитата(likhobory @ 4.10.2005, 10:38)
Content - для поиска по всему доку.

При:

Код

Dim WordApp As Word.Application 
Dim DocWord As Word.Document

Так?:

Код

DocWord.Content.Find.Text = "текст"

Добавлено @ 12:54
Цитата(likhobory @ 4.10.2005, 10:38)
Код
NextParText = Selection.Next(Unit:=wdParagraph, Count:=1).Text

Какого типа должен быть NextParText?
Строка не подходит, параграф тоже.

Автор: likhobory 4.10.2005, 14:30
именно строка, проверяй, где-нть нахимичил

Автор: Loiste 4.10.2005, 14:31
Я уже замучала вопросами smile Но..

Как вставить данные из буфера обмена (скопированные из Word) в ячейку таблицы Access (поле OLE)?

Автор: Loiste 4.10.2005, 14:43
Цитата(likhobory @ 4.10.2005, 14:30)
именно строка, проверяй, где-нть нахимичил

Подставила строку. Работает smile

Но..почему-то через раз о_О
Один раз запускаю все работает.
Запускаю второй раз на этой строке выдает ошибку:

Remote server machine does not exist or is unavailable

Еще раз запускаю, снова работает. И так все время..

Автор: likhobory 4.10.2005, 15:17
проверь, не создаешь ли несколько word-объектов, а лучше код выложи
Цитата(Loiste @ 4.10.2005, 15:31)
Как вставить данные из буфера обмена

что именно копируешь??

Автор: Loiste 4.10.2005, 15:28
Цитата(likhobory @ 4.10.2005, 15:17)
что именно копируешь??

обзац с текстом и формулой Equation

Автор: likhobory 4.10.2005, 16:35
покажи док. с формулами.
уже обсуждалось - если не хочешь раздувать БД - храни в ней только ссылки на файлы с формулами

какая версия офиса ??

Автор: Loiste 5.10.2005, 09:12
Я сейчас хочу по другому сделать.
Я из этого файла читаю данные и создаю отдельные вордовские файлы для вопросов и ответов. Это у меня уже получилось smile

Хочу связать программно каждый такой файл с ячейкой Access (поле OLE). А это пока не знаю как организовать. Не подскажите?

И у меня еще вопросик. Как программно очистить буфер обмена в ворде перед его закрытием. А то у меня ворд закрывается, а буфер не очищается.

Вот примерный файлик. Я сейчас с ним экспериментирую smile

Автор: Loiste 5.10.2005, 09:37
Код

Private Sub Knopka0_Click()

   Dim Zadanie, indexV, indexO As Integer
   Dim WordApp As Word.Application
   Dim DocWord, WordDocCreate As Word.Document
   Dim par As Paragraph
   Dim str As String
      
   Set WordApp = New Word.Application
   WordApp.Visible = True
   Set DocWord = WordApp.Documents.Open("D:\...\Novii.doc")
   DocWord.Activate
   indexV = 0
   
   For Each par In DocWord.Paragraphs
      str = par.Range.Text
      
      If str Like "*Zadanie*" Then
        Vopros = 1
      
      Else
        par.Range.Copy
        If Vopros = 0 Then
           Set DocWordCreate = WordApp.Documents.Open("D:\...\Pustoi.doc")
           indexO = indexO + 1
           DocWordCreate.Activate
           Selection.Paste
           DocWordCreate.SaveAs "D:\...\Otveti\" & indexV & "_" & indexO & ".doc"
           DocWord.Activate
           DocWordCreate.Close True
           Set DocWordCreate = Nothing
          
         Else
           Set DocWordCreate = WordApp.Documents.Open("D:\...\Pustoi.doc")
           indexV = indexV + 1
           indexO = 0
           DocWordCreate.Activate
           Selection.Paste
           DocWordCreate.SaveAs "D:\...\Voprosi\" & indexV & ".doc"
           DocWord.Activate
           DocWordCreate.Close True
           Set DocWordCreate = Nothing
           Vopros = 0
        End If
      
    End If
  DocWord.Activate
  Next
  
  DocWord.Close True
  WordApp.Quit True
  Set DocWord = Nothing
  Set WordApp = Nothing
  
  
End Sub


Вот мой код.
В коде русские слова пришлось написать латинскими буквами.
Смысл такой.
Открывается документ "Новый" и читаются его параграфы.
Соответственно вопросы и ответы отправляются в разные файлы ворда, сохраняются и закрываются. Для каждого вопроса создается отдельный файл и для каждого ответа также создается отдельный файл.
При этом копирование и вставка информации происходит через буфер обмена.

Но код выполняется через раз. Один раз выполняется. В другой выдает ошибку:

Remote server machine does not exist or is unavailable

и запускает отладчик ставя курсор на строку

38: Selection.Paste

Автор: Akina 5.10.2005, 10:38
Модератор: на время решения проблемы, озвученной в предыдущем постинге, тема переносится в соотв. раздел.

Автор: Loiste 5.10.2005, 12:45
Так..Я организовала все так, что в ячейки соответствующих таблиц заносятся пути к соответствующим файлам

так:

Код

rcdVoprosi!Vopros = "D:\...\Voprosi\" & indexV & ".doc"

и так:

Код

rcdOtveti!Otvet = "D:\...\Otveti\" & indexV & "_" & indexO & ".doc"


На форме разместила элемент "Присоединенная рамка объекта" и связываю его с документами Ворд через ссылки в поле таблицы.

Как организовать все так, чтобы при нажатии кнопки эта связь менялась на ссылку из следующей ячейки таблицы и в Присоединенной рамке был виден соответствующий ей объект?

Если я объявляю все переменные и открываю таблицу в процедуре нажатия кнопки, то выходит, что таблица каждый раз открывается заново.
Если открываю ее в General, в процедуре нажатия кнопки он не видит открытый объект таблицы и ругается.

Автор: likhobory 5.10.2005, 16:37
еще раз: какая версия офиса ??

Автор: Akina 5.10.2005, 16:49
Модератор: Сколько можно мешать вопросы в кучу??? Придерживайтесь правила: один топик = один вопрос.

Автор: Loiste 6.10.2005, 07:40
Цитата(likhobory @ 5.10.2005, 16:37)
еще раз: какая версия офиса ??

Сорри, забыла указать. Office 2000

Модератор: Сколько можно мешать вопросы в кучу??? Придерживайтесь правила: один топик = один вопрос.
Прошу прощения.
Буду исправляться smile

Автор: likhobory 7.10.2005, 09:36
баловаться с ole конечно интересно, но в данном случае есть ряд отрицательных моментов:
1. получаешь кучу мелких word-доков, причем размер каждного будет от 20 kb, вне зависимости от контента
2. придется повозиться с корректным отображением всего этого хозяйства в БД

ИМХО всю текстовую инфу из дока сохраняй в соотв. полях БД, а формулы сохраняй в графическом формате (опять же советую EMF) и при работе с базой просто подставляй новый путь к Picture - и проще и ресурсы сэкономишь

Автор: Loiste 7.10.2005, 10:15
Я бы так и сделала, но есть одно НО smile

Выше был прикреплен лишь примерный макет. В настоящих вопросах и ответах в каждом ответе или вопросе может быть от 1 до нескольких формул, рисунков, графов. А может не быть вообще. И, когда они есть, они обычно располагаются в тексте где угодно. Как же тогда организовать просмотр всего этого дела, если хранить текст отдельно от всех графических компонентов? У меня была такая мысль вначале.Но очень быстро прошла smile

Так что пока я остановилась на таком варианте:

Исходный вородовский файл я программно разбиваю на маленькие файлики и записываю пути к ним в поля соответствующих таблиц (Вопросы, Ответы) для дальнейшего обращения к ним.

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

Автор: likhobory 7.10.2005, 10:35
Цитата(Loiste @ 7.10.2005, 11:15)
У меня была такая мысль вначале.Но очень быстро прошла

напрасно, сколько бы рисунков не было, наверняка их кол-во ограничено опред. числом, так что вполне можешь их раместить на форме и при необходимости ссылаться на них из текста

Автор: Loiste 7.10.2005, 12:52
это все придется делать мне. делать рисунки из всех объектов, прописывать ссылки на них в тексте. я же говорю. мне принесли готовые документы и никто не будет набирать все эти задания еще раз, сколько бы я не просила. а мне лишней работой заниматься тоже не хочется smile

В любом случае, всем спасибо за помощь!

Автор: likhobory 7.10.2005, 13:36
Цитата(Loiste @ 7.10.2005, 13:52)
все придется делать мне. делать рисунки из всех объектов,

зачем ?? делай все программно - пробегись в цикле по всем формулам дока и сохрани их в графике + путь кидай в соотв. поле базы

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)