DBGrid数据导出到Excel表格

原创 2004年10月25日 08:41:00
注意:要在头文件中加上 #include <Comobj.hpp>
//DBGrid数据导出到Excel表格
void __stdcall GridToExcel(TDBGrid *DBGridB,AnsiString titleB,AnsiString fileNameB)    
{ //要导出数据的DBGrid/导出到Excel中的标题/保存Excel的路径
  //判断文件是否存在,并决定是否删除
  if (FileExists(fileNameB))
  {
    if (MessageDlg("文件已经存在,是否删除?",
        mtWarning,TMsgDlgButtons()<<mbOK<<mbCancel,0)==mrOk)
    {
      DeleteFile(fileNameB);
    }
    else
    {
      ShowMessage("放弃操作");
      return;
    }
  }
  //导出到Excel开始
  Variant excelApp,workBook,aft,sheetA,range,bef;
  //检查机器是否安装了Office
  try{
    //打开excel应用程序
    excelApp = CreateOleObject("Excel.Application");
  }
  catch(...)
  {
    ShowMessage("运行Excel出错,请检查本机是否安装了Office!");
    return;
  }
  excelApp.OPS("Visible",true); //使应用程序可见
  //建立一个新的excel文件
  workBook = excelApp.OPG("WorkBooks").OFN("Add");
  workBook = excelApp.OPG("ActiveWorkBook");//打开工作簿
  //显示存在的sheet的数目
  int count = workBook.OPG("sheets").OPG("count");
  aft = workBook.OPG("sheets",count);
  //增加一个sheet
  workBook.OPG("sheets").OPR("Add",bef.NoParam(),aft);
  //当前sheet赋值给sheetA
  sheetA = workBook.OPG("ActiveSheet");
  //将sheet改名为表一
  sheetA.OPS("name","表一");
  //设置表一为横向页面打印,横向用"xlLandscape",纵向用"xlPortrait"
  sheetA.OPG("PageSetup").OPS("Orientation",2);
// 在Excel中设置的相应边距值,在BCB中写入时乘以28.5
   sheetA.OPG("PageSetup").OPS("LeftMargin", 1*28.5);    // 左边距1
   sheetA.OPG("PageSetup").OPS("RightMargin", 1 * 28.5);   // 右边距1
   sheetA.OPG("PageSetup").OPS("TopMargin", 2 * 28.5);     // 上边距2
   sheetA.OPG("PageSetup").OPS("BottomMargin", 2 * 28.5);  // 下边距2
   //设置打印时水平居中对齐
   sheetA.OPG("PageSetup").OPS("CenterHorizontally",true);
//表一的标题***************
  //合并单元格A1到M1,并将A1:M1区域赋值给range
  range = sheetA.OPG("Range","A1:M1");
  range.OFN("Merge",false);//合并用false,拆分用true
  //向单元格中填写内容
  sheetA.OPG("Cells",1,1).OPS("Value",titleB.c_str());
  //设置区域字体
  range.OPG("Cells").OPG("Font").OPS("Name","宋体");
  //设置区域字号大小
  range.OPG("Cells").OPG("Font").OPS("Size",18);
  //设置垂直对齐方式-居中
  range.OPG("Cells").OPS("VerticalAlignment",2);
  //设置水平对齐方式-居中
  range.OPG("Cells").OPS("HorizontalAlignment",3);
//表一的标题结束*************
//表一的表头****************
  for(int i=0;i<DBGridB->DataSource->DataSet->Fields->Count;i++)
  {
    String str = DBGridB->DataSource->DataSet->Fields->Fields[i]->DisplayLabel;
    //向单元格填写内容
    sheetA.OPG("Cells",2,i+1).OPS("Value",str.c_str());
    //设置边框
    sheetA.OPG("Cells",2,i+1).OPG("Borders",1).OPS("LineStyle",1);//左边框
    sheetA.OPG("Cells",2,i+1).OPG("Borders",2).OPS("LineStyle",1);//右边框
    sheetA.OPG("Cells",2,i+1).OPG("Borders",3).OPS("LineStyle",1);//上边框
    sheetA.OPG("Cells",2,i+1).OPG("Borders",4).OPS("LineStyle",1);//下边框
    sheetA.OPG("Cells",2,i+1).OPS("WrapText",true);//设置自动换行
    sheetA.OPG("Cells",2,i+1).OPS("HorizontalAlignment",3);//设置水平居中
  }
//表一的表头结束************
//表一的数据开始************
  DBGridB->DataSource->DataSet->First();
  for(int j=1;j<DBGridB->DataSource->DataSet->RecordCount+1;j++)
  {
    for(int i=0;i<DBGridB->DataSource->DataSet->Fields->Count-1;i++)
    {
      String strA = DBGridB->DataSource->DataSet->Fields->Fields[i]->Text;
      sheetA.OPG("Cells",j+4,i+1).OPS("Value",strA.c_str());
      sheetA.OPG("Cells",j+4,i+1).OPG("Borders",1).OPS("LineStyle",1);//左边框
      sheetA.OPG("Cells",j+4,i+1).OPG("Borders",2).OPS("LineStyle",1);//右边框
      sheetA.OPG("Cells",j+4,i+1).OPG("Borders",3).OPS("LineStyle",1);//上边框
      sheetA.OPG("Cells",j+4,i+1).OPG("Borders",4).OPS("LineStyle",1);//下边框
    }
    if (!DBGridB->DataSource->DataSet->Eof)
    {
      DBGridB->DataSource->DataSet->Next();
    }
  }     
//表一的数据结束***********
  //关闭警告提示
  workBook.OPG("Application").OPS("DisplayAlerts",false);
  //另存为
  workBook.OPR("SaveAs",fileNameB.c_str());
  //关闭工作簿
  workBook.OPR("Close");
  //关闭excel程序
  excelApp.OFN("Quit");
  //结束,如果没有如下代码,Excel线程直到应用程序退出才结束
  excelApp=Unassigned;
  workBook=Unassigned;
  aft=Unassigned;
  sheetA = Unassigned;
  range = Unassigned;
  ShowMessage(titleB+"导出成功!");
}
//写的不好,仅供参考
附:我参考的资料
http://www.ccrun.com/Doc/go.asp?id=529
http://www.ccrun.com/Doc/go.asp?id=543
说明:用户可以通过录制宏,查看宏代码,来获取自己所需要的操作

DBGrid数据导出到Excel表格中

//DBGrid数据导出到Excel表格void __fastcall TMDIChild::GridToExcel(TDataSet *DataSet,AnsiString titleB,int n...
  • cosio
  • cosio
  • 2005年06月30日 15:35
  • 1200

将DBGrid中的内容导出到Excel文档

//---------------------------------------------------------------------------// 将DBGrid中的内容导出到Word文档...
  • johnny_83
  • johnny_83
  • 2007年11月08日 16:37
  • 834

在delphi中,从dbgrid导出数据保存成excel文件

实验了,很好用function TForm1.ExportDBGrid(DBGrid: TDBGrid; SheetName: string): boolean;//直接保存,不显示EXCELvarc...
  • jyc1228
  • jyc1228
  • 2010年07月19日 14:23
  • 4243

c++builder 6.0 将DBGrid中的数据导出到Word和Excel

因为需求,所以自学了c++,没有人带着还是有点慢!遇到很多问题网上很难找到资料,幸好在这网站遇到好多热心人!! 我我也在网上找到了几个不错的资料,需要的朋友可以 去我的资源下载! 今天这代码是从网...
  • u014114857
  • u014114857
  • 2015年07月17日 10:58
  • 1233

Java将数据导出到excel表格中

Student.java import java.util.Date; public class Student {         private int id;         pr...
  • wy634379160
  • wy634379160
  • 2014年04月16日 16:06
  • 541

数据导出到excel表格

//导出excel格式表 function exportData($filename,$title,$data){     header("Content-type: application/vn...
  • birdfish123
  • birdfish123
  • 2017年01月04日 16:03
  • 101

把数据导出到Excel表格中的方式

导出数据到Excel表格中,总的来说可以分为两种方式: 1、​Java导出(有很多成熟的开源类库可供使用,在此讲述由Apache提供的Wookbook) 2、JSP导出​ 首先说说JSP导...
  • u011897392
  • u011897392
  • 2015年09月24日 18:50
  • 1329

操作 POI 从数据库导出数据到excel表格

这里先将要导出的数据封装到对象容器list中,得到usersif (users.size() > 0) { // 创建Excel的工作书册 Workbook,对应到一个exce...
  • xiarinanfeng123
  • xiarinanfeng123
  • 2017年01月18日 19:13
  • 896

PHP导出数据到Excel

PHP导出数据到Excel在Web开发中经常需要将一些数据导入到Excel表格中,比如需要导出符合条件的用户数据,导出项包括姓名、性别、身份证号、联系方式等等。那么问题来了,在导出的数据中如果出现比较...
  • u012162220
  • u012162220
  • 2015年03月21日 20:57
  • 811

Java实现指定数据表导出生成Excel

1. 前言: 在开发过程中往往少不了自动生成excel,比如学校教务系统,医疗系统,公司财务或者是公司员工的工资预览表都会使用。 2. 准备阶段: 1、Java开发环境 2、所需要...
  • Ink4T
  • Ink4T
  • 2017年08月13日 21:13
  • 67065
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DBGrid数据导出到Excel表格
举报原因:
原因补充:

(最多只允许输入30个字)