Как экспортировать содержимое dbgrid в excel или clipboard
Как экспортировать содержимое dbgrid в excel или clipboard
Как экспортировать содержимое 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;