Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DELPHI: Импорт .db-таблицы в .xls-файл / 5 сообщений из 5, страница 1 из 1
13.11.2003, 22:24
    #32323753
Becks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DELPHI: Импорт .db-таблицы в .xls-файл
День добрый.
Необходимо осуществлять программный импорт .db-таблицы в .xls-файл, при этом хотелось бы из приложения открывать этот файл в Excel'е, чтобы его можно было тутже преобразовать пересохранить и т.д. Подскажите как сделать, плз.
...
Рейтинг: 0 / 0
14.11.2003, 10:59
    #32324083
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DELPHI: Импорт .db-таблицы в .xls-файл
Компоненты посмотреть. Или в табделимитед самому.
EhLib-овский грид сам умеет это делать - в excel сохранять

-- Tygra's --
...
Рейтинг: 0 / 0
14.11.2003, 11:01
    #32324089
Rostyk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DELPHI: Импорт .db-таблицы в .xls-файл
...
Рейтинг: 0 / 0
14.11.2003, 11:02
    #32324095
viman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DELPHI: Импорт .db-таблицы в .xls-файл
где то на этом форуме пример давно был
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
procedure ExportDBGrid(toExcel: Boolean);
var
  bm: TBookmark;
  col, row: Integer;
  sline: String;
  mem: TMemo;
  ExcelApp: Variant;
begin
  Screen.Cursor := crHourglass;
  fodogovor.DBGrideh1.DataSource.DataSet.DisableControls;
  bm := fodogovor.DBGrideh1.DataSource.DataSet.GetBookmark;
  fodogovor.DBGrideh1.DataSource.DataSet.First;
  // создаём объект Excel
 if toExcel then
 begin
  ExcelApp := CreateOleObject('Excel.Application');
  ExcelApp.WorkBooks.Add(xlWBatWorkSheet);
  ExcelApp.WorkBooks[ 1 ].WorkSheets[ 1 ].Name := 'Grid Data';
 end;
  // Сперва отправляем данные в memo
// работает быстрее, чем отправлять их напрямую в Excel
  mem := TMemo.Create(mem);
  mem.Visible := false;
  mem.Parent := fodogovor;
  mem.Clear;
  sline := '';
// добавляем информацию для имён колонок
 for col :=  0  to fodogovor.DBGrideh1.FieldCount- 1  do
  sline := sline + fodogovor.DBGrideh1.Fields[col].DisplayLabel + # 9 ;
  mem.Lines.Add(sline);
// получаем данные из memo
 for row :=  0  to fodogovor.DBGrideh1.DataSource.DataSet.RecordCount- 1  do
 begin
  sline := '';
  for col :=  0  to fodogovor.DBGrideh1.FieldCount- 1  do
  sline := sline + fodogovor.DBGrideh1.Fields[col].AsString + # 9 ;
  mem.Lines.Add(sline);
  fodogovor.DBGrideh1.DataSource.DataSet.Next;
 end;
// копируем данные в clipboard
 mem.SelectAll;
 mem.CopyToClipboard;
// если необходимо, то отправляем их в Excel
// если нет, то они уже в буфере обмена
 if toExcel then
 begin
  ExcelApp.Workbooks[ 1 ].WorkSheets['Grid Data'].Paste;
  ExcelApp.Visible := true;
 end;
//FreeAndNil(ExcelApp);
 fodogovor.DBGrideh1.DataSource.DataSet.GotoBookmark(bm);
 fodogovor.DBGrideh1.DataSource.DataSet.FreeBookmark(bm);
 fodogovor.DBGrideh1.DataSource.DataSet.EnableControls;
 Screen.Cursor := crDefault;
end;




Viman
...
Рейтинг: 0 / 0
14.11.2003, 11:07
    #32324103
RDen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DELPHI: Импорт .db-таблицы в .xls-файл
procedure TForm4.SpeedButton1Click(Sender: TObject);//Передаём данные в Excel
var
ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData : Variant;
BeginCol, BeginRow, i, j : integer;

begin
if Application.MessageBox('Для выполнения данной операции'#10#13'необходимо наличие Microsoft Excel'#10#13'Продолжить?', 'Предупреждение',MB_OKCANCEL or MB_ICONWARNING)= IDOK then
begin
RecPos:=Form1.Table36.RecNo;//Запоминаем указатель
ProgressBar1.Max := Form1.Table36.RecordCount;
Form1.DataSource1.DataSet.DisableControls;

// Координаты левого верхнего угла области, в которую будем выводить данные
BeginCol := 1;
BeginRow := 1;

// Создание Excel
ExcelApp := CreateOleObject('Excel.Application');

// Отключаем реакцию Excel на события, чтобы ускорить вывод информации
ExcelApp.Application.EnableEvents := false;

// Создаем Книгу (Workbook)
// Если заполняем шаблон, то Workbook := ExcelApp.WorkBooks.Add('C:\MyTemplate.xls');
Workbook := ExcelApp.WorkBooks.Add;

// Создаем Вариантный Массив, который заполним выходными данными
ArrayData := VarArrayCreate([1, Form1.Table36.RecordCount, 1, Form1.Table36.FieldCount], varVariant);

Form1.Table36.First;
// Заполняем массив
for I := 1 to Form1.Table36.RecordCount do
begin
for J := 1 to Form1.Table36.FieldCount do
ArrayData[I, J] := Form1.Table36.Fields[j-1].AsString;
ProgressBar1.Position := Form1.Table36.RecNo;
Form1.Table36.Next;
end;


StaticText1.visible := True;
Form4.Refresh;
ProgressBar1.Position := 0;
// Левая верхняя ячейка области, в которую будем выводить данные
Cell1 := WorkBook.WorkSheets[1].Cells[BeginRow, BeginCol];
// Правая нижняя ячейка области, в которую будем выводить данные
Cell2 := WorkBook.WorkSheets[1].Cells[BeginRow + Form1.Table36.RecordCount - 1, BeginCol +
Form1.Table36.FieldCount - 1];

// Область, в которую будем выводить данные
Range := WorkBook.WorkSheets[1].Range[Cell1, Cell2];

// А вот и сам вывод данных
// Намного быстрее поячеечного присвоения
Range.Value := ArrayData;

// Делаем Excel видимым
ExcelApp.Visible := true;

//FreeAndNil(ExcelApp);
//FreeAndNil(ExcelApplication);
Form1.Table36.MoveBy(RecPos - Form1.Table36.RecNo);//Восстанавливаем указатель
Form1.DataSource1.DataSet.EnableControls;
StaticText1.visible := False;


end;
end;

выкинь лишнее
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DELPHI: Импорт .db-таблицы в .xls-файл / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]