Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Вниз

Экспорт информации из базы данных в Excel   Найти похожие ветки 

 
Трушик ©   (2005-09-14 13:32) [0]

Ребята! Подскажите как экспортировать информацию из базы данных  Paradox в Excel. Заранее спасибо...


 
_RusLAN ©   (2005-09-14 14:39) [1]

А что именно вызывает трудности
работа с БД   или с Excel

вопрос очень не конкретный


 
erika ©   (2005-09-14 15:01) [2]


>
> Трушик ©   (14.09.05 13:32)  

ты где??


 
Трушик ©   (2005-09-14 15:07) [3]

У меня есть табличка заполнена кое-кокой информацией, как ети записи с таблицы переписать и зберечь в Excel.(Наверника надо переписать из ячейки ВDGrida в ячейки Excel) Доступ к информации в полях таблицы понятен DataModule2.Table1.FieldByName("Name").AsString , но как єто поле зберечь в Excel таблице?????????


 
msguns ©   (2005-09-14 15:11) [4]

unit XLReps;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics,
 ComObj, Excel2000, OleServer, DB, Variants;

type
 // Выравнивание текста внутри ячейки :
 CXLExp_HorAlignment = (ehaLeft,ehaRight,ehaCenter,ehaNone);   // горизонтальное
 CXLExp_VertAlignment = (evaTop,evaBottom,evaCenter,evaResize,evaMultiLine,evaNone);  // вертикальное
 // Толщина и наклон символов
 CXLExp_FontStyle = (efsBold, efsItalic, efsNone);
 SXLExp_FontStyle = set of CXLExp_FontStyle;
 CXLExp_BorderStyle = (ebsThin, ebsMedium, ebsThick, ebsBlank);
 RXLExp_Text = record
   Hor: CXLExp_HorAlignment;     // Горизонтальное
   Vert: CXLExp_VertAlignment;   // Вертикальное
   WrdWrap: boolean;             // Перенос по словам
 end;

 RXLExp_Font = record
   Name: TFontName;                 // Название шрифта (если "", то Default
   Color: TColor;                // Цвет шрифта
   Size: ShortInt;               // Размер шрифта (если AutoSize=true, игнорируется)
   Style: TFontStyles;           // Стиль (fsBold,fsItalic,fsUnderline,fsStrikeOut)
 end;

 RXLExp_CellsProp = record       // ******** Свойства ячеек
   Align: RXLExp_Text;           // Выравнивание текста внутри ячейки
   Font:  RXLExp_Font;           // Фонт
   Width: integer;               // Ширина ячейки в ед.Excel (если -1, то не уст-ся)
   Height: integer;              // Высота ячейки в ед.Excel (если -1, то не уст-ся)
   Value: OleVariant;            // Значение ячейки
   Color: TColor;                // Цвет фона
   // ВАЖНО ! При установке цвета фона следует учитывать, что палитра цветов
   // Excel`а существенно отличается от принятого в Windows, что может привести
   // к тому, что вместо светло-серого ячейки окрасятся в черный, т.к. полутона
   // екселем интерпретируются в полный, насыщенный цвет палитры RGB
 end;

 RXLExp_Region = record
   ColLeft: word;                // Колонка начала
   RowTop: word;                 // Строка начала
   ColRight: word;               // Колонка конца
   RowBottom: word;              // Строка конца
   JoinCells: boolean;           // Объединения ячеек (только для региона)
   Text: string;                 // Текст в ячейках
 end;

// Открывает Excel-объект
procedure XLExp_OpenReport(TemplateName: OleVariant);

// Закрывает Excel-объект
procedure XLExp_CloseReport;

// Устанавливает свойства ячеек в заданном районе
procedure XLExp_SetCellsProp(Region: RXLExp_Region; CellsProp: RXLExp_CellsProp);

// Возращает объект "Свойства" для указанного района ячеек
procedure XLEXP_GetCellsProp(Region: RXLExp_Region; var CellsProp: RXLExp_CellsProp);

// Задать ширину колонки
procedure XLExp_SetColumnWidth(Col,Width: integer);

// Слить ячейки в одну область
procedure XLExp_MergeCells(Region: RXLExp_Region);

// Запись в указанный район ячеек текста со слитием ячеек, выравниванием по центру
// и заданным размером и типом шрифта
procedure XLExp_CaptionInRange(Region: RXLExp_Region; Txt: string;
      FntSize: word; FntStyle: SXLExp_FontStyle; Mrg: boolean);

// Процедура обводит ячейки указанного района листа решеткой заданной ширины
procedure XLExp_DrowBorder(Region: RXLExp_Region; Brd: CXLExp_BorderStyle);

// Занести текст в указанную ячейку
function XLExp_SetDataInCell(Index1,Index2: OleVariant; Data: string):string;

procedure XLExp_DataSetExport(Range:OleVariant; DataSet:TDataSet);

function XLExp_ShowReport: boolean;

function XLExp_GetLastRow(Range:OleVariant; DataSet:TDataSet):integer;

var
 XLExp_Report: TExcelApplication;
 XLExp_WorkBook: Excel2000.ExcelWorkBook;
 XLExp_Sheet: Excel2000.ExcelWorkSheet;
 XLExp_Col: array [1..26] of string=("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");

implementation

procedure XLExp_OpenReport(TemplateName: OleVariant);
// Процедура создает в первый раз Excel-приложение, а если оно уже существует,
// то коннектится к нему, определяя опции коннекта и создавая объекты "Книга"
// и "Лист". Имя книги задается параметром TemplateName
begin
 if not Assigned(XLExp_Report) then
    XLExp_Report:=TExcelApplication.Create(nil);
 XLExp_Report.ConnectKind:=ckRunningOrNew;
 XLExp_Report.Connect;
 XLExp_WorkBook:=XLExp_Report.Workbooks.Add(TemplateName,0);
 XLExp_Sheet:=XLExp_Workbook.Worksheets.Item[1] as Excel2000.ExcelWorkSheet;
end;

procedure XLExp_CloseReport;
// Процедура закрывет Excel-приложение и освобождает занятые им ресурсы
begin
 if Assigned(XLExp_Report) then
   begin
    XLExp_Sheet:=nil;
    XLExp_Workbook:=nil;
    FreeAndNil(XLExp_Report);
   end;
end;

procedure XLEXP_SetCellsProp(Region: RXLExp_Region; CellsProp: RXLExp_CellsProp);
// Присваивает ячейкам заданного района указанные свойства
begin
 with XLExp_Sheet.Range[XLExp_Col[Region.ColLeft]+IntToStr(Region.RowTop),
                   XLExp_Col[Region.ColRight]+IntToStr(Region.RowBottom)] do
   begin
    case CellsProp.Align.Hor of
      ehaLeft: HorizontalAlignment := xlLeft;
      ehaRight: HorizontalAlignment := xlRight;
      ehaCenter: HorizontalAlignment := xlCenter;
      ehaNone: HorizontalAlignment := xlDefaultAutoFormat;
    end;
    case CellsProp.Align.Vert of
      evaResize: VerticalAlignment := xlGeneral;
      evaMultiLine: VerticalAlignment := xlDistributed;
      evaTop: VerticalAlignment := xlTop;
      evaBottom: VerticalAlignment := xlBottom;
      evaCenter: VerticalAlignment := xlCenter;
      evaNone: VerticalAlignment := xlDefaultAutoFormat;
    end;
    WrapText := CellsProp.Align.WrdWrap;
    Font.Bold := fsBold in CellsProp.Font.Style;
    Font.Italic := fsItalic in CellsProp.Font.Style;
    Font.Strikethrough := fsStrikeOut in CellsProp.Font.Style;
    Font.Subscript := fsUnderline in CellsProp.Font.Style;
    Font.Color := CellsProp.Font.Color;
    Font.Size := CellsProp.Font.Size;
    if CellsProp.Font.Name>"" then Font.Name := CellsProp.Font.Name;
    Interior.Color := CellsProp.Color;
    if CellsProp.Width>-1 then Columns.ColumnWidth := CellsProp.Width;
    if CellsProp.Height>-1 then Rows.RowHeight := CellsProp.Height;
    MergeCells := Region.JoinCells;
    if Region.Text>"" then Value := Region.Text;
   end;
end;


 
msguns ©   (2005-09-14 15:12) [5]

Продолжение

procedure XLEXP_GetCellsProp(Region: RXLExp_Region; var CellsProp: RXLExp_CellsProp);
// Возращает объект "Свойства" для указанного района ячеек
begin
 with XLExp_Sheet.Range[XLExp_Col[Region.ColLeft]+IntToStr(Region.RowTop),
                   XLExp_Col[Region.ColRight]+IntToStr(Region.RowBottom)] do
   begin
    CellsProp.Align.WrdWrap := WrapText;
    CellsProp.Font.Style := [];
    if Font.Bold then Include(CellsProp.Font.Style,fsBold);
    if Font.Italic then Include(CellsProp.Font.Style,fsItalic);
    if Font.Strikethrough then Include(CellsProp.Font.Style,fsStrikeOut);
    if Font.Subscript then Include(CellsProp.Font.Style,fsUnderline);
    CellsProp.Font.Color := Font.Color;
    CellsProp.Color := Interior.Color;
    if CellsProp.Width>-1 then Columns.ColumnWidth := CellsProp.Width;
    if CellsProp.Height>-1 then Rows.RowHeight := CellsProp.Height;
    Region.JoinCells := MergeCells;
   end;
end;

procedure XLExp_SetColumnWidth(Col,Width: integer);
// Изменить ширину колонки
begin
 XLExp_Sheet.Range[XLExp_Col[Col]+"1",XLExp_Col[Col]+"1"].ColumnWidth := Width;
end;

procedure XLExp_MergeCells(Region: RXLExp_Region);
// Слить ячейки
begin
 XLExp_Sheet.Range[XLExp_Col[Region.ColLeft]+IntToStr(Region.RowTop),
                   XLExp_Col[Region.ColRight]+IntToStr(Region.RowBottom)].MergeCells := true;
end;

procedure XLExp_CaptionInRange(Region: RXLExp_Region; Txt: string;
      FntSize: word; FntStyle: SXLExp_FontStyle; Mrg: boolean);
// Запись в указанный район ячеек текста со слитием ячеек, выравниванием по центру
// и заданным размером и типом шрифта
begin
 with XLExp_Sheet.Range[XLExp_Col[Region.ColLeft]+IntToStr(Region.RowTop),
                   XLExp_Col[Region.ColRight]+IntToStr(Region.RowBottom)] do
  begin
   if Mrg then MergeCells := true;
   Formula := Txt;
   HorizontalAlignment := xlCenter;
   VerticalAlignment := xlCenter;
   Font.Size := FntSize;
   Font.Bold := (efsBold in FntStyle);
   Font.Italic := (efsItalic in FntStyle);
  end;
end;

procedure XLExp_DrowBorder(Region: RXLExp_Region; Brd: CXLExp_BorderStyle);
// Процедура обводит указанный район листа рамкой заданного типа
begin
 with XLExp_Sheet.Range[XLExp_Col[Region.ColLeft]+IntToStr(Region.RowTop),
                   XLExp_Col[Region.ColRight]+IntToStr(Region.RowBottom)].Borders do
   begin
    LineStyle := xlContinuous;
    case Brd of
      ebsThin: Weight := xlThin;
      ebsMedium: Weight := xlMedium;
      ebsThick: Weight := xlThick;
    end;
   end;
end;

function XLExp_SetDataInCell(Index1,Index2: OleVariant; Data: string): string;
// Записывает заданный текст в указанную ячейку
begin
 XLExp_Report.ActiveWorkbook;     // Активировать текущую книгу
 // Лист книги, в котором править ячейку
 XLExp_Sheet := XLExp_Workbook.Worksheets.Item[1] as Excel2000.ExcelWorkSheet;
 // Присвоение ячейке заданного значения
 XLExp_Sheet.Cells.Item[Index1,Index2].Value := Data;
end;


 
msguns ©   (2005-09-14 15:13) [6]

Окончание

procedure XLExp_DataSetExport(Range: OleVariant; DataSet: TDataSet);
// Експорт данных из датасета в Excel-лист
// Область листа (Range) задается параметром Range
// Range задает область листа (непрерывная последовательность ячеек листа)
//  начиная с которой будет итти заполнение из НД. При этом самой левой колонкой
//  может любая колонка листа, а строкой - любая строка листа.
// Ячейки этой "линии" колонок должны содержать имена полей НД, данные которых
//  будут помещаться в эти колонки
var
 RangeLen,Column,Row,lich,i,x: integer;
 ValueArray: OleVariant;
 Str: string;
 FieldArray: array [0..20] of string;
 bm: TBookmark;

begin
 // Строка начала района
 Row:=XLExp_Sheet.Range[Range,EmptyParam].Row;
 // Колонка начала района (левая крайняя)
 Column:=XLExp_Sheet.Range[Range,EmptyParam].Column;
 // Колонка конца района (правая крайняя)
 RangeLen:=Column+(XLExp_Sheet.Range[Range,EmptyParam].Columns.Count-1);
 // Переписать в массив FieldArray содержимое ячеек 1-й строки указанной области
 // листа Excel (имена полей датасета).
 // Предполагается, что их не должно быть более 21
 x := 0;
 for i := Column to RangeLen do
  begin
   Str := XLExp_Sheet.Cells.Item[Row,i].Formula;  // Содержимое ячейки
   Delete(Str,1,1);         // Обрезаем первый (служебный) символ
   FieldArray[x] := Str;
   x := x+1;
  end;
 // Создать дин.массив размерностью RxC, где R - кол-во строк датасета,
 // а C - кол-во колонок, заданное Range
 ValueArray := VarArrayCreate([0,DataSet.RecordCount-1,0,XLExp_Sheet.Range[Range,EmptyParam].Columns.Count],varVariant);
 lich := 0;    // Индекс строки НД
 // Подготовка датасета к сканированию
 with DataSet do
   begin
    bm := GetBookmark;     // Запомнить текущую запись
    DisableControls;
    First;
    while not Eof do
      begin
       for i := 0 to XLExp_Sheet.Range[Range,EmptyParam].Columns.Count do
         // Для каждой колонки Region определяется имя поля НД и значение
         //  этого поля записывается в дин.массив по адресу=индексу колонки
         begin
          if (FieldArray[i]<>"") then  // Колонка имеет ссылку на имя поля ?
              ValueArray[lich,i] := FieldByName(FieldArray[i]).AsString
          else
              ValueArray[lich,i] := "";
          end;
          lich := lich+1;
          Next;
      end;
    EnableControls;
    GotoBookmark(bm);   // Вернуться в исходную (до сканирования) запись
    FreeBookmark(bm);
   end;
{  Выражение :
   xlSheet.Range[Col[Column]+IntToStr(Row),Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)]
  представляет "экселовскую" адресацию типа "A10","H17", где буква - индекс колонки, а
  число-индекс строки на листе Excel.
   В нативном виде (в самом Excel`е) этот регион будет = "A10:H17"
}
 // Перегнать в лист Excel (Ragion) значения из массива ValueArray
 XLExp_Sheet.Range[XLExp_Col[Column]+IntToStr(Row),XLExp_Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)].Value := ValueArray;
 // Присвоить всем ячейкам региона Region цвет символов как у левой верхней ячейки
 XLExp_Sheet.Range[XLExp_Col[Column]+IntToStr(Row),XLExp_Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)].Font.Color := XLExp_Sheet.Range[Range,EmptyParam].Font.Color;
 // Присвоить всем ячейкам региона Region цвет как у левой верхней ячейки
 XLExp_Sheet.Range[XLExp_Col[Column]+IntToStr(Row),XLExp_Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)].Interior.Colo r := XLExp_Sheet.Range[Range,EmptyParam].Interior.Color;
 // Присвоить всем ячейкам региона Region рамки как у левой верхней ячейки
 XLExp_Sheet.Range[XLExp_Col[Column]+IntToStr(Row),XLExp_Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)].Borders.LineS tyle := XLExp_Sheet.Range[Range,EmptyParam].Borders.LineStyle;
end;

function XLExp_ShowReport: boolean;
// Показать лист Excel`а для правки, сохранения и печати
begin
 result := false;
 if Assigned (XLExp_Report) then
   begin
    XLExp_Report.WindowState[0] := Excel2000.xlMaximized;
    XLExp_Report.Visible[0] := true;
    XLExp_Report.ScreenUpdating[0] := true;
    result := true;
   end;
end;

function XLExp_GetLastRow(Range: OleVariant; DataSet: TDataSet): integer;
// Возвращает индекс следующей за последней строкой (Row) листа,
// занятой (или которая будет занята после заливки данных из НД) данными.
// Начиная с этой строки можно располагать итоги или подвал документа
begin
 XLExp_GetLastRow:=XLExp_Sheet.Range[Range,EmptyParam].Row+DataSet.RecordCount;
end;

end.


 
msguns ©   (2005-09-14 15:15) [7]

А это процедура вывода в эксель из грида "как видно"

// Содержит процедуры автовывода отображаемого в DBGrid` НД
//  в книгу Excel
unit XLRepGrid;

interface

uses
 Windows, Messages, SysUtils, Classes, ComObj, Excel2000, OleServer,
 DB, DBGrids, Variants, XLReps, Graphics;

procedure XLRep_ExportFromDBGrid(Grid: TDBGrid; RepCaption: string);

implementation

procedure XLRep_ExportFromDBGrid(Grid: TDBGrid; RepCaption: string);
// Выводятся только колонки с Visible=true и Field.Tag>0 (последнее для
// блокировки вывода "фантомных" колонок, где отображается не поле
// датасета, а, например, картинка
type
 // Описатель печатной колонки
 TXLRep_GridCol = ^RXLRep_GridCol;
 RXLRep_GridCol = record
   Title: string;
   FldName: string;
   FldNdx: Shortint;
   Width: integer;
   AgrSum: extended;
   AgrFlg: boolean;
   Alignment: TAlignment;
   Font: RXLExp_Font;
 end;

var
 i,r: integer;
 bm: TBookMark;
 GridRep: TList;
 pc: TXLRep_GridCol;
 rg: RXLExp_Region;
 cs: RXLExp_CellsProp;
 VA: OleVariant;

begin
 GridRep := TList.Create;
 // Анализ грида и связанного с ним датасета
 for i := 0 to Grid.Columns.Count-1 do
   if Grid.Columns[i].Visible and (Grid.Columns[i].Field.Tag>0) then
     begin
      NEW(pc);
      pc.Title := Grid.Columns[i].Title.Caption;
      pc.FldName := Grid.Columns[i].FieldName;
      pc.FldNdx := Grid.Columns[i].Field.Index;
      pc.Width := Grid.Columns[i].Width;
      pc.AgrSum := 0;
      pc.AgrFlg := (Grid.Columns[i].Field.Tag>1);
      pc.Alignment := Grid.Columns[i].Alignment;
      with pc.Font do
        begin
         Size := Grid.Columns[i].Font.Size;
         Name := Grid.Columns[i].Font.Name;
         Style := Grid.Columns[i].Font.Style;
        end;
      GridRep.Add(pc);
     end;
 // Подконнектиться к Экселю с открытием новой книги
 XLExp_OpenReport("");
 // Определяем ширину колонок в Excel как ширина колонки грида в пикселах,
 //  деленная на 8 (Эксель "меряет" ширину в кол-ве условных символов цифр
 //  фонта по умолчанию (Arrial Cyr, обычный, 10)
 for i := 0 to GridRep.Count-1 do
    XLExp_SetColumnWidth(i+1,TXLRep_GridCol(GridRep[i])^.Width div 8);
 // ************************  ЗАГОЛОВОК ОТЧЕТА ***************************
 with rg do
   begin
    ColLeft := 1; ColRight := GridRep.Count;    // Ширина на все колонки
    RowTop := 1; RowBottom := 1;                // 1-я строка листа под заголовок
    JoinCells := true;                          // Объединить ячейки
    Text := RepCaption;                         // Текст заголовка
   end;
 with cs do
   begin
    Align.Hor := ehaCenter; Align.Vert := evaMultiLine;  // Центровка по высоте и ширине
    Font.Size := 13; Font.Style := [fsBold,fsItalic]; // Шрифт крупный, жирный, наклонный
    Font.Color := clWindowText;                 // Черный цвет символов
    Color := clWhite;                           // Белый фон
    Width := -1;                                // Ширину колонок не менять
    Height := 42;                               // Высота строки двойная
   end;
 XLEXP_SetCellsProp(rg,cs);                     // Разметка ячеек и занесение текста
 // ************************  ШАПКА ТАБЛИЦЫ ***************************
 // Вторую строку отводим под шапку таблицы, размечаем ячейки под
 // названия колонок
 // и помещаем туда название колонок из титула грида.
 with rg do
   begin
    RowTop := 2; RowBottom := 2;                // Вторая строка листа под шапку
    JoinCells := false; Text := "";             // Ячейки не объединять и не заполнять
   end;
 with cs do
   begin
    Align.Hor := ehaCenter; Align.Vert := evaMultiLine;  // Выравнивать по центру и с переносом слов
    Font.Size := 10; Font.Style := [fsBold];    // Шрифт чуть крупнее обычного и жирный
    Height := 28;                               // Высота строки двойная
   // Color := clSilver;                          // Серый фон шапки
   end;
 XLEXP_SetCellsProp(rg,cs);                     // Разметка ячеек
 XLExp_DrowBorder(rg,ebsMedium);                // Нанесение сетки


 
msguns ©   (2005-09-14 15:16) [8]

Окончание

// Занесение заголовков в шапку
 for i := 0 to GridRep.Count-1 do
    XLExp_SetDataInCell(rg.RowTop,i+1,TXLRep_GridCol(GridRep[i])^.Title);
 // *********** СОЗДАНИЕ МАССИВА И ЗАПОЛНЕНИЕ ЕГО ДАННЫМИ ДАТАСЕТА ************
 with Grid.DataSource.DataSet do
   begin
    bm := GetBookmark;         // Запомнить текущую запись
    DisableControls;           // Запрет отображения
    Last; First;               // Извлечь все записи с сервера
    r := 0;
    // Создать пустой массив вариантов
    VA := VarArrayCreate([0,RecordCount-1,0,GridRep.Count],varVariant);
    while not eof do
      begin
       inc(r);
       for i := 0 to GridRep.Count-1 do
         begin
          pc := TXLRep_GridCol(GridRep[i]);
          VA[RecNo-1,i] := FieldByName(pc.FldName).AsString;
          if pc.AgrFlg then pc.AgrSum := pc.AgrSum +FieldByName(pc.FldName).AsFloat;
         end;
       Next;
      end;
    GotoBookmark(bm);          // Вернуться в исходную запись
    FreeBookmark(bm);
    EnableControls;            // Разрешение отображения
   end;
 // Выставить свойства колонок таблицы аналогично колонкам грида
 for i :=0 to GridRep.Count-1 do
   begin
    with rg do
      begin
       ColLeft := i+1; ColRight := ColLeft;
       RowTop := 3; RowBottom := RowTop+r-1;
       JoinCells := false; Text := "";
      end;
    with cs do
      begin
       Font := TXLRep_GridCol(GridRep[i])^.Font;
       Font.Color := clWindowText;
       case TXLRep_GridCol(GridRep[i])^.Alignment of
         taLeftJustify: Align.Hor := ehaLeft;
         taRightJustify: Align.Hor := ehaRight;
         taCenter: Align.Hor := ehaCenter;
       end;
       Height := 13;
      end;
    XLEXP_SetCellsProp(rg,cs);
   end;
 with rg do
   begin
    ColLeft := 1; ColRight := GridRep.Count;
    RowTop := 3; RowBottom := RowTop+r-1;
   end;
 XLExp_DrowBorder(rg,ebsThin);     // Покрыть таблицу сеткой
 // Заполнение ячеек данными массива
 XLExp_Sheet.Range[XLExp_Col[rg.ColLeft]+IntToStr(rg.RowTop),
    XLExp_Col[rg.ColRight]+IntToStr(rg.RowBottom)].Value := VA;
 VarArrayRedim(VA,0);   // Убить массив
 // Создать массив итогов
 VA := VarArrayCreate([0,GridRep.Count-1],varVariant);
 // Записать в него итоги по колонкам
 for i := 0 to GridRep.Count-1 do
   if TXLRep_GridCol(GridRep[i])^.AgrFlg then
     VA[i] := FloatToStr(TXLRep_GridCol(GridRep[i])^.AgrSum)
   else
     VA[i] := "";
 // Разметить строку для итогов
 with rg do       // Выделяем строку, через одну от последней табличной.
   begin
    ColLeft := 1; ColRight := GridRep.Count;
    RowBottom := RowTop+r+1; RowTop := RowBottom;
   end;
 // Устанавливаем свойства ячеек, аналогично табличным колонкам
 XLEXP_SetCellsProp(rg,cs);
 // Заполнение ячеек итогов данными массива
 XLExp_Sheet.Range[XLExp_Col[rg.ColLeft]+IntToStr(rg.RowTop),
    XLExp_Col[rg.ColRight]+IntToStr(rg.RowBottom)].Value := VA;
 VarArrayRedim(VA,0);   // Убить массив
 // Вывестти отчет на просмотр
 XLExp_ShowReport;
end;

end.


 
erika ©   (2005-09-14 15:17) [9]

тип  переменой
ex: variant;
ex := CreateOleObject("Excel.Application");
ex.Workbooks.Open("c:\LadySp\podkl.xlt", readonly := true);
ex.Visible := false;
table.first;
while not table.eof do begin
  ex.cells[row, column] := table.field1;
  table.next;
end;
ex.Visible := true;
ex := Unassigned;
но  это  в  delphi срабатыват при подключении  библиотеки ComObj, может это тебя на какие - то мысли  наведет
Paradox давно не пользовала


 
Андрей Жук ©   (2005-09-14 15:18) [10]

А почему
XLExp_Col: array [1..26] of string=("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
?
У меня

const ExcelCols: array[1..256] of string[2] = (
   "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
   "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO", "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY", "AZ",
   "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BK", "BL", "BM", "BN", "BO", "BP", "BQ", "BR", "BS", "BT", "BU", "BV", "BW", "BX", "BY", "BZ",
   "CA", "CB", "CC", "CD", "CE", "CF", "CG", "CH", "CI", "CJ", "CK", "CL", "CM", "CN", "CO", "CP", "CQ", "CR", "CS", "CT", "CU", "CV", "CW", "CX", "CY", "CZ",
   "DA", "DB", "DC", "DD", "DE", "DF", "DG", "DH", "DI", "DJ", "DK", "DL", "DM", "DN", "DO", "DP", "DQ", "DR", "DS", "DT", "DU", "DV", "DW", "DX", "DY", "DZ",
   "EA", "EB", "EC", "ED", "EE", "EF", "EG", "EH", "EI", "EJ", "EK", "EL", "EM", "EN", "EO", "EP", "EQ", "ER", "ES", "ET", "EU", "EV", "EW", "EX", "EY", "EZ",
   "FA", "FB", "FC", "FD", "FE", "FF", "FG", "FH", "FI", "FJ", "FK", "FL", "FM", "FN", "FO", "FP", "FQ", "FR", "FS", "FT", "FU", "FV", "FW", "FX", "FY", "FZ",
   "GA", "GB", "GC", "GD", "GE", "GF", "GG", "GH", "GI", "GJ", "GK", "GL", "GM", "GN", "GO", "GP", "GQ", "GR", "GS", "GT", "GU", "GV", "GW", "GX", "GY", "GZ",
   "HA", "HB", "HC", "HD", "HE", "HF", "HG", "HH", "HI", "HJ", "HK", "HL", "HM", "HN", "HO", "HP", "HQ", "HR", "HS", "HT", "HU", "HV", "HW", "HX", "HY", "HZ",
   "IA", "IB", "IC", "ID", "IE", "IF", "IG", "IH", "II", "IJ", "IK", "IL", "IM", "IN", "IO", "IP", "IQ", "IR", "IS", "IT", "IU", "IV"
   );


 
erika ©   (2005-09-14 15:20) [11]


> msguns ©   (14.09.05 15:16) [8]

ни чего себе - весело


 
alex_***   (2005-09-14 15:22) [12]

не проще макрос в Excel написать, который будет сам закачивать из Paradox


 
Трушик ©   (2005-09-14 15:23) [13]

Большое спосибо, счас попробую.


 
msguns ©   (2005-09-14 15:24) [14]

>alex_***   (14.09.05 15:22) [12]

Речь идет о выгрузке не таблиці, а содержимого датасета, отображаемого в гриде.
А это, как говорят в Одессе, две большие разницы.


 
alex_***   (2005-09-14 15:25) [15]

речь шла об экспорте


 
Трушик ©   (2005-09-14 15:25) [16]

А макрос как в Excel писать?


 
Андрей Жук ©   (2005-09-14 15:25) [17]


> речь шла об экспорте

а ты предлагаешь импорт


 
alex_***   (2005-09-14 15:25) [18]

по кр. мере так формулировался вопрос первоначально


 
msguns ©   (2005-09-14 15:26) [19]

>Андрей Жук ©   (14.09.05 15:18) [10]

Я привел код, работающий в конкретном приложении не для сдирания один к одному, а для показа, как примерно надо делать. Код не претендует на универсальность, о чем в комментариях можно найти информацию


 
alex_***   (2005-09-14 15:27) [20]

я предлагаю макрос. Как его напишешь, в такую сторону и будет качаться. Если это не разовая работа, то лучше прогу на Дельфях, имхо


 
msguns ©   (2005-09-14 15:31) [21]

Если речь идет не о приложении, которое будет переносить данные из произвольной таблицы парадокс в ексель, а о разовой операции, то нафиг не нужна не только делфа, но и макросы. Тупо борландовским эксплорером запросом данные из таблицы парадокса переписываются в таблицу акцес, а оттуда в ексель (или вообще минуя акцес, правда сам не делал)


 
erika ©   (2005-09-14 15:33) [22]


> А макрос как в Excel писать?

VB знакомо ?

вместо table, можно указать dataset, от этого ничего не  изменится поверьте  проверено


 
alex_***   (2005-09-14 15:36) [23]

в дополнение к [21]: действительно выкинуть напр. в текст, и текст подсосать в ексель и не париться


 
Трушик ©   (2005-09-14 15:46) [24]

erika< Видає полулку, в чому може бути справа Undeclared identifier: "CreateOleObject"


 
msguns ©   (2005-09-14 15:47) [25]

>Трушик ©   (14.09.05 15:46) [24]

Нарушаем правила ?


 
Трушик ©   (2005-09-14 15:51) [26]

Извините не в курсе. Какие правила нарушаю...


 
ANB ©   (2005-09-14 15:52) [27]

Самый легкий способ - генеришь HTML табличку, файлу присваиваешь расширение XLS и открываешь экселем. Потом можно сохранить в родном формате.


 
msguns ©   (2005-09-14 15:56) [28]

>Трушик ©   (14.09.05 15:51) [26]
>Извините не в курсе. Какие правила нарушаю...

Рекомендации. Пункт 5.
http://www.delphimaster.ru/forums.shtml#rule



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.58 MB
Время: 0.037 c
1-1127422016
Volf_555
2005-09-23 00:46
2005.10.23
Строчный калькулятор


14-1128431430
nk
2005-10-04 17:10
2005.10.23
Запись CD посредством чего-либо...


8-1117423575
ksa3003
2005-05-30 07:26
2005.10.23
компанента pngimage143


1-1127985556
BaxTMaH
2005-09-29 13:19
2005.10.23
Как посчитать количество столбцов в DBGride?


1-1128091535
shamansky
2005-09-30 18:45
2005.10.23
RoseDelphiLink-3.2.20041014





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский