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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.09.2012, 20:18
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию экспорт в шаблон эксель с последующей печатью (в цикле)

Здравствуйте, помогите пжл решить задачу. Есть база акцесс, в ней таблица "Dog" в ней 3 поля "Num_Dog", "Date_Start", "Sum". Эта информация вытягивается (SQL) в грид "Main_Grid". Задача, как вытянутую информацию из грида экспортировать в шаблон эксель "Temp_Dog" ("Num_Dog" в Лист1 А1, "Date_Start" в Лист1 В1, "Date_Start" в Лист1 С1) потом печать листа1, и по циклу так все строки из грида. Помогите пжл.
Ответить с цитированием
  #2  
Старый 06.09.2012, 21:48
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вообще-то для таких простых операций (если надо просто все вытянуть) в Экселе есть специальная функция, позволяющая ему связываться с БД и брать оттуда данные.

Если же хочется чего-то странного (читай нестандартного, например вытащить только строчки, выбранные пользователем, или налету что-то подправить), то смотри как работать с Экселем через OLE. Примеров, в том числе и тут, полно.

ЗЫ. Еще есть библиотека XlsReadWriterII, но она специфическая (и еще платная) и печатать из нее нельзя (в смысле, напрямую нельзя, через нее).
Ответить с цитированием
  #3  
Старый 07.09.2012, 14:43
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

Я понимаю, что для знатаков это более чем элементарно, но для меня, новичка, это числам сложно, иначе сделал бы без вопросов. Если кто может потратить чуть времени, помогите пжл.
Ответить с цитированием
  #4  
Старый 07.09.2012, 15:06
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от DOR
Я понимаю, что для знатаков это более чем элементарно, но для меня, новичка, это числам сложно, иначе сделал бы без вопросов. Если кто может потратить чуть времени, помогите пжл.
Положи на форму компоненты TExcelApplication, TExcelWorkbook и TExcelWorksheet (находятся на вкладке "Servers" палитры компонентов Delphi) и с их помощью открывай шаблон, делай в нём изменения и сохраняй под другим именем.
Такие ссылки тебе должны помочь:
Excel ЧаВо часть I: Excel.Application
Excel ЧаВо часть II: Worksbooks и Worksheets
Excel ЧаВо часть III: Cells, Range, Rows и Columns
Excel ЧаВо часть IV: Chart, Shape, Picture
Excel ЧаВо часть V: Внешние источники данных

Если что-то конкретное не получается - спрашивай.
Ответить с цитированием
  #5  
Старый 16.09.2012, 22:35
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

Здравствуйте. Ниже приведен код на экспорт в созданный "вручную шаблон" Эксель. Все работает, но не знаю как pflfnm формат ячеек вновь создаваемых строк по подобию уже имеющихся. Например есть в "шаблоне" шестая строка которая имеет определенный формат, как сделать так, чтобы вставляемая строка имела формат предыдущей строчки. т.е. от WSheet.Cells.Item[6+i,1] до i.

Код:
procedure Tf_Reestr.SpeedButton2Click(Sender: TObject);
const lcid = LOCALE_USER_DEFAULT;
var
    WBook:_WorkBook;
    WSheet:_Worksheet;
    i: integer;
begin
  ExcelApplication1.Connect;
  WBook := ExcelApplication1.Workbooks.Add(ExtractFilePath(Application.ExeName) + '\templ_reestr.xlsx',LCID);
  ExcelApplication1.Visible[0] := True;
  WSheet := WBook.Worksheets[1] as ExcelWorksheet;

  i := 1;
  Q_Reestr_List.First;
  while not Q_Reestr_List.Eof do
    begin
      WSheet.Cells.Item[6+i,1].Value := inttostr(i);
      WSheet.Cells.Item[6+i,3].Value := Q_Reestr_List.FieldByName('Polis').Value;
    inc(i);
  Q_Reestr_List.Next;
    end;
end;
Ответить с цитированием
  #6  
Старый 17.09.2012, 00:32
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 340
Версия Delphi: 11.3
Репутация: 429
Сообщение

Вот тебе еще ссылочка на тему работы с MS Word и MS Excel.
По поводу твоего кода:
Код:
ExcelApplication1.Visible[0] := True;
лучше всего показывать Excel после всех манипуляций с ним (экспорт данных, настройка параметров листа, объединение ячеек и т.д.), так при больших количества экспортируемых записей это намного увеличит скорость экспорта.
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #7  
Старый 17.09.2012, 10:52
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

Спасибо за ссылку. Конкретного ответа не нашел, но нашел уйму нужного. Задачу решил вставкой
Код:
WSheet.Cells.Item[6+i,3].HorizontalAlignment := xlCenter
в цикл. По поводу "показывать Excel после всех манипуляций" обязательно учту.
Ответить с цитированием
  #8  
Старый 08.10.2012, 22:56
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

Так и не пойму что нужно написать чтобы отключиться от экселя (после вывода в эксель). После закрытия программы эксель закрывается с вопросом о сохранении. Нужно чтобы после закрытия проги эксель жил сам по себе.
Ответить с цитированием
  #9  
Старый 09.10.2012, 03:40
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от DOR
Так и не пойму что нужно написать чтобы отключиться от экселя (после вывода в эксель). После закрытия программы эксель закрывается с вопросом о сохранении. Нужно чтобы после закрытия проги эксель жил сам по себе.
Наверно такое происходит потому что ты зачем-то установил свойство ExcelApplication1.AutoQuit в True? По-умолчанию в этом свойстве False.
А так же после формирования отчёта не забывай отключаться от Excel'я:
Код:
ExcelApplication1.Disconnect;
Ответить с цитированием
  #10  
Старый 13.10.2012, 10:28
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

Спасибо. Ранее писал
Код:
ExcelApplication1.Disconnect;
, но из "ExcelApplication1.AutoQuit в True" ничего не получалось.
Ответить с цитированием
  #11  
Старый 16.10.2012, 22:25
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

Помогите пжл выставить ширину столбца, пересмотрел много примеров, ноне один не смог перенести на свой код.
Код:
      ExcelApplication1.Connect;
      WBook := ExcelApplication1.Workbooks.Add(EmptyParam, lcid);
      WSheet := WBook.Worksheets[1] as ExcelWorksheet;

      WSheet.Columns[1].ColumnWidth := 6;
      WSheet.Cells.Item[6,1].Value := '№';
      WSheet.Cells.Item[6,1].HorizontalAlignment := xlCenter;
      WSheet.Cells.Item[6,1].Borders.LineStyle := xlContinuous;
      WSheet.Cells.Item[6,1].Interior.ColorIndex:= 34;
Ответить с цитированием
  #12  
Старый 17.10.2012, 05:56
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от DOR
Помогите пжл выставить ширину столбца, пересмотрел много примеров, ноне один не смог перенести на свой код.
Код:
      ExcelApplication1.Connect;
      WBook := ExcelApplication1.Workbooks.Add(EmptyParam, lcid);
      WSheet := WBook.Worksheets[1] as ExcelWorksheet;

      WSheet.Columns[1].ColumnWidth := 6;
      WSheet.Cells.Item[6,1].Value := '№';
      WSheet.Cells.Item[6,1].HorizontalAlignment := xlCenter;
      WSheet.Cells.Item[6,1].Borders.LineStyle := xlContinuous;
      WSheet.Cells.Item[6,1].Interior.ColorIndex:= 34;
Пробуй так:
Код:
WSheet.Cells.Item[6,1].ColumnWidth := 6;
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
DOR (18.10.2012)
  #13  
Старый 18.10.2012, 21:06
DOR DOR вне форума
Начинающий
 
Регистрация: 14.01.2011
Сообщения: 171
Версия Delphi: 7
Репутация: 10
По умолчанию

Спасибо. Помогло.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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