Для VBA,
пробовал переводить на C++, и как раз момент с формулами не получилось перевести...
[Ответ]
alexz 22:04 19.12.2010
А ком-сервера почти одинаково пишутся. vba-справки вполне хватало.
А что, вы знаете способ создать вордовскую формулу через ком? я не нашёл ком-интерфейса для этого, в своё время.
я делал через "поля" - там есть вставка/поле/формула - и там дроби,интегралы,и всё такое прочее.
[Ответ]
Sashok.vrn 22:25 19.12.2010
Сообщение от alexz:
А ком-сервера почти одинаково пишутся. vba-справки вполне хватало.
А что, вы знаете способ создать вордовскую формулу через ком? я не нашёл ком-интерфейса для этого, в своё время.
я делал через "поля" - там есть вставка/поле/формула - и там дроби,интегралы,и всё такое прочее.
Из VBA:
Dim objRange As Range
Dim objEq As OMath
Set objRange = Selection.Range
objRange.Text = "Celsius = (5/9)(Fahrenheit – 32)"
Set objRange = Selection.OMaths.Add(objRange)
Set objEq = objRange.OMaths(1)
objEq.BuildUp
//создаем новый документ
_DocumentPtr wdoc1 = word->Documents->Add();
//копирование текста из старого в новый. Вот здесь надо как-то указать именно абзацы копировать! Можно? А? Ато он всё выделяет и копирует...
wdoc2->Content->Select();
wdoc2->Content->Copy();
wdoc1->Content->Paste();
alexz, в общем, изучая данную тему, я сделал следующие выводы (я могу ошибаться):
1. В Word 2007 появился собственный редактор формул, который в предыдущих версиях не использовался. Для этого редактора есть COM интерфейс, однако в C++Builder 6 используется объект Office 2k, который не поддерживает новые дополнения в Office 2007.
2. Equation 3.0 - отдельное OLE приложение, которое используется для создания формул в Office до 2007 (начиная с 2007 версии к Equation добавился еще и собственный редактор формул Word).
3. Поскольку в моем приложении нужно именно Equation 3.0, необходимо найти его интерфейсы. Найдя интерфейсы Equation, вставить формулы в Word не составит труда даже используя объект Office 2k...
Sashok.vrn, я долго (в своё время) пытался найти интерфейсы Equation 3.0 - но не вышло... Я пришёл к выводу тогда, что они закрыты. Поэтому мне пришлось "выворачиваться" с полями. В старом ворде они в меню Вставка, пункт Поле, далее в окошке выбрать "математические поля " или как-то так. Где они в новом ворде - хз, давно опенофисом пользуюсь уже.
Мне надо было просто "подставлять" цифры в готовые формулы (довольно хитрые). Я делал формулы с этими полями. А туда, куда надо подставлять цифры, вставлял переменные в таком формате $VOLUME$ или ещё как-то так. Это у меня был шаблон.
Затем я программно открывал шаблон в word, менял переменные на их значения, и вуаля!
Кстати, эти поля автоматически, по двойному щелчку, конвертировались в формулы.
3) А ведь вы можете создавать всё на машине с вордом 2007, и заставлять его сохранять в старый формат. не?
1) в си билдере не обязательно пользоваться этими объектами. Есть простой способ пользоваться почти любыми объектами через дисп-интерфейс (блин,я с трудом вспомнил это слово а когда-то шпарил их по сто штук в минуту)
Я только не помню как
Если хочешь - пороюсь в старых исходниках.
А ещё можно подключить к своей программе библиотеку типов - где-то вроде Project/Add type library, а tlb от ворда была в его папке.
[Ответ]
Sashok.vrn 23:12 21.12.2010
alexz, поскольку пока не получается найти интерфейсы к Equation, буду делать приложение для Word 2007 с "новым" редактором формул. Там тоже еще нужно много изучать, но хоть есть - что... Сейчас вот скачаю книг по Visual Studio и буду штудировать.
А вообще в интернете много вопросов задают на тему Equation и ответов особо я не встречал...
alexz, MadFish,
В общем не получается разобраться,
в C++Builder есть компонент Office 2k, который позволяет очень удобно пользоваться интерфейсом Word до 2007 версии. Вы не знаете, как такой же компонент сделать для Word 2007?
[Ответ]
peromax 23:51 22.12.2010
Есть еще вариант: Нажать запись макроса -> с помощью интерфейса Ворда вставить тестовую формулу -> Остановить и посмотреть код макроса.. И его уже с легкостью перевести на си++
Всегда при кодировании для офиса делал так, очень удобно.. А если что не понятно, что сгенерировал макрос, то msdn в помощь
[Ответ]
alexz, Hopkroft, g_beard, peromax,
В Word 2007 есть внутренний редактор формул. В MSDN есть пример работы с этим редактором на VB:
Dim objRange As Range
Dim objEq As OMath
Set objRange = Selection.Range
objRange.Text = "Celsius = (5/9)(Fahrenheit – 32)"
Set objRange = Selection.OMaths.Add(objRange)
Set objEq = objRange.OMaths(1)
objEq.BuildUp
Если перевести этот код на C++, то:
Variant vVarApp,vVarDocs,vVarParagraphs,vVarParagraph, vSelection, vTypeText;
....
vVarApp=CreateOleObject("Word.Application");//Открываем Word
vVarApp.OlePropertySet("Visible",true);
...
vVarDocs=vVarApp.OlePropertyGet("Documents");//Создаем новый документ
vVarDocs.OleProcedure("Add");
...
AnsiString f="S=n^2";//Текст формулы
...
Variant vRange;// Dim objRange As Range
Variant vEq;//Dim objEq As OMath