Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2009, 13:30   #1
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию О вставке ранга EXCEL в документ WORD

В связи с вопросами по SUBJ на нескольких форумах решил ответить
отдельным топиком.

1) Вставка осуществляется с помощью OLE
Вставка->Объект->Создание из файла->Обзор ...
Для указания имени ранга ячеек используйте кнопку "Элемент"

2) Можно сразу поместить в документ поле LINK
Например,
{ LINK Excel.Sheet.8 "E:\\123456789.xls" "TBL1" \a \f 0 \p }
Создаст связь с рангом TBL1 файла E:\123456789.xls с автоматическим
обновлением. Ранг вставляется как рисунок, но может быть откорректирован в родительском приложении по клику на объект.

3)Можно скопировать Range в Excel, перейти в Word и выбрать Правка->Специальная вставка
Вставить как "Лист Microsoft Office Excel (объект)" - будет вставлено поле EMBED и образована связь с XLS файлом или
вставить как "Формат HTML" - ранг будет конвертирован в таблицу Word и вставлен в документ
Собственно, можно и просто Ctrl-C Ctrl-V
При внедрении данных с помощью OLE нужно не забывать, что если вы перенесёте файл EXCEL в другой каталог или переименуете его связь будет разрушена.

4) Можно воспользоваться методом InsertFile
Код:
selection.InsertFile "E:\123456789.xls","R5C2:R7C4",false
При указании в этом методе 4-го параметра link:=TRUE в документ вставляется поле INCLUDETEXT. Cм. далее.

5) Можно воспользоваться полем INCLUDETEXT
{ INCLUDETEXT "E:\\123456789.xls" R5C2:R7C4 \c MSBiff } или
{ INCLUDETEXT "E:\\123456789.xls" B5:D7 \c MSBiff }
со стандартным конвертером.
Так же можно воспользоваться старым (не поддерживаемым больше MS) конвертером Excel32.cnv, разработанным для Excel 2.0-97.
Конвертер можно найти, например, по адресу http://www.gmayor.com/Zips/Excel32.zip
Код поля в этом случаее будет иметь вид:
{ INCLUDETEXT "E:\\123456789.xls" R5C2:R7C4 \c excel32 }
К сожалению, с именованными рангами эти конвертеры у меня работать отказались.
Но если используется адрес ячеек для MSBIFF всё срабатывает без проблем.

6) Ну и на последок. Можно написать макрос который просканирует коллекцию FIELDS в вашем документе в поисках скажем полей
вида { ADDIN XLSRANGE имя_ранга}. Получив имя ранга нужно получить его адрес и затем вставить этот ранг в WORD за полем. В поле ADDIN вы можете установить любое удобное ваш содержание.

В отличие от использования OLE использование INCLUDETEXT не даёт возможности править исходный файл в целевом документе.
Кроме того, если используется конвертация формата (INCLUDETEXT,insertfile) вы будете получать дополнительный запрос от Word на подтверждение конвертации формата файла. Однако, при использовании непосредственной вставки ранга по insertfile этот запрос можно задавить.
Код:
Dim Old_DA As Long
Old_DA = Application.DisplayAlerts
Application.DisplayAlerts = wdAlertsNone
Selection.InsertFile "E:\123456789.xls", "B5:D7", False
Application.DisplayAlerts = Old_DA

Последний раз редактировалось Aent; 27.09.2009 в 15:42.
Aent вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не открывается документ Word komar73 Microsoft Office Word 3 30.05.2009 22:17
Excel: Вставить картинку или Word документ Mort222 Microsoft Office Excel 6 19.02.2009 12:47
как вставить диаграмму Excel в документ Word JOHNNY BASIC Общие вопросы Delphi 0 29.09.2008 20:15
Интеграция таблиц excel в документ word SergeyPaterson Microsoft Office Excel 1 29.05.2008 23:39
Word и документ Dos? Prowler Общие вопросы Delphi 1 02.03.2007 15:05