zoukankan      html  css  js  c++  java
  • 将 DBGrid 中的内容输出至 Excel 或 ClipBoard

    //注意:下面的方法必须包含 ComObj, Excel97 单元
      //-----------------------------------------------------------
      // if toExcel = false, export dbgrid contents to the Clipboard
      // if toExcel = true, export dbgrid to 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;
     
        // create the Excel object
        if toExcel then
        begin
          ExcelApp := CreateOleObject('Excel.Application');
          ExcelApp.WorkBooks.Add(xlWBatWorkSheet);
          ExcelApp.WorkBooks[1].WorkSheets[1].Name := 'Grid Data';
        end;
     
        // First we send the data to a memo
        // works faster than doing it directly to Excel
        mem := TMemo.Create(Self);
        mem.Visible := false;
        mem.Parent := MainForm;
        mem.Clear;
        sline := '';
     
        // add the info for the column names
        for col := 0 to DBGrid1.FieldCount-1 do
          sline := sline + DBGrid1.Fields[col].DisplayLabel + #9;
        mem.Lines.Add(sline);
     
        // get the data into the 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;
     
        // we copy the data to the clipboard
        mem.SelectAll;
        mem.CopyToClipboard;
     
        // if needed, send it to Excel
        // if not, we already have it in the clipboard
        if toExcel then
        begin
          ExcelApp.Workbooks[1].WorkSheets['Grid Data'].Paste;
          ExcelApp.Visible := true;
        end;
     
        FreeAndNil(mem);
      //  FreeAndNil(ExcelApp);
        DBGrid1.DataSource.DataSet.GotoBookmark(bm);
        DBGrid1.DataSource.DataSet.FreeBookmark(bm);
        DBGrid1.DataSource.DataSet.EnableControls;
        Screen.Cursor := crDefault;
      end;  

  • 相关阅读:
    获取样式方法
    滚动条--滚动文字
    关于一些英文博客内容
    Don't performan heavy tasks in the MoBu Real-time engine thread, even if it worked before
    Autodesk 2014 M&E Devday is coming
    所有学生和老师的福音,欧特克将在全球免费开放软件给学生老师使用
    Autodesk 年度 AU 大会将在拉斯维加斯举行
    今天折腾了下NodeJs的调试
    如何解决 XMLHttpRequest 跨域请求的问题
    欧特克收购 ShotGun 产品
  • 原文地址:https://www.cnblogs.com/beeone/p/1792346.html
Copyright © 2011-2022 走看看