Ошибка формирования таблицы в документе Word из базы данных Msaccess

Тема в разделе "Delphi - Базы данных", создана пользователем kostarev, 22 сен 2009.

  1. kostarev

    kostarev New Member

    Регистрация:
    22 сен 2009
    Сообщения:
    1
    Симпатии:
    0
    // Функция FindRowColumnInTable находит текстовую константу и
    // возвращает таблицу, а также номер строки и столбца где находится
    // эта константа
    function FindRowColumnInTable(FindText: string; var tab: variant;
    var Row,Column:integer):boolean;
    begin
    FindRowColumnInTable:=false;
    try
    W.Selection.Find.Text:=FindText;
    if W.Selection.Find.Execute then begin
    Column:=W.Selection.Cells.Item(1).ColumnIndex;
    Row:=W.Selection.Cells.Item(1).RowIndex;
    tab:=W.Selection.Tables.Item(1);
    FindRowColumnInTable:=true;
    end;
    except
    FindRowColumnInTable:=false;
    end;
    end;

    begin
    // Создаем объект Word.Application и поместим ссылку на него
    // в переменную W: variant
    W:=CreateOleObject('Word.Application');

    // Сделаем окно приложения Word видимым
    W.Visible:=true;
    // Отобразим все необходимые панели управления приложения Word
    for a_:=1 to W.CommandBars.Count do
    W.CommandBars.Item[a_].Enabled:=true;

    // Создаем новый документ по шаблону
    W.documents.Add(ExtractFileDir(Application.ExeName)+'\Шаблон СЧЕТ.docx');
    messagebox(handle,'Шаблон создан! Переходим к заполнению.','Внимание!',0);
    // Подставляем текст в заголовок документа
    FindAndInsert('###НОМЕР&',DM.ADONaklad.Fields[0].AsString);
    FindAndInsert('###Дата&',DateToStr(DM.ADONaklad.Fields[1].AsDateTime));
    FindAndInsert('###ПРОДАВЕЦ&','ОАО Балтика');
    FindAndInsert('###АДРЕС_ПРОДАВЦА&',
    'г. Санкт-Петербург, ул. Кузнечная, 5');
    FindAndInsert('###ИНН_ПРОДАВЦА&','1234567890');
    FindAndInsert('###ГРУЗООТПРАВИТЕЛЬ&','ОАО Балтика');
    FindAndInsert('###ГРУЗОПОЛУЧАТЕЛЬ&',DM.ADOZakazcik.Fields[1].AsString+
    ' г. Санкт-Петербург, '+DM.ADOZakazcik.Fields[2].AsString);
    FindAndInsert('###ДОКУМЕНТ&',' ');
    FindAndInsert('###ДАТА_ДОКУМЕНТА&',' '{datetostr(date)});
    FindAndInsert('###ПОКУПАТЕЛЬ&',DM.ADOZakazcik.Fields[1].AsString);
    FindAndInsert('###АДРЕС_ПОКУПАТЕЛЯ&',' г. Санкт-Петербург, '
    +DM.ADOZakazcik.Fields[2].AsString);
    FindAndInsert('###ИНН_ПОКУПАТЕЛЯ&','0987654321');

    // Если нашли текстовую константу, то переходим к формированию
    // табличной части
    if FindRowColumnInTable('###ТАБЛИЦА&',table_,Row_,Column_)then begin
    // Перед началом формирования курсор находится в таблице table_
    // в ячейке Cell(Row_,Column_)
    k_:=0;
    if not DM.ADOSnakl.IsEmpty then
    with DM.ADOSnakl do
    begin
    First;
    repeat k_:=k_+1;
    until not FindNext;
    end;
    sum_:=0;
    // Добавляем в таблицу необходимое количество пустых строк
    if k_>1 then W.Selection.InsertRows(k_-1);

    // Формируем табличную часть документа
    if not DM.ADOSnakl.IsEmpty then
    with DM.ADOSnakl do
    begin
    First;
    repeat
    table_.Cell(Row_,Column_+0).Range.Text:=DM.ADOIzdelie.Fields[1].AsString;
    table_.Cell(Row_,Column_+1).Range.Text:=DM.ADOIzdelie.Fields[2].AsString;
    table_.Cell(Row_,Column_+2).Range.Text:=
    IntToStr(DM.ADOSnakl.Fields[2].AsInteger);
    table_.Cell(Row_,Column_+3).Range.Text:=
    CurrToStr(DM.ADOIzdelie.Fields[3].AsCurrency);
    table_.Cell(Row_,Column_+4).Range.Text:=
    CurrToStr(DM.ADOSnakl.Fields[5].AsCurrency);
    table_.Cell(Row_,Column_+6).Range.Text:=' ';
    table_.Cell(Row_,Column_+7).Range.Text:=' ';
    table_.Cell(Row_,Column_+8).Range.Text:=' ';
    sum_:=sum_+DM.ADOSnakl.Fields[5].AsCurrency;

    Inc(Row_);
    until not FindNext;
    end;

    // Формируем подпись табличной части документа
    if FindRowColumnInTable('###ИТОГ&',table_,Row_,Column_)then begin
    table_.Cell(Row_,Column_+0).Range.Text:=CurrToStr(sum_);
    table_.Cell(Row_,Column_+1).Range.Text:=' ';
    table_.Cell(Row_,Column_+2).Range.Text:=' ';
    end;
    end;

    // Заполняем текст в окончании документа
    FindAndInsert('###ВСЕГО_К_ОПЛАТЕ&',
    CurrToStr(DM.ADONaklad.Fields[2].AsCurrency)+' руб.');

    // Изменяем масштаб отображения документа
    W.ActiveWindow.ActivePane.View.Zoom.Percentage:=100;

    // Сохраняем документ на диске
    W.ActiveDocument.SaveAs('D:\Учеба институт\My База\СЧЕТ.docx');
    if W.ActiveDocument.Saved
    then messagebox(handle,'Документ сохранен!','Внимание!',0)
    else messagebox(handle,'Документ не сохранен!','Внимание!',0);

    // Закрываем документ и приложение Word, освобождаем память
    W.ActiveDocument.Close;
    W.Quit;
    W:=UnAssigned;

    end;
     
Загрузка...
Похожие Темы - Ошибка формирования таблицы
  1. KiR
    Ответов:
    10
    Просмотров:
    4.709
  2. Ruska132
    Ответов:
    1
    Просмотров:
    23
  3. Lamerman
    Ответов:
    0
    Просмотров:
    27
  4. Enima
    Ответов:
    0
    Просмотров:
    54
  5. Baindt
    Ответов:
    1
    Просмотров:
    78

Поделиться этой страницей