![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сохранить БД через SaveDialog в формате Word и Excel?
ev © (2004-04-09 14:18:00)Как сохранить БД через SaveDialog в формате Word и Excel?
Карелин Артем (2004-04-09 14:40:00) [1]Fay © (09.04.04 14:30) [9]
Такой вот я.
ev ©
Чтобы не быть жлобом, пишу свой код экспорта. Сохранить думаю найдешь как самостоятельно.
var Excel,WorkBook,Sheet,Area:variant;
i:integer;
begin
try
Excel := CreateOleObject('Excel.Application');
if Excel.WorkBooks.count=0 then WorkBook := Excel.WorkBooks.Add else WorkBook := Excel.WorkBooks[1];
if WorkBook.WorkSheets.count=0 then Sheet := WorkBook.WorkSheets.Add else Sheet := WorkBook.WorkSheets[1];
except
ShowMessage('Невозможно запустить MS Excel');
exit;
end;
i:=MainData.Grid2ExcelEx(Sheet,3,1,DBGridEh1,True);
Sheet.Cells.Columns.AutoFit;
Sheet.Cells[i+1,1].Value:='Всего';
Sheet.Cells[i+1,3].FormulaR1C1:='=SUM(R[-'+IntToStr(i-3)+']C:R[-1]C)';
Area:=Sheet.UsedRange;
Sheet.Cells[1,1].Value:=MainData.GetTitle1('');
Sheet.Cells[2,1].Value:=MainData.Get1DateTitle(Self.Caption,Now);
(DateEdit1.Date);
Area.Borders.LineStyle :=1;
Area.BorderAround(1,3);
Area.HorizontalAlignment:=-4131;
Sheet.UsedRange.NumberFormat:='@';
Excel.Visible:=true;
Excel.ScreenUpdating:=true;
Sheet:=Unassigned;
WorkBook:=Unassigned;
Excel:=Unassigned;
*****
function TMainData.Grid2Excel(const ExcelDoc: variant; const row,
col: integer;const Grid: TDBGridEh):integer;
var x,y:integer;
bm:TBookmark;
BeginCol, BeginRow, i, j : integer;
RowCount, ColCount : integer;
Cell1, Cell2,ArrayData:Variant;
begin
// if Grid.DataSource.DataSet.IsEmpty then exit;
Screen.Cursor:=crHourGlass;
Application.ProcessMessages;
y:=row;
Grid.DataSource.DataSet.DisableControls;
bm:=Grid.DataSource.DataSet.GetBookmark;
Grid.DataSource.DataSet.First;
for x:=0 to Grid.Columns.Count-1 do
begin
ExcelDoc.Cells[y,x+col].Value:=Grid.Columns[x].Title.Caption;
ExcelDoc.Cells[y,x+col].Font.Bold:=true;
end;
Grid.DataSource.DataSet.Last;
Grid.DataSource.DataSet.First;
RowCount:=Grid.DataSource.DataSet.RecordCount;
// if RowCount>16000 then RowCount:=16000;
ColCount:=Grid.Columns.Count;
ArrayData := VarArrayCreate([1, RowCount+1, 1, ColCount], varVariant);
i:=1;
while not(Grid.DataSource.DataSet.Eof or (Grid.DataSource.DataSet.RecNo>65000)) do
begin
for J := 1 to ColCount do
begin
// if not(Grid.Columns[j-1].Field.IsNull) then
ArrayData[I, J] := Grid.Columns[j-1].Field.Text;
end;
inc(i);
RowCount:=i;
Grid.DataSource.DataSet.Next;
end;
Cell1 := ExcelDoc.Cells[Row+1, Col];
// Правая нижняя ячейка области, в которую будем выводить данные
Cell2 := ExcelDoc.Cells[Row + RowCount-1, Col +ColCount - 1];
ExcelDoc.Range[Cell1, Cell2].NumberFormat:='0';
ExcelDoc.Range[Cell1, Cell2].Value := ArrayData;
Grid.DataSource.DataSet.GotoBookmark(bm);
Grid.DataSource.DataSet.FreeBookmark(bm);
Grid.DataSource.DataSet.EnableControls;
// ExcelDoc.UsedRange.NumberFormat:='@';
Screen.Cursor:=crDefault;
Result:=RowCount-1;
if Result<1 then Result:=1;
end;
Fay (2004-04-09 14:30:00) [2]2Карелин Артем ©
8)
Карелин Артем (2004-04-09 14:29:00) [3]http://go.mail.ru/?qs=1&lfilter=yes&words=Delphi+Excel+%FD%EA%F1%EF%EE%F0%F2&change=2
Fay (2004-04-09 14:29:00) [4]Я тебе свой модуль для Ёxcel-я закинул. Для Word-а под рукой нету.
bushmen (2004-04-09 14:27:00) [5]Создаешь OLEObject, который привязан к Excel или Word и, например, в цикле кидаешь туда значения.
ev (2004-04-09 14:27:00) [6]А можно ссылку?
Карелин Артем (2004-04-09 14:26:00) [7]Ну как. На тему экспорта полно статей написано. Экспортируешь и вызываешь методу SaveAs. А можешь на Torry поискать компонентры для экспорта.
ev (2004-04-09 14:24:00) [8]Сохранить выборку по SQL запросу.
Fay (2004-04-09 14:20:00) [9]В общем случае - никак. Уточни вопрос.
bushmen (2004-04-09 14:20:00) [10]Что значит "Сохранить БД" ? Сохранить выборку данных из БД или структуру?