open office

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

open office

Mesaj gönderen Vital »

merhaba
d7 fb
soyle bir sorunla karsılastım grid i veya tabloyu excel e atarken sorun olmuyor fakat open office atmiyor.
cozumu ve sebebi nedir arkadslar


tskler
Garibanus
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: open office

Mesaj gönderen sabanakman »

Genelde Excel'e atma kodları sistemde yüklü excel programının kütüphanesini kullanmaktadır. Bunlar dışında bir aktarım yolu bulabilirsen sorun yaşamazsın. Oluşturduğun .xls dosyası Openoffice'te de açılacaktır.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Re: open office

Mesaj gönderen ikutluay »

Vital yazdı:merhaba
d7 fb
soyle bir sorunla karsılastım grid i veya tabloyu excel e atarken sorun olmuyor fakat open office atmiyor.
cozumu ve sebebi nedir arkadslar


tskler
akadaşım excele neyle atıyorsun. bunun bi ton yöntemi var. OLE mi, export mu, csv mi.. bunu yazarsan yada kodunu buraya atarasan bakalım. ama benim yaptığım şekilde çalışıor onu bilesin
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

Re: open office

Mesaj gönderen Vital »

office partnerin opexcel ve jv nin export to grid adlı bilesenleri ile table i veya dbgrid i excele gonderiyorum.
Garibanus
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: open office

Mesaj gönderen sabanakman »

office partner sistemde yüklü excel kütüphanesini kullanmaktadır. Bu yüzden bunu kullanabilmeniz için sistemde excel yüklü olması şart.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

Re: open office

Mesaj gönderen Vital »

excel olmadan office partnere gondermenin bir yolu yokmu arkadaslar kod ile vs component kullanmadan
tskler
Garibanus
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: open office

Mesaj gönderen sabanakman »

Office Partner'ı unut o zaman. Başka bir yöntemle aktar. Bir aralar kullandığım bir kod vardı onu aradım buldum. Bunu kullanarak xls dosyası çıkartabilirsin.

Kod: Tümünü seç

type
  TCellType = (ctBlank, ctInteger, ctDouble, ctLabel, ctBoolean);

  TExcelStream=class(TFileStream)
  private
    procedure WriteRecordHeader(RecType, Size: integer);
  public
    constructor Create(const FileName: string; const Mode,LineCount,ColCount: Word);overload;
    constructor Create(const FileName: string; const Mode: Word);overload;
    constructor Create(const FileName: string);overload;
    destructor Destroy; override;
    procedure WriteData(CellType: TCellType; ARow, ACol: Integer;Cell: string);overload;
    procedure WriteData(Field:TField; ARow, ACol: Integer);overload;
  end;

const
  BOF       = $0009;
  BIT_BIFF5 = $0800;
  BOF_BIFF5 = BOF or BIT_BIFF5;
  BIFF_EOF = $000a;
  DIMENSIONS = $0200;
  DOCTYPE_XLS = $0010;
  LEN_RECORDHEADER = 4;

{ TExcelStream }

function AlanStrlimi(const Alan:TField;const MemoisStr:Boolean=False):Boolean;
begin
  Result:=not ((Alan is TBlobField) or (Alan is TBinaryField) or (Alan is TObjectField));
  if MemoisStr then Result:=Result or (Alan is TMemoField);
end;

constructor TExcelStream.Create(const FileName: string; const Mode,LineCount, ColCount: Word);
var
  Buffer : array[0..4] of word;
begin
  inherited Create(FileName,fmCreate);
  Buffer[0] := 0;
  Buffer[1] := DOCTYPE_XLS;
  Buffer[2] := 0;
  WriteRecordHeader(BOF_BIFF5, 6);
  Write(Buffer, 6);
  Buffer[0] := 0;
  Buffer[1] := LineCount;
  Buffer[2] := 0;
  Buffer[3] := ColCount;
  Buffer[4] := 0;
  WriteRecordHeader(Dimensions, 10);
  Write(Buffer, 10);
end;

constructor TExcelStream.Create(const FileName: string; const Mode: Word);
begin
  Create(FileName,Mode,0,0);
end;

constructor TExcelStream.Create(const FileName: string);
begin
  Create(FileName,fmCreate,0,0);
end;

procedure TExcelStream.WriteRecordHeader(RecType, Size : integer);
var Buffer : array[0..1] of word;
begin
  Buffer[0] := RecType;
  Buffer[1] := Size;
  Write(Buffer, SizeOf(Buffer));
end;

procedure TExcelStream.WriteData(CellType : TCellType; ARow, ACol: Integer; Cell : string);
const
  Attribute: Array[0..2] Of Byte = (0, 0, 0); { 24 bit bitfield }
var
  Buffer : array[0..1] of word;
  RecType : word;
  Size : word;
  AString : ShortString;
  aInt: integer;
  aDbl: double;
  Data: Pointer;
begin
  Buffer[0] := ARow;
  Buffer[1] := ACol;
  AString := Cell;
  case CellType of
    ctInteger:begin
      RecType := 2;
      Size := 9;
      WriteRecordHeader(RecType, Size);
      Size := 2;
      aInt := StrToInt(Cell);
      Data := @aInt;
    end;
    ctDouble:begin
      RecType := 3;
      Size := 15;
      WriteRecordHeader(RecType, Size);
      Size := 8;
      aDbl := StrToFloat(Cell);
      Data := @aDbl;
    end;
    ctLabel:begin
      RecType := 4;
      Size := length(Cell) + 8;
      WriteRecordHeader(RecType, Size);
    end;
  else
    Exit;
  end;
  Write(Buffer, SizeOf(Buffer));
  Write(Attribute, SizeOf(Attribute));
  if CellType = ctLabel then Write(AString, Length(AString) + 1)
  else Write(Data^, Size);
end;

procedure TExcelStream.WriteData(Field: TField; ARow, ACol: Integer);
var CellType:TCellType;
begin
  if not Field.IsNull then begin
    if Field is TNumericField then begin
      if Field is TIntegerField then WriteData(ctInteger,ARow,ACol,Field.AsString)
      else WriteData(ctDouble,ARow,ACol,Field.AsString);
    end else if AlanStrlimi(Field) then WriteData(ctLabel,ARow,ACol,Field.AsString);
  end;
end;

destructor TExcelStream.Destroy;
begin
  WriteRecordHeader(BIFF_EOF, 0);
  inherited Destroy;
end;

function Baslik(const Alan:TField):String;
begin
  Result:=Alan.DisplayLabel;
  if Trim(Result)='' then Result:=Alan.FieldName;
end;

function DataSetToExcel_Direct2(const DataSet:TDataSet;const DosyaAdi:String;
  const KayitlariAktar:Boolean=True):Boolean;
var
  ExcelExporter:TExcelStream;
  i,Satir:Integer; BunlariAlma:set of Byte;//bu alanlar text e aktarılmazlar...
  KayitYeri:TBookmarkStr;
begin
  try
    Result:=False;
    KayitYeri:=DataSet.Bookmark;
    Result:=True;
    if KayitlariAktar then Satir:=1 else Satir:=0;
    ExcelExporter:=TExcelStream.Create(DosyaAdi);//,fmCreate,Satir+DataSet.RecordCount,DataSet.Fields.Count);
    with ExcelExporter do begin
      try
        DataSet.DisableControls;
        DataSet.First;
        BunlariAlma:=[];
        Satir:=0;
        for i:=0 to DataSet.FieldCount-1 do begin
          if not AlanStrlimi(DataSet.Fields[i]) then Include(BunlariAlma,i);
          if KayitlariAktar then WriteData(ctLabel,Satir,i,Baslik(DataSet.Fields[i]));
        end;
        while not DataSet.Eof do begin
          Inc(Satir);
          for i:=0 to DataSet.FieldCount-1 do
           if not (i in BunlariAlma) then WriteData(DataSet.Fields[i],Satir,i);
          DataSet.Next;
        end;
      except
        on E:Exception do begin
          ShowMessage(E.Message);
          Result:=False;
        end;
      end;
      Free;
    end;
  except
    Result:=False;
  end;
  DataSet.Bookmark:=KayitYeri;
  while DataSet.ControlsDisabled do DataSet.EnableControls;//DisableControls ise tekar açılır
end;
Kullanımı ise DataSetToExcel_Direct2(Table1,'c:\çıktı.xls');biçimindedir. Kolay gelsin.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

Re: open office

Mesaj gönderen Vital »

emegin icin tskler
Garibanus
Cevapla