StringGridの中身をCSV形式で保存するには、保存の際に、ファイル拡張子を自動で「.csv」を付与するには?
こんにちは。
StringGridの中身をCSVデータとして保存したいのですが、
その際に、『自分の好きな名前』で『デスクトップ』に保存できるようにしたいと考えています。
ソース1では、CSV形式での保存は行えるのですが、
名前をつけるやり方とデスクトップの指定方法が分かりません。
opendialog,savedialogを使うと思うのですが、
上手く組み合わせることが出来ずに困っています。
ソース2では、理想どおりの結果を出力できるはずなんですが、
実行すると空の結果が出力されます。どこが間違っているか分からず、困り果てています。
・間違っている部分がどこか?
・保存する際に自動で端子に.csvを付与するにはどうすれば良いか?
アドバイス頂けると助かります。
宜しくお願いしします。
-----------ソース1:------------------------------------------
procedure TForm2.GridSaveCSV(SGrid:TStringGrid; fName: String);
var stList :TStringList;
ARow :Integer;
begin
stList:=TStringList.Create;
try
for ARow:=0 to SGrid.RowCount-1 do
stList.Add(SGrid.Rows[ARow].CommaText);
stList.SaveToFile(fName);
finally
stList.Free;
end;
end;
//CSVFileからStringGridへ読込み1
procedure TForm2.GridLoadCSV(SGrid:TStringGrid; fName:string);
var stList: TStringList;
ARow: Integer;
begin
stList:=TStringList.Create;
try
stList.LoadFromFile(fName);
SGrid.RowCount:= stList.Count;
for ARow:=0 to stList.Count-1 do
SGrid.Rows[ARow].CommaText:= stList[ARow];
finally
stList.Free;
end;
end;
procedure TForm2.Button3Click(Sender: TObject);
var
fName: String;
begin
fName := 'csvtest.csv';
GridSaveCSV(StringGrid1,fName);
end;
--------------------------------------------------------------
-----------ソース2:------------------------------------------
procedure TForm2.Button8Click(Sender: TObject);
var
F : TextFile;
Str : String;
CellA,CellB,CellC,CellD,CellE : String;
RowCNT : Integer;
begin
if not SaveDialog1.Execute then exit;
if FileExists(SaveDialog1.FileName) then
//↑ここのFileNameの使い方が良く分かりません><
//保存するときに、自動で.csvが付与されるようにしたいと思っています。
if Application.MessageBox('上書きしますか','注意',MB_YESNO ) = 7
then exit; //_
AssignFile(F,SaveDialog1.FileName);
Rewrite(F);
RowCNT := 0;
try
while not (StringGrid1.Cells[0,RowCnt] = '') do
begin
CellA := StringGrid1.Cells[0,RowCnt];
CellB := StringGrid1.Cells[1,RowCnt];
CellC := StringGrid1.Cells[2,RowCnt];
CellD := StringGrid1.Cells[3,RowCnt];
CellE := StringGrid1.Cells[4,RowCnt];
Str := Format('%s,%s,%s,%s,%s'[CellA,CellB,CellC,CellD,CellE]);
// ↑この辺りが怪しいと思っています。
WriteLn (F,Str);
Inc(RowCNT);
end;
finally CloseFile(F);
end;
end;
お礼
ありがとうございました おっしゃるとおりに Formのprivate函数にしたところ エラーが消えて,うまくいきました。 これでDelphiプログラムがかなり自由に組めそうですね。 本当に助かりました。 丁寧にお教え頂き深く感謝いたします。