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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2010, 18:32   #1
Nigadyai
Пользователь
 
Регистрация: 11.03.2010
Сообщений: 37
По умолчанию Перенос данных из DbGrid в Excel

Здравствуйте. В общем возникла небольшая проблема при переносе данных из DBGrid в Excel.
Что я делаю:
1) Создаю массив двумерный, куда переношу значения из ячеек DBGrid.
2) Выделяю Range в Excel, вставляю туда массив.
И получается ерунда какая-то. Вот сгенерированный файл экселя и внешний вид DBGrid: см. вложение.
Код:
procedure TAdminForm.Button4Click(Sender: TObject);
var
TCount,FCount:integer;
DatVal:Variant;
begin
....
MsExcel:=CreateOleObject('Excel.Application');
MsExcel.Workbooks.Add;
DataSource1.DataSet := ADOTable1;

//////////////////////////////////
///////////////////////// Malyarka
ADOTable1.Active:=False;
ADOTable1.TableName:='Malyarka';
ADOTable1.Active:=True;
//
TCount:=1;
FCount:=DBGrid1.Columns.Count+1;
......
// данные
NumRow:=DBGrid1.DataSource.DataSet.FieldCount;    // число рядов
NumCol:=DBGrid1.DataSource.DataSet.RecordCount;   // число полей
DatVal:=VarArrayCreate([1, NumCol, 1, NumRow], varVariant);
  for i:=1 to NumRow do begin
  DBGrid1.DataSource.DataSet.First;
    for j:=1 To NumCol do begin
      While DBGrid1.DataSource.DataSet.Eof<>True do begin
        if DBGrid1.DataSource.DataSet.Fields[i-1].Text='' then
        DatVal[j,i]:='0' else
        DatVal[j,i]:=DBGrid1.DataSource.DataSet.Fields[i-1].Text;
        DBGrid1.DataSource.DataSet.Next;
      end;
    end;
  end;
Cell1:=MsExcel.Cells[TCount,3];
Cell2:=MsExcel.Cells[TCount+NumRow-1,3+NumCol-1];
MsExcel.Range[Cell1,Cell2].Value:=DatVal;
//
MsExcel.Visible:=True;
end;
Где я тут накосячил?
Вложения
Тип файла: rar err.rar (49.0 Кб, 25 просмотров)
Nigadyai вне форума Ответить с цитированием
Старый 21.03.2010, 02:31   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Код:
Как экспортировать содержимое dbgrid в excel или clipboard

Пример dbgrid (dbgrid1) имеет всплывающее меню, которое позволяет две опции "send to excel" и "copy" 
// ЗАМЕЧАНИЕ: этот метод должен включать comobj, excel97 units 
// ОБНОВЛЕНИЕ: если Вы используете delphi 4, то замените xlwbatworksheet на 1 (один) 

//----------------------------------------------------------- 
// если toexcel = false, то экспортируем содержимое dbgrid в clipboard 
// если toexcel = true, то экспортируем содержимое dbgrid в microsoft excel 
procedure exportdbgrid(toexcel: boolean); 
var 
bm: tbookmark; 
col, row: integer; 
sline: string; 
mem: tmemo; 
excelapp: variant; 
begin 
screen.cursor := crhourglass; 
dbgrid1.datasource.dataset.disablecontrols; 
bm := dbgrid1.datasource.dataset.getbookmark; 
dbgrid1.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(self); 
mem.visible := false; 
mem.parent := mainform; 
mem.clear; 
sline := ''; 

// добавляем информацию для имён колонок 
for col := 0 to dbgrid1.fieldcount-1 do 
sline := sline + dbgrid1.fields[col].displaylabel + #9; 
mem.lines.add(sline); 

// получаем данные из memo 
for row := 0 to dbgrid1.datasource.dataset.recordcount-1 do 
begin 
sline := ''; 
for col := 0 to dbgrid1.fieldcount-1 do 
sline := sline + dbgrid1.fields[col].asstring + #9; 
mem.lines.add(sline); 
dbgrid1.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); 
dbgrid1.datasource.dataset.gotobookmark(bm); 
dbgrid1.datasource.dataset.freebookmark(bm); 
dbgrid1.datasource.dataset.enablecontrols; 
screen.cursor := crdefault; 
end;
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Excel - перенос данных в ячейках beerbitch Microsoft Office Excel 15 12.03.2010 17:33
Перенос данных в Excel barmy Microsoft Office Word 1 17.12.2009 09:09
перенос данных из DBGrid в DBGrid KingSize БД в Delphi 17 24.04.2009 09:30
Перенос данных из StringGrid-а в DBGrid artemavd БД в Delphi 16 21.03.2009 08:26
Перенос данных из Excel в Word Volch Microsoft Office Excel 6 19.10.2008 20:36