線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3248
推到 Plurk!
推到 Facebook!

SaveDialog如何寫StringGrid的存檔

答題得分者是:christie
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-05-14 14:03:10 IP:122.116.xxx.xxx 訂閱
各位大大你們好
小弟的StringGrid 列出來之後 該怎麼利用
SaveDialog如何寫StringGrid的存檔呢?

------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
max5020
資深會員


發表:30
回覆:277
積分:321
註冊:2003-06-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-05-14 14:42:35 IP:59.120.xxx.xxx 訂閱
SaveDialog只是提供一個檔案名稱,
至於StringGrid的內容,
則看您要如何儲存的檔案內容而定,

一般而言,
可以設定一個 StrList: TStrings;

StrList:= TStringList.Create;
StrList再用For Loop方式
陸續將每個ROW加入String,
最後再用StrList.SaveToFile的方法,
即可儲存檔案!

還原就用StrList.LoadFromFile,
再依序放回StringGrid.
christie
資深會員


發表:30
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-05-15 09:32:12 IP:59.125.xxx.xxx 未訂閱
How do I Save/Load a TStringGrid to/from a file?
Author: Thomas Stutz
[ Print tip ]

Tip Rating (6):


// Save a TStringGrid to a file

procedure SaveStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
var
f: TextFile;
i, k: Integer;
begin
AssignFile(f, FileName);
Rewrite(f);
with StringGrid do
begin
// Write number of Columns/Rows
Writeln(f, ColCount);
Writeln(f, RowCount);
// loop through cells
for i := 0 to ColCount - 1 do
for
k := 0 to RowCount - 1 do
Writeln(F, Cells[i, k]);
end;
CloseFile(F);
end;

// Load a TStringGrid from a file

procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
var
f: TextFile;
iTmp, i, k: Integer;
strTemp: String;
begin
AssignFile(f, FileName);
Reset(f);
with StringGrid do
begin
// Get number of columns
Readln(f, iTmp);
ColCount := iTmp;
// Get number of rows
Readln(f, iTmp);
RowCount := iTmp;
// loop through cells & fill in values
for i := 0 to ColCount - 1 do
for
k := 0 to RowCount - 1 do
begin
Readln(f, strTemp);
Cells[i, k] := strTemp;
end;
end;
CloseFile(f);
end;


// Save StringGrid1 to 'c:\temp.txt':

procedure TForm1.Button1Click(Sender: TObject);
begin
SaveStringGrid(StringGrid1, 'c:\temp.txt');
end;

// Load StringGrid1 from 'c:\temp.txt':

procedure TForm1.Button2Click(Sender: TObject);
begin
LoadStringGrid(StringGrid1, 'c:\temp.txt');
end;

參考http://www.swissdelphicenter.ch/torry/showcode.php?id=941



------
What do we live for if not to make life less difficult for each other?
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-05-15 16:35:24 IP:122.116.xxx.xxx 訂閱
To christie 大大

可以存檔了 可是有各疑問
存檔之後的檔案 裡面都只是一直往下列
我希望能儲存成EXECL 耶
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
max5020
資深會員


發表:30
回覆:277
積分:321
註冊:2003-06-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-05-15 16:54:55 IP:59.120.xxx.xxx 訂閱
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=22993
XLSFile.pas
提供了,
DataSet to Excel,
StringGrid to Excel
而且操作者端,
不需要安裝EXCEL,
應該更好用吧!!
編輯記錄
max5020 重新編輯於 2009-05-18 12:30:46, 註解 無‧
christie
資深會員


發表:30
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-05-16 08:00:23 IP:59.125.xxx.xxx 未訂閱
implementation
uses comobj;
...

function RefToCell(ARow, ACol: Integer): string;
begin
Result := Chr(Ord('A') ACol - 1) IntToStr(ARow)
end;
function SaveAsExcelFile(AGrid: TStringGrid; ASheetName, AFileName: string): Boolean;
const
xlWBATWorksheet = -4167;
var
Row, Col: Integer;
GridPrevFile: string;
XLApp, Sheet,
Data: OLEVariant;
i, j: Integer;
begin
// Prepare Data
Data := VarArrayCreate([1, AGrid.RowCount, 1, AGrid.ColCount], varVariant);
for i := 0 to AGrid.ColCount - 1 do
for j := 0 to AGrid.RowCount - 1 do
begin
//IF J=2 THEN
// Data[j 1, i 1] :='''' AGrid.Cells[i, j]
//ELSE
Data[j 1, i 1] := AGrid.Cells[i, j];
end;
// Create Excel-OLE Object
Result := False;
XLApp := CreateOleObject('Excel.Application');
try
// Hide Excel
XLApp.Visible := False;
// Add new Workbook
XLApp.Workbooks.Add(xlWBatWorkSheet);
Sheet := XLApp.Workbooks[1].WorkSheets[1];
Sheet.Name := ASheetName;
// Fill up the sheet
Sheet.Range[RefToCell(1, 1), RefToCell(AGrid.RowCount,
AGrid.ColCount)].Value := Data;
// Save Excel Worksheet
XLApp.Columns.AutoFit;
try
XLApp.Workbooks[1].SaveAs(AFileName);
Result := True;
except
// Error ?
end;
finally
// Quit Excel
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
XLAPP := Unassigned;
Sheet := Unassigned;
end;
end;
end;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
if SaveAsExcelFile(sG1, 'XLS_名單', 'c:\XLS-1.xls') then
ShowMessage('StringGrid1 saved!');
end;
===================引 用 lovemari 文 章===================
To christie 大大

可以存檔了 可是有各疑問
存檔之後的檔案 裡面都只是一直往下列
我希望能儲存成EXECL 耶
------
What do we live for if not to make life less difficult for each other?
編輯記錄
christie 重新編輯於 2009-05-19 12:40:22, 註解 無‧
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-05-19 10:42:39 IP:122.116.xxx.xxx 訂閱
Dear Christie 大大

他說這段有錯誤..
XLApp := CreateOleObject('Excel.Application');

是不是該下USES什麼或者TYPE ???
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
max5020
資深會員


發表:30
回覆:277
積分:321
註冊:2003-06-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-05-19 10:52:59 IP:59.120.xxx.xxx 訂閱
Uses Comobj;
===================引 用 lovemari 文 章===================
Dear Christie 大大

他說這段有錯誤..
XLApp := CreateOleObject('Excel.Application');

是不是該下USES什麼或者TYPE ???
christie
資深會員


發表:30
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-05-19 12:42:47 IP:59.125.xxx.xxx 未訂閱
Yes!

Uses Comobj;
------
What do we live for if not to make life less difficult for each other?
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-05-19 13:05:51 IP:122.116.xxx.xxx 訂閱
Thanks!!

已經可以了
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-05-20 13:06:43 IP:122.116.xxx.xxx 訂閱
想在請教

我想把存檔自動用日期當作檔名
然後改成下列 卻無法執行
是那裡有問題嗎??


[code delphi]
procedure TForm1.Button13Click(Sender: TObject);
begin
if SaveAsExcelFile(StringGrid1, 'SPC報表', 'C:\' DateTimeToStr(DateTimePicker.DateTime)) then
ShowMessage('存檔成功');
end;
[/code]
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
max5020
資深會員


發表:30
回覆:277
積分:321
註冊:2003-06-04

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-05-20 13:12:01 IP:59.120.xxx.xxx 訂閱

===================引 用 lovemari 文 章===================
想在請教

我想把存檔自動用日期當作檔名
然後改成下列 卻無法執行
是那裡有問題嗎??


[code delphi]
procedure TForm1.Button13Click(Sender: TObject);
begin
// if SaveAsExcelFile(StringGrid1, 'SPC報表', 'C:\' DateTimeToStr(DateTimePicker.DateTime)) then
if SaveAsExcelFile(StringGrid1, 'SPC報表', 'C:\' FormatDateTime('YYYYMMDD', DateTimePicker.Date) then // 改這樣試看看

ShowMessage('存檔成功');
end;
[/code]
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-05-20 13:21:30 IP:122.116.xxx.xxx 訂閱
感謝MAX 大大 

可以了
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
系統時間:2024-05-16 12:27:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!