Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2008, 17:22   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию сохранить

Вот код сохранения StringGrid в формате Excel:
#
procedure XlsWriteCellLabel(XlsStream: TStream; const ACol, ARow: Word;
const AValue: string);
var
L3: Word;
const
{$J+}
CXlsLabel3: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
{$J-}
begin
L3 := Length(AValue);
CXlsLabel3[1] := 8 + L3;
CXlsLabel3[2] := ARow;
CXlsLabel3[3] := ACol;
CXlsLabel3[5] := L3;
XlsStream.WriteBuffer(CXlsLabel3, SizeOf(CXlsLabel3));
XlsStream.WriteBuffer(Pointer(AValu e)^, L3);
end;


function SaveAsExcelFile(AGrid: TStringGrid; AFileName: string): Boolean;
const
{$J+} CXlsBof: array[0..5] of Word = ($809, 8, 00, $10, 0, 0); {$J-}
CXlsEof: array[0..1] of Word = ($0A, 00);
var
FStream3: TFileStream;
I3, J3: Integer;
begin
Result := False;
FStream3 := TFileStream.Create(PChar(AFileName) , fmCreate or fmOpenWrite);
try
CXlsBof[4] := 0;
FStream3.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
for i3 := 0 to AGrid.ColCount - 1 do
for j3 := 0 to AGrid.RowCount - 1 do
XlsWriteCellLabel(FStream3, I3, J3, AGrid.cells[i3, j3]);
FStream3.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
Result := True;
finally
FStream3.Free;
end;
end;


procedure TForm14.Excel1Click(Sender: TObject);
begin
if SaveAsExcelFile(SG3, 'c:\Таблица №3.xls') then
MessageBox(0,'Таблица сохранена в папке "Локальный диск С"!','Счетовод 2008 v.1.0',MB_ICONINFORMATION);
end;
Сохраняет все хорошо. Но у всех сохраняемых файлов одинаковое имя в коде. Поэтому, когда их сохраняешь снова и снова, то они затирают друг друга((. Вот я и думал как сделать через SaveDialog1 так, чтобы можно было указывать новое имя и указывать место где их сохранять. Пробовал в процедуре кнопки писать так:
#
begin
with SaveDialog1.Execute do
Form14.SG3.Assign(SaveDialog1);
end;
но не работает((. Какие у вас есть предложения как можно это сделать? Было бы очень хорошо, если бы удалось это сделать.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 31.07.2008, 17:52   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Код:
if SaveDialog1.Execute then
if SaveAsExcelFile(SG3, SaveDialog1.FileName) then
MessageBox(0,'Таблица сохранена в папке "Локальный диск С"!','Счетовод 2008 v.1.0',MB_ICONINFORMATION);
eoln вне форума Ответить с цитированием
Старый 31.07.2008, 18:05   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Спасибо большое!)) А как сделать чтобы при новом запуске моей программы, я мог импортировать данные из любой сохраненной таблицы, указав лишь ее имя?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 31.07.2008, 19:08   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А как сделать так, чтобы когда я сохранил таблицу, то потом мог снова ее же открыть для изменения данных? А то сейчас когда я открываю и вношу данные то она все удаляет, а мне так не надо!)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сохранить в MS Word? Apollo_13 Общие вопросы Delphi 4 10.11.2007 09:58
Сохранить базу *.mdb Moel БД в Delphi 2 26.10.2007 12:00
Как сохранить MP3 тег? Lika Мультимедиа в Delphi 1 24.09.2007 09:37
Сохранить как? InseR Общие вопросы Delphi 31 27.06.2007 16:18