Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.04.2012, 22:28
binary binary вне форума
Прохожий
 
Регистрация: 24.03.2012
Сообщения: 16
Репутация: 10
По умолчанию Создание таблицы через WordApplication

Доброго времени суток, уважаемые форумчане. Понимаю, что тема избита, но нигде не могу найти ответа на мою проблему.
Встала необходимость экспортировать данные из базы в таблицу документа MS Word.
После записи макроса перенёс код в Делфи.
Код макроса следующий:
Код:
Sub Макрос2()
'
' Макрос2 Макрос
' Макрос записан 29.04.2012 Admin
'
    ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:= _
        5, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
        wdAutoFitContent
    With Selection.Tables(1)
        If .Style <> "Сетка таблицы" Then
            .Style = "Сетка таблицы"
        End If
        .ApplyStyleHeadingRows = True
        .ApplyStyleLastRow = True
        .ApplyStyleFirstColumn = True
        .ApplyStyleLastColumn = True
    End With
End Sub
Код в Делфи
Код:
procedure TForm1.Button1Click(Sender: TObject);
 var Range_: Range;
 NumRows,NumColumns,DefaultTableBehavior,AutoFitBehavior: OleVariant;
begin
      
        Range_:= WordApplication1.Selection.Range;
         NumRows :=20;
         NumColumns:= 5;
         DefaultTableBehavior:= wdWord9TableBehavior;
         AutoFitBehavior:=  wdAutoFitContent;

        WordApplication1.ConnectKind:=ckNewInstance;
WordApplication1.AutoConnect:= true;
WordApplication1.Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam);

WordApplication1.ActiveDocument.Tables.Add(Range_,
         NumRows,NumColumns,DefaultTableBehavior,AutoFitBehavior);

***

 WordApplication1.Visible:= true;
   WordApplication1.Disconnect;
end;

При добавлеии таблицы выдаёт ошибку "Указанный диапазон взят не из правильного документа или цепочки надписей ".
Помогите решить проблему. Заранее благодарен.
Ответить с цитированием
  #2  
Старый 29.04.2012, 22:49
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Пробегитесь по процедуре клавишей F8. На какой строке вылетает ошибка?
__________________
Google в помощь
Ответить с цитированием
  #3  
Старый 29.04.2012, 22:58
binary binary вне форума
Прохожий
 
Регистрация: 24.03.2012
Сообщения: 16
Репутация: 10
По умолчанию

Ошибка вылетает при создании таблицы
Код:
WordApplication1.ActiveDocument.Tables.Add(Range_,
         NumRows,NumColumns,DefaultTableBehavior,AutoFitBehavior);
Ответить с цитированием
  #4  
Старый 29.04.2012, 23:06
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Могу поспорить, что так добавится:
Код:
WordApplication1.ActiveDocument.Tables.Add(Range_,
         NumRows,NumColumns,0,1);
Только вот я не понимаю вашей логики, когда вы задаете NumRows и NumColumns тип OleVariant. Правильнее все-таки integer
__________________
Google в помощь
Ответить с цитированием
  #5  
Старый 29.04.2012, 23:11
binary binary вне форума
Прохожий
 
Регистрация: 24.03.2012
Сообщения: 16
Репутация: 10
По умолчанию

в данном случае компилятор выдаст сообщение, что тип передаваемых параметров должен быть индентичным
Ответить с цитированием
  #6  
Старый 29.04.2012, 23:11
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от binary
в данном случае компилятор выдаст сообщение, что тип передаваемых параметров должен быть индентичным
Не выдаст.
__________________
Google в помощь
Ответить с цитированием
  #7  
Старый 29.04.2012, 23:12
binary binary вне форума
Прохожий
 
Регистрация: 24.03.2012
Сообщения: 16
Репутация: 10
По умолчанию

Мне кажется, тут непонятки именно с Range, но что именно ума не приложу
Ответить с цитированием
  #8  
Старый 29.04.2012, 23:13
binary binary вне форума
Прохожий
 
Регистрация: 24.03.2012
Сообщения: 16
Репутация: 10
По умолчанию

уже выдал )
Ответить с цитированием
  #9  
Старый 29.04.2012, 23:14
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Пропишите так:
Код:
WordApplication1.ActiveDocument.Tables.Add(WordApplication1.Selection.Range,
         20,5,0,1);
__________________
Google в помощь
Ответить с цитированием
  #10  
Старый 29.04.2012, 23:16
binary binary вне форума
Прохожий
 
Регистрация: 24.03.2012
Сообщения: 16
Репутация: 10
По умолчанию

Если же определить переменные нужного типа, присвоить им значения ноль и единицу, как вы предложили, при создании таблицы возникает ошибка "неверный параметр"
Ответить с цитированием
  #11  
Старый 29.04.2012, 23:20
binary binary вне форума
Прохожий
 
Регистрация: 24.03.2012
Сообщения: 16
Репутация: 10
По умолчанию

возможно я вас не понимаю, простите могу глупость...
Но я работаю с Word не через создание Ole-объекта, а через объект WordApplication, в котором инкапсулированы определённые функции и процедуры, в описании которых используются определённые типы. В связи с этим невозможно передать процедуре параметр целочисленного типа, если он задан как OleVariant
Ответить с цитированием
  #12  
Старый 29.04.2012, 23:21
binary binary вне форума
Прохожий
 
Регистрация: 24.03.2012
Сообщения: 16
Репутация: 10
По умолчанию

я к тому, что указанный Вами код не будет компилироваться
Ответить с цитированием
  #13  
Старый 30.04.2012, 09:54
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от binary
возможно я вас не понимаю, простите могу глупость...
Но я работаю с Word не через создание Ole-объекта, а через объект WordApplication
Вашей глупости тут нет, это я подумал, что вы используете OLE-объект. Извините, но тут ничем к сожалению помочь не могу.
__________________
Google в помощь
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:37.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025