//DBGrid数据导出到Excel表格
void __fastcall TMDIChild::GridToExcel(TDataSet *DataSet,AnsiString titleB,int n) //int n指示最后n列不用处理
{ //要导出数据的DBGrid/导出到Excel中的标题
//导出到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赋值给sheetA
sheetA = workBook.OPG("ActiveSheet");
//表一的标题***************
//合并单元格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<DataSet->Fields->Count-n;i++)
{
String str = 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);//设置水平居中
}
//表一的表头结束************
//表一的数据开始************
DataSet->First();
for(int j=1;j<DataSet->RecordCount+1;j++)
{
for(int i=0;i<DataSet->Fields->Count-n;i++)
{
String strA = DataSet->Fields->Fields[i]->Text;
sheetA.OPG("Cells",j+2,i+1).OPS("Value",strA.c_str());
//加上下面的较慢
//sheetA.OPG("Cells",j+2,i+1).OPG("Borders",1).OPS("LineStyle",1);//左边框
//sheetA.OPG("Cells",j+2,i+1).OPG("Borders",2).OPS("LineStyle",1);//右边框
//sheetA.OPG("Cells",j+2,i+1).OPG("Borders",3).OPS("LineStyle",1);//上边框
//sheetA.OPG("Cells",j+2,i+1).OPG("Borders",4).OPS("LineStyle",1);//下边框
}
if (!DataSet->Eof)DataSet->Next();
}
//表一的数据结束***********
//结束,如果没有如下代码,Excel线程直到应用程序退出才结束
excelApp=Unassigned;
workBook=Unassigned;
aft=Unassigned;
sheetA = Unassigned;
range = Unassigned;
ShowMessage(titleB+"导出成功!");
}