Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Глюки при работе со списками в Word

32K
01 июля 2009 года
kopernik21187
31 / / 13.07.2008
Мне нужно в документ Ворд добавить данные в виде списка из ListBox...пользовался
материалами отсюда и отсюда....и сделал вот такой вот код:

Код:
procedure TForm1.Button3Click(Sender: TObject);
var n: OleVariant;
  vcol: OleVariant;
  vListTemplate: OleVariant;
  vLevel: OleVariant;
  OutlineNum: OleVariant;
  Level: OleVariant;
  ContinuePrev: OleVariant;
  Range: OleVariant;
  OutLineNumber : OleVariant;
  paraStart, paraEnd: Integer;
  templ,templ1,templ2,templ3,d,dd,ddd,word:OleVariant;
i,j: integer;
s: string;
begin

  {кароче эта часть кода отвечает за копирование шаблона в новый документ BEGIN}
  n:=GetCurrentDir+'\№3_(со списками)_1.doc';

  try
  Word := CreateOleObject('Word.Application');
  except
    ShowMessage('Microsoft Word не доступен!');
    exit;
  end;

  Word.Documents.Add(n);
  Word.Selection.WholeStory;
  Word.Selection.Copy;

    Word.Selection.TypeParagraph;
    Word.Selection.EndKey(Unit := wdStory);
    Word.Selection.PasteAndFormat(wdPasteDefault);


     
   {кароче эта часть кода отвечает за копирование шаблона в новый документ END}

  vcol:=wdcollapseend;
  for i:=1 to listbox1.Count do
        begin
           word.documents.item(1).lists.item(1).range.select;
           word.selection.collapse(vcol);
           word.selection.insertafter('item '+inttostr(i));
           word.documents.item(1).lists.item(1).range.select;
           word.selection.collapse(vcol);
           word.selection.insertafter(#13);
        end;

   word.visible:=true;
end;


но получается как-то коряво :( пробовал по разному! По методу второй ссылки с применением шаблонов списка тоже не прокатило! Если кто-то выводил в ворде списки -подскажите пожалуйста как делали!Самое главное не могу понять: почему из ListBox'а данные в список заносятся в обратном порядке?
303
02 июля 2009 года
makbeth
1.0K / / 25.11.2004
Проще всего записать макрос в Word, повторяющий нужные действия, открыть редактор VBA, посмотреть что получилось и перевести код уже на Delphi.
14
02 июля 2009 года
Phodopus
3.3K / / 19.06.2008
В обратном порядке скорее всего потому, что как ни пытаешься вставить "после" - в результате вставляется "до". Надо прогнать под отладчиком построково и посмотреть что получается. И справку по используемым методам объектов ворда изучить не помешает
6
02 июля 2009 года
George
4.1K / / 05.01.2007
гм. у меня было обычненькое memo. в вордовском шаблоне просто сделал первый пункт списка и поставил туда закладку. потом в дельфях нашел эту закладку и кинул туда весь текст из мемы. там где были переносы на новую строку, оно само создало там новые элементы списка. попробуйте
Delphi 7, MS Word 2003. Могу дать код своего юнита экспорта данных в ворд.
32K
02 июля 2009 года
kopernik21187
31 / / 13.07.2008
Код:
procedure TForm1.Button3Click(Sender: TObject);
var n: OleVariant;
  vcol: OleVariant;
  vListTemplate: OleVariant;
  vLevel: OleVariant;
  OutlineNum: OleVariant;
  Level: OleVariant;
  ContinuePrev: OleVariant;
  Range: OleVariant;
  OutLineNumber : OleVariant;
  paraStart, paraEnd: Integer;
  templ,templ1,templ2,templ3,d,dd,ddd,word:OleVariant;
  i,j: integer;
  s: string;
begin

  {кароче эта часть кода отвечает за копирование шаблона в новый документ BEGIN}
  n:=GetCurrentDir+'\№3_(со списками)_1.doc';

  try
  Word := CreateOleObject('Word.Application');
  except
    ShowMessage('Microsoft Word не доступен!');
    exit;
  end;

   word.visible:=true;

  Word.Documents.Add(n);
  Word.Selection.WholeStory;
  Word.Selection.Copy;

    Word.Selection.TypeParagraph;
    Word.Selection.EndKey(Unit := wdStory);
    Word.Selection.PasteAndFormat(wdPasteDefault);


       //Word.Connect;
       i:=Word.Documents.item(1).tables.count;
       //Word.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);
       //Word.Documents.item(1).ConnectTo(Word.ActiveDocument);
   {кароче эта часть кода отвечает за копирование шаблона в новый документ END}

   vcol:=wdCollapseEnd;

    word.documents.item(1).lists.item(1).range.select;

  for i:= 1 to listbox1.Count do
        begin

           if i=1 then
                    begin
                       vcol:=wdCollapseStart;
                       word.selection.collapse(vcol);
                       word.selection.insertafter('item '+inttostr(1));
                       vcol:=wdCollapseEnd;
                       word.selection.collapse(vcol);
                       word.selection.TypeParagraph;
                    end else
           begin
             word.selection.insertafter('item '+inttostr(i));
             word.selection.collapse(vcol);
             if i<> listbox1.Count then word.selection.TypeParagraph;
           end;

        end;




end;

Вот так вот надо было сделать!Спасибо всем откликнувшимся!:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог