//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+"匯出成功!");
}