![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Никто не подскажет, почему при передаче в Excel я получаю
}|{yk © (2004-10-26 17:55:00)ошибку OLE?
function TMyDBGrid.SaveToXLS(FileName: TFileName; UseOnlyVisibleColumns: boolean = true): TFunctionResult;
var
XLSArray, XLSRow: Variant;
HighBound, IDX: integer;
book: TBookmark;
E: Exception;
FieldsList: TStringList;
Diapasone: string;
ExcelApp: TOpExcel;
begin
Result.Successful := False;
Result.MessageOnError := 'There is no data grid';
try
if Assigned(self) then
if Assigned(DataSource) then
if Assigned(DataSource.DataSet) then
begin
try
book := DataSource.DataSet.GetBookmark;
DataSource.DataSet.DisableControls;
if DataSource.DataSet.IsEmpty then
begin
Result.MessageOnError := 'Dataset is empty'
end
else
{а тут власне виведення даних до варіантного масиву}
begin
FieldsList := TStringList.Create;
for Idx := 0 to self.Columns.Count - 1 do
begin
if self.Columns[Idx].Visible or not UseOnlyVisibleColumns then
FieldsList.Add(self.Columns[Idx].FieldName);
end;
with self.DataSource.DataSet do
begin
Last; {щоб відфетчити всі записи}
XLSArray := VarArrayCreate([0, RecordCount - 1], varVariant);
First;
while not Eof do
begin
XLSRow := VarArrayCreate([0, FieldsList.Count - 1], varVariant);
for IDX := 0 to FieldsList.Count - 1 do
XLSRow[IDX] := FindField(FieldsList.Strings[Idx]).Value;
XLSArray[RecNo - 1] := XLSRow;
Next;
end;
Diapasone := GetCellDiapasoneName(1, FieldsList.Count, 1, RecordCount);
end;
Result.MessageOnError := 'Data retrived from dataset, but not inserted into Excel';
{тепер грузимо Excel та кидаємо в нього масив}
try
ExcelApp := TOpExcel.Create(self);
ExcelApp.Visible := false;
ExcelApp.Connected := true;
with ExcelApp.Workbooks.Add do
begin
with Worksheets.Add do
with Ranges.Add do
begin
Address := Diapasone;
Name := 'GRID_DATA';
Value := XLSArray;
end;
SaveAs(FileName);
end;
Result.Successful := true;
Result.MessageOnError := 'Succesfull transfered data';
finally
ExcelApp.Free;
end;
end;
finally
if Assigned(book) then
DataSource.DataSet.GotoBookmark(book);
DataSource.DataSet.EnableControls;
end;
end;
except on E: Exception do
begin
Result.MessageOnError := E.Message;
Exit;
end;
end;
end;
clickmaker (2004-10-26 18:20:00) [1]
> [1] VMcL © (26.10.04 17:58)
> >>}|{yk © (26.10.04 17:55)
>
> Строку, на которой возникает ошибка, и текст сообщения об
> ошибке нужно угадать?
Автор только не сказал, какой приз нам за это будет
VMcL (2004-10-26 17:58:00) [2]>> }|{yk © (26.10.04 17:55)
Строку, на которой возникает ошибка, и текст сообщения об ошибке нужно угадать?