![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Excel [D6, Win95/98, WinXP]
Alex870 © (2004-07-16 03:34:00)Здравствуйте уважаемые знатоки OLE!
У меня такая задача: нужно по нажатию кнопки "Save" сохранять таблицу TStringGrid в файл Excel, при нажатии этой кнопки вызывается SaveDialog и нужно, чтобы файл сохранился именно с тем именем, которое в этом диалоге будет введено, но чтобы сам Excel не появлялся.
Вот мой код, что нужно написать вместо вопросов? Зарание спасибо!
procedure TForm1.N10Click(Sender: TObject);
var
Shabl : String;
Ex : TExcelApplication;
ISheet: Excel2000._Worksheet;
IRange: Excel2000.Range;
NewValueArray: OLEVariant;
I,J,n: integer;
begin
Shabl := GetCurrentDir+'\Shablon.xls';
Sd.DefaultExt := '*.xls';
Sd.Filter := 'Файлы Excel|*.xls';
Sd.Title := 'Сохранение расчета в формате Excel';
if Sd.Execute then
begin
Ex := TExcelApplication.Create(Self);
Ex.Workbooks.Add(Shabl,0);
if Assigned(Ex) then
begin
try
ISheet := Ex.Worksheets.Item['Лист1'] as Excel2000.ExcelWorksheet;
IRange := ISheet.Range['EditRange', EmptyParam];
n := SData.ColCount-1;
if n > 3 then n := 3;
NewValueArray := VarArrayCreate([1,11,1,3], varVariant);
for i := 1 to n do
begin
for J := 1 to 4 do NewValueArray[j,i] := SData.Cells[i,j-1];
for J := 5 to 11 do NewValueArray[j,i] := ResData.Cells[i,j-4];
end;
IRange.Value := NewValueArray;
????????????????????????????????????????????????
finally
IRange := nil;
ISheet := nil;
Ex.Quit;
FreeAndNil(Ex);
end;
end;
end;
end;
Суслик (2004-07-16 19:44:00) [1]
> а потом убить Excel, чтобы он не выдал сообщение "Сохранить
> данные?"....
fApp := CreateOleObject('Excel.Application');
fApp.Visible := False;
fApp.Interactive := False;
fApp.DisplayAlerts := False;
fApp.ScreenUpdating := False;
Alex870 (2004-07-16 19:37:00) [2]Уважаемый SelloutS!
Я знаю как заполнить таблицу Excel, а потом её открыть, это видно из кода, а вот как сохранить этот Excel'евский файл не открывая его с определенным именем, т.е. не делая Ex.visible[0] := true; а потом убить Excel, чтобы он не выдал сообщение "Сохранить данные?"....
Digitman (2004-07-16 08:36:00) [3]
> Alex870
а не проще ли вместо StringGrid'а использовать непосредственно рабочий лист Excel'а как внедренный в Ole-контейнер документ и редактировать/сохранять данные прямо в Excel-документе ?
SelloutS (2004-07-16 07:18:00) [4]http://delphiworld.narod.ru/base/excel_data_exchange.html