Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
FMX excel kayıt
#1
iyi geceler beyler android için bir sayım proğramı yazdım StringGrid de liste halinde duruyor. bunu excel dosyasına yazdırmak istiyorum. comobj FMX mimarisinde çalışmıyor sanırım bununla ilgili bir örnekle karşılaşmadım. birkaç makale buldum fakat hiç tatmin edici birşeyler değildi. VCL de comobj çalışıyor lakin FMX mimarisinde çalışmam diyor. FMX de çalışan bir kod örneği varmı.
Cevapla
#2
https://doc.tmssoftware.com/grid-excel-b...guide.html

TMSnin bir çözümü var ... incelediniz mi?

Ayrıca cdata nında varmış..
https://www.cdata.com/drivers/excel/firedac/
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#3
(29-04-2023, Saat: 01:46)guvenlik Adlı Kullanıcıdan Alıntı: iyi geceler beyler android için bir sayım proğramı yazdım StringGrid de liste halinde duruyor. bunu excel dosyasına yazdırmak istiyorum. comobj FMX mimarisinde çalışmıyor sanırım bununla ilgili bir örnekle karşılaşmadım. birkaç makale buldum fakat hiç tatmin edici birşeyler değildi. VCL de comobj çalışıyor lakin FMX mimarisinde çalışmam diyor. FMX de çalışan bir kod örneği varmı.

Merhabalar,

Alternatif olarak CSV şeklinde kayıt edebilrsiniz.

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#4
Formatsız içerik yeterli ise CSV güzel bir çözümdür  

HTML rapor da üretmek alternatif olabilir.

Ek olarak eğer raporunuz çok komplex bir yapı değilse şunu bir deneyebilirsiniz.

1. Excel'de örnek bir şablon hazırlayın.
2. Bunu xlsx olarak kaydedin
3. WinRar ile bu dosyayı açıp içindeki klasörleri gözlemleyelim. Örnek veri girişiniz bir xml tablosu gibi diye hatırlıyorum. Bir ara çok sayıdaki xlsx içinden metin arama için incelemiştim.

4. Format, hücre adresleme vb. nasıl oluşmuş ona benzeri bir yapı üretip yeniden paketleyip excel ile açmayı deneyin.

Bu şekilde Excel XLSX dosyasını elle üretebilirsiniz belki. 

Bir çare denemeye değer. Hatta bir parser sınıf bile yazılabilir.

Bir de CSV mantığından yola çıkıp direkt XML formatlı hücreli tablo hazırlayıp Excel import olayı var bkz. bu Stackoverflow link

Github araması da yapın mutlaka birisi buna bir el atmıştır.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#5
Bir ara aşağıdaki kütüphaneyi fmx için derleyecek şekilde düzenledim ve Windows fmx de kullanmıştım. Mobil test etme fırsatım olmadı. Fakat Excel bağımlılığı yok

https://github.com/Avemey/zexmlss

Sürekli fmx excel işiniz varsa çözüm olabilir.
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla
#6
Hepinizden Allah razı olsun çok teşekkürler hepiniz ayrı ayrı önerilerde bulunmuşsunuz elleriniz dert görmesin. ben basit bir tablo

sırano barkod
1 123
2 456
3 123
şeklinde olacak mrmarman hocamın ki daha mantıklı bir iş gibi geldi bana bu konuda ufak bir örnek bulabilsem çok olayı daha iyi kavraya biliriz sanırım.

birde şöyle bir koda ulaştım vcl de çalışacaktır ama telefonda bir izin felan istiyor sanırım.

var
file_name : string;
a_file : TextFile;
begin
file_name := '/storage/emulated/0/Download/' + 'text_file.txt';

// open a file for writing
AssignFile (a_file, file_name);
ReWrite (a_file);

// write to a file
WriteLn (a_file, 'share a text file on a mobile device');

// close the file
CloseFile (a_file);

end;

I/O Error 13 hatası alıyorum.
Cevapla
#7
Selamlar,
Kodda hata yok, sanırım file_name için verilen Path yanlış. Path'i doğrudan yazmak yerine Delphi kütüphane değişkenlerini kullanırsanız bu tür hatalardan kaçınmış olursunuz.
Uses System.IOUtils ;
...
begin
  file_name := TPath.GetDownloadsPath;
 ...
end.
Cevapla
#8
Arkadaşlar hepinize teşekkür ederim sorunu çözdüm inşallah buarayada nasıl ve ne şikilde yaptığımı atacağım hatta dosyayı atacağım
Cevapla
#9
Buyrun arkadaşlar delphi 10.3 rio da çalışıyor. bir ilham olurdiye buraya iz bıraktım.


unit Unit1;

interface

uses
 {$if CompilerVersion = 33}
 // Delphi RIO
 System.Permissions,     // hata veren satır
 {$endif}
 FMX.DialogService,

 System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
 FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
 FMX.Controls.Presentation, FMX.Edit, System.Rtti, FMX.Grid.Style, FMX.Grid,
 FMX.ScrollBox, FMX.StdCtrls, FMX.Ani, FMX.Memo, REST.Backend.EMSServices,
 FireDAC.Stan.Intf, FireDAC.Comp.BatchMove, FireDAC.Comp.BatchMove.JSON,
 REST.Backend.EMSFireDAC, FireDAC.Stan.Option, FireDAC.Stan.Error,
 FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool,
 FireDAC.Stan.Async, FireDAC.Phys, FireDAC.FMXUI.Wait, Data.DB,
 FireDAC.Comp.Client, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,
 FireDAC.DApt, FireDAC.Comp.DataSet, Xml.xmldom, Xml.XMLIntf, Xml.XMLDoc;

type
 TForm1 = class(TForm)
   FloatAnimation1: TFloatAnimation;
   FloatKeyAnimation1: TFloatKeyAnimation;
   Panel1: TPanel;
   FloatAnimation2: TFloatAnimation;
   FloatAnimation3: TFloatAnimation;
   FloatKeyAnimation2: TFloatKeyAnimation;
   Panel2: TPanel;
   Edit1: TEdit;
   Panel3: TPanel;
   Button1: TButton;
   Panel4: TPanel;
   EKLE: TButton;
   Panel5: TPanel;
   Grid1: TStringGrid;
   StringColumn1: TStringColumn;
   StringColumn2: TStringColumn;
   StringColumn3: TStringColumn;
   procedure FormCreate(Sender: TObject);
   procedure Edit1KeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
     Shift: TShiftState);
   procedure Grid1SelectCell(Sender: TObject; const ACol, ARow: Integer;
     var CanSelect: Boolean);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
   okuma_izni:String;
   yazma_izni:String;

   Procedure Sonuc_Kontrol_et(Sender: TObject; Const APermissions:TArray<String>; Const AGrantResults: TArray<TPermissionStatus>);
   Procedure Izin_Gerekcesi(Sender: TObject; Const APermissions:TArray<String>; Const APostRationaleProc:TProc);

 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 row,col:Integer;
 fwit:Integer;


implementation

uses
  {$IFDEF ANDROID}
  Androidapi.Helpers,
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.Os,
  {$ENDIF} System.IOUtils;


{$R *.fmx}
{$R *.LgXhdpiPh.fmx ANDROID}
{$R *.Windows.fmx MSWINDOWS}
{$R *.NmXhdpiPh.fmx ANDROID}

function bugun():String;
var
 TarihZaman : TDateTime;
 simdi:String;
Begin
 TarihZaman:=Now;
 simdi:=DateTimeToStr(TarihZaman); // 15/03/2003 19:10:24 Yazar
 simdi:=StringReplace(simdi, '.', '', [rfReplaceAll, rfIgnoreCase]);
 simdi:=StringReplace(simdi, ' ', '', [rfReplaceAll, rfIgnoreCase]);
 simdi:=StringReplace(simdi, ':', '', [rfReplaceAll, rfIgnoreCase]);

 result:=simdi;

End;

procedure TForm1.Button1Click(Sender: TObject);
var
   file_name : string;
   a_file : TextFile;
   say : Integer;
   d,t:String;



begin

   file_name := TPath.GetSharedPicturesPath + '/'+bugun+'.csv';
   // open a file for writing
   AssignFile (a_file, file_name);
   ReWrite (a_file);

   // write to a file
   for Say := 0 to Grid1.RowCount do
   Begin
     if Grid1.Cells[2,Say]<>'' then
       WriteLn (a_file, Grid1.Cells[2,Say]+',1');
   End;
   // close the file
   CloseFile (a_file);
   Grid1.SelectCell(0,Grid1.RowCount);
   for Say := 0 to Grid1.RowCount do
   Begin
     if Grid1.Cells[2,Say]<>'' then
     Begin
       Grid1.Cells[0,row]:='';
       Grid1.Cells[1,row]:='';
       Grid1.Cells[2,row]:='';
     End;
   End;
   row:=0;
   Grid1.RowCount:=row;
   Grid1.SelectCell(0,row);
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
 Shift: TShiftState);
begin
   if key=vkReturn then
   begin

   Grid1.Cells[0,row]:=inttostr(row+1);
   Grid1.Cells[1,row]:='Sil';
   Grid1.Cells[2,row]:=Edit1.Text;
     row:=row+1;
   //showmessage(inttostr(row));
   Edit1.Text:='';
   Grid1.RowCount:=row+1;
   Grid1.SelectCell(0,row);


   end;
end;

procedure TForm1.FormCreate(Sender: TObject);

begin
 inherited;
 {$IF DEFINED(ANDROID)}
 okuma_izni:=JStringToString (TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE);
 yazma_izni:=JStringToString (TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE);
 {$ENDIF}

 {$IF DEFINED(ANDROID)}
 PermissionsService.RequestPermissions([okuma_izni,yazma_izni],Sonuc_Kontrol_et, Izin_Gerekcesi);

 {$ENDIF}

 fwit:=form1.Width;

//ShowMessage(inttostr(fwit));

 row:=0;
 Grid1.Columns[0].Width:= round(fwit*0.11);
 Grid1.Columns[1].Width:= round(fwit*0.28);
 grid1.Columns[2].Width:= round(fwit*0.50);


end;

procedure TForm1.Grid1SelectCell(Sender: TObject; const ACol, ARow: Integer;
 var CanSelect: Boolean);
begin
 if ACol=1 then
 Begin
   Grid1.Cells[0,ARow]:='';
   Grid1.Cells[1,ARow]:='';
   Grid1.Cells[2,ARow]:='';
 End;
end;

procedure TForm1.Izin_Gerekcesi(Sender: TObject; const APermissions: TArray<String>;
 const APostRationaleProc: TProc);
 Var
 I:Integer;
 KulMes:String;
begin
 for I := 0 to High(APermissions) do
 Begin
   if APermissions[I]=okuma_izni then
     KulMes:=KulMes+'Verileri Okumak ve Kaydetmek için dahili hafızaya erişim izni';

   if APermissions[I]=yazma_izni then
     KulMes:=KulMes+'Verileri Okumak ve Kaydetmek için dahili hafızaya erişim izni';

   TDialogService.ShowMessage(KulMes,
   Procedure(Const AResult:TModalResult)
   Begin
     APostRationaleProc;
   End
   );

 End;

end;

procedure TForm1.Sonuc_Kontrol_et(Sender: TObject; const APermissions: TArray<String>;
 const AGrantResults: TArray<TPermissionStatus>);
begin
  if (length(AGrantResults)=2) and
  (AGrantResults[0]= TPermissionStatus.Granted) and
  (AGrantResults[1]= TPermissionStatus.Granted) then
  begin

  end
  else
  Begin
   TDialogService.ShowMessage('işlem olmadı');
  End;

end;

end.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Android Rehbere Kayıt Ekleme barissagir 6 1.760 04-04-2024, Saat: 09:36
Son Yorum: RAD Coder
  Android de Rehberden kayıt silme barissagir 6 2.446 24-12-2022, Saat: 09:51
Son Yorum: barissagir
  Memtable filtreleme sonucundaki kayıt sayısı vedat33 2 956 18-11-2022, Saat: 10:03
Son Yorum: rmzgenius
  resim kayıt etme hk. sadoal351 2 1.076 06-10-2022, Saat: 09:23
Son Yorum: gonulali
  TListView kayıt yükleme hk. barutali 9 8.122 09-05-2022, Saat: 17:18
Son Yorum: theercan



Konuyu Okuyanlar: 1 Ziyaretçi