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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2013, 01:08   #11
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от курбанниязов Посмотреть сообщение
Как создать отчет по персоналу в Excel что именна нада прописать на кнопку Button
Код:
procedure TFrmPrais2.sbtExcelClick(Sender: TObject);
var
  XLApp,Sheet,Colum:Variant;
  index,i:Integer;
  bm : TBookmark;   //  Bokkmark
begin
  // Uses --> ComObj,
   bm := DM.qrprais2.GetBookmark;   // запомним закладку
         DM.qrprais2.DisableControls;    // отклуючим контрол
         XLApp:= CreateOleObject('Excel.Application');
         XLApp.Visible:=true;
         XLApp.Workbooks.Add(-4167);
         XLApp.Workbooks[1].WorkSheets[1].Name:='Отчет';
         //--------- ориентация страницы горизонтально
         //XLApp.ActiveSheet.PageSetup.Orientation:= 2;
       //----------------------------------------------
         Colum:=XLApp.Workbooks[1].WorkSheets['Отчет'].Columns;
         Colum.Columns[1].ColumnWidth:=12;
         Colum.Columns[2].ColumnWidth:=14;
         Colum.Columns[3].ColumnWidth:=14;
         Colum.Columns[4].ColumnWidth:=70;
         Colum.Columns[5].ColumnWidth:=15;
         Colum.Columns[6].ColumnWidth:=10;
         Colum.Columns[7].ColumnWidth:=10;

         Colum:=XLApp.Workbooks[1].WorkSheets['Отчет'].Rows;
         Colum.Rows[2].Font.Bold:=true;  // Тип шрифта название колонки
         Colum.Rows[2].Font.Size:=11;   //  размер название колонки
         Colum.Rows[1].Font.Bold:=true;
         Colum.Rows[1].Font.Color:=clBlue;  // Цветь шривта заголовки
         Colum.Rows[1].Font.Size:=16;      // размер шрифта заголовки

         Sheet:=XLApp.Workbooks[1].WorkSheets['Отчет'];
         Sheet.Cells[1,4]:='Второе прайс' ;
         Sheet.Cells[2,1]:='Дата поступления';
         Sheet.Cells[2,2]:='Оригин. номер';
         Sheet.Cells[2,3]:='Аналог';
         Sheet.Cells[2,4]:='Наименование товара';
         Sheet.Cells[2,5]:='Изготовитель';
         Sheet.Cells[2,6]:='Наличие';
         Sheet.Cells[2,7]:='Дилер';
      index:=3;

      DM.qrprais2.First;
      for i:=0 to DM.qrprais2.RecordCount-1 do
      begin
         Sheet.Rows[index].Font.Color:=  BLACK_BRUSH; // Цвет данных который мы загружаем
         Sheet.Rows[index].Font.size := 10;   // Размер фонта для данных который мы выгружаем

        //-------------------------------------------------------------------------------
         Sheet.Cells[index,1]:= FormatDateTime ('dd.mm.yyyy',DM.qrprais2.Fields[1].AsDateTime);
         Sheet.Cells[index,2]:= DM.qrprais2.Fields[2].AsString;
         Sheet.Cells[index,3]:= DM.qrprais2.Fields[3].AsString;
         Sheet.Cells[index,4]:= DM.qrprais2.Fields[4].AsString;
         Sheet.Cells[index,5]:= DM.qrprais2.Fields[5].AsString;
         Sheet.Cells[index,6]:= DM.qrprais2.Fields[6].AsString;
         Sheet.Cells[index,7]:= DM.qrprais2.Fields[7].AsString;
         Inc(index);
         DM.qrprais2.Next;
      end;
        if  DM.qrprais2.BookmarkValid(bm) then  DM.qrprais2.GotoBookmark(bm); // возврашаем на закладку
        if    DM.qrprais2.BookmarkValid(bm) then  DM.qrprais2.FreeBookmark(bm); // освобождаем закладки
        DM.qrprais2.EnableControls; // после освобождения вклуючти контрол

end;
xxbesoxx вне форума Ответить с цитированием
Старый 25.12.2013, 14:27   #12
SunnyCrash
Пользователь
 
Регистрация: 13.02.2011
Сообщений: 45
По умолчанию

Ты хочешь и с огнем поиграть и пис-ку в ацетоне вымыть
Код:
var
 Excel, WorkBook, Sheet: Variant;
begin
 Excel:=CreateOleObject('Excel.Application.10'); // для Office XP
// Excel:=CreateOleObject('Excel.Application'); // для остальных
 Excel.SheetsInNewWorkbook:=1;
 WorkBook:=Excel.WorkBooks.Add;
 Sheet:=WorkBook.WorkSheets[1];
 Sheet.Cells.VerticalAlignment:=xlCenter;
 Sheet.Cells[1, 1]:='XX___1___XX';
 Sheet.Cells[5, 5]:='XX___1___XX'; 
 Sheet.Cells.Columns.AutoFit;
 Excel.Visible:=True;
end;
Есть множество статей по этому вопросу.

Я не могу привести полный код моего проекта, здесь я поместил лишь его небольшую часть, создающую и форматирующую таблицу Excel на основе содержимого DBGrid, сгенеренного с помощью SQL запроса. Код содержит некоторое форматирование ячеек. Код проверен в работе с Delphi 3 и Excel 97:
Код:


--------------------------------------------------------------------------------
    procedure TfrmBlank.btnExcelClick(Sender: TObject);
var

XL, XArr: Variant;
i : Integer;
j : Integer;
begin

{не забудьте включить ComObj в список используемых модулей}
// Создаем массив элементов, полученных в результате запроса
XArr:=VarArrayCreate([1,EmailQuery.FieldCount],varVariant);
XL:=CreateOLEObject('Excel.Application');     // Создание OLE объекта
XL.WorkBooks.add;
XL.visible:=true;


j := 1;
EmailQuery.First;
while not EmailQuery.Eof do begin
i:=1;
while i<=EmailQuery.FieldCount do begin
XArr[i] := EmailQuery.Fields[i-1].Value;
i := i+1;
end;
XL.Range['A'+IntToStr(j),
CHR(64+EmailQuery.FieldCount)+IntToStr(j)].Value := XArr;
EmailQuery.Next;
j := j + 1;
end;
XL.Range['A1',CHR(64+EmailQuery.FieldCount)+IntToStr(j)].select;
// XL.cells.select;                     // Выбираем все
XL.Selection.Font.Name:='Garamond';
XL.Selection.Font.Size:=10;
XL.selection.Columns.AutoFit;
XL.Range['A1','A1'].select;
end;
Дополнение

При однопроходной передачи полной страницы гораздо удобнее использовать двумерный Variant Array, чем запихивать данные туда построчно. Функция VarArrayCreate позволяет создать многомерные массивы при определении 2N (где N - кол-во измерений) границ массива в аргументе Bounds.

From Stilet: У нас принято код выделять спецтегом по кнопке # на панели редактора поста. И попрошу не делать посты подряд. Если есть возможность - редактируй свой предидущий, коль скоро он последний

Последний раз редактировалось Stilet; 25.12.2013 в 14:38.
SunnyCrash вне форума Ответить с цитированием
Старый 03.01.2014, 17:21   #13
курбанниязов
Пользователь
 
Регистрация: 29.09.2013
Сообщений: 59
По умолчанию

Есть таблица сотрудники выделяю нужного мне сотрудника и вывожу отчет в Экзел
курбанниязов вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бросок к горизонту(паскаль+-делфи.(может ли кто помочь сделать с Паскаля АВС на Делфи?) extrimal Помощь студентам 8 24.03.2013 23:51
Делфи ДваДваВо7 Помощь студентам 1 06.12.2010 21:14
Делфи Vitalina69 Помощь студентам 0 16.11.2010 21:29
Код игры на Паскале и на Делфи сильно отличается? Как переписать код с Паскаля в Делфи? Mclaren Помощь студентам 2 27.04.2009 22:37
БД в делфи Neymexa Помощь студентам 29 29.01.2009 20:32