#pragma hdrstop
#include "Unit1.h"
#include "ComObj.hpp"
void __fastcall DBGrid2Excel(TDBGrid *dbg, String strXlsFile)
{
if ( !dbg->DataSource->DataSet->Active )
{
return ;
}
Variant ExcelApp,Workbook1,Sheet1;
int i=0,j=1;
try{
ExcelApp=Variant::CreateObject("Excel.Application");
Workbook1=ExcelApp.OlePropertyGet("ActiveWorkBook");
ExcelApp.OlePropertyGet("WorkBooks").OleFunction("Add");
Sheet1=ExcelApp.OlePropertyGet("ActiveSheet");
ExcelApp.OlePropertySet("Visible",false);
}
catch(...)
{
MessageDlg("无法启动Excel,可能尚未安装或文件已经损坏!",mtError,TMsgDlgButtons()<<mbYes,0);
return;
}
int nRowCount(dbg->DataSource->DataSet->RecordCount+1) ;
nRowCount=nRowCount<2? 2:nRowCount;
int nColCount(dbg->Columns->Count) ;
nColCount=nColCount<1? 1:nColCount;
for(int i=0; i<nColCount; i++)
{
int nColWidth = dbg->Columns->Items[i]->Width;
ExcelApp.OlePropertyGet("Columns", i + 1)
.OlePropertySet("ColumnWidth", nColWidth / 7);
}
for(j=0;j<dbg->Columns->Count;++j)
{
ExcelApp.OlePropertyGet("Rows", 1).OlePropertySet("RowHeight", 20);
Sheet1.OlePropertyGet("Cells",1,j+1).OlePropertySet("Value",WideString(dbg->Columns->Items[j]->Title->Caption ));
Variant vInter = Sheet1.OlePropertyGet(
"Cells", 1, j + 1).OlePropertyGet("Interior");
vInter.OlePropertySet("ColorIndex", 15);
vInter.OlePropertySet("Pattern", 1);
vInter.OlePropertySet("PatternColorIndex", -4105);
}
dbg->DataSource->DataSet->First() ;
for(int i=0; i<nRowCount-1; i++)
{
ExcelApp.OlePropertyGet("Rows", i + 2).OlePropertySet("RowHeight", 16);
for(int j=0; j<dbg->Columns->Count; j++)
{
Sheet1.OlePropertyGet("Cells", i + 2, j + 1).OlePropertySet("Value",WideString(dbg->DataSource->DataSet->FieldByName(dbg->Columns->Items[j]->FieldName)->AsString));
}
dbg->DataSource->DataSet->Next();
}
ExcelApp.OlePropertyGet("ActiveWorkbook")
.OleFunction("SaveAs", WideString(strXlsFile));
ExcelApp.OleFunction("Quit");
ExcelApp = Unassigned;
}
void __fastcall DBGrid3Excel(TDBGrid *dbg)
{
if ( !dbg->DataSource->DataSet->Active )
{
return ;
}
Variant ExcelApp,Workbook1,Sheet1;
int i=0,j=1;
try{
ExcelApp=Variant::CreateObject("Excel.Application");
Workbook1=ExcelApp.OlePropertyGet("ActiveWorkBook");
ExcelApp.OlePropertyGet("WorkBooks").OleFunction("Add");
Sheet1=ExcelApp.OlePropertyGet("ActiveSheet");
ExcelApp.OlePropertySet("Visible",true);
}
catch(...)
{
MessageDlg("无法启动Excel,可能尚未安装或文件已经损坏!",mtError,TMsgDlgButtons()<<mbYes,0);
return;
}
int nRowCount(dbg->DataSource->DataSet->RecordCount+1) ;
nRowCount=nRowCount<2? 2:nRowCount;
int nColCount(dbg->Columns->Count) ;
nColCount=nColCount<1? 1:nColCount;
for(int i=0; i<nColCount; i++)
{
int nColWidth = dbg->Columns->Items[i]->Width;
ExcelApp.OlePropertyGet("Columns", i + 1)
.OlePropertySet("ColumnWidth", nColWidth / 7);
}
for(j=0;j<dbg->Columns->Count;++j)
{
ExcelApp.OlePropertyGet("Rows", 1).OlePropertySet("RowHeight", 20);
Sheet1.OlePropertyGet("Cells",1,j+1).OlePropertySet("Value",WideString(dbg->Columns->Items[j]->FieldName));
Variant vInter = Sheet1.OlePropertyGet(
"Cells", 1, j + 1).OlePropertyGet("Interior");
vInter.OlePropertySet("ColorIndex", 15);
vInter.OlePropertySet("Pattern", 1);
vInter.OlePropertySet("PatternColorIndex", -4105);
}
dbg->DataSource->DataSet->First() ;
for(int i=0; i<nRowCount-1; i++)
{
ExcelApp.OlePropertyGet("Rows", i + 2).OlePropertySet("RowHeight", 16);
for(int j=0; j<dbg->Columns->Count; j++)
{
Sheet1.OlePropertyGet("Cells", i + 2, j + 1).OlePropertySet("Value",WideString(dbg->DataSource->DataSet->FieldByName(dbg->Columns->Items[j]->FieldName)->AsString));
}
dbg->DataSource->DataSet->Next();
}
Sheet1 = Unassigned;
ExcelApp = Unassigned;
}
void __fastcall DBGrid2Word(TDBGrid *dbg)
{
if(!dbg->DataSource->DataSet->Active)
return;
Variant vWordApp, vTable, vCell;
try
{
vWordApp = Variant::CreateObject("Word.Application");
}
catch(...)
{
MessageDlg("无法启动Word,可能尚未安装或文件已经损坏!",mtError,TMsgDlgButtons()<<mbYes,0);
vWordApp = Unassigned;
return;
}
vWordApp.OlePropertySet("Visible", true);
vWordApp.OlePropertyGet("Documents").OleFunction("Add");
Variant vSelect = vWordApp.OlePropertyGet("Selection");
vSelect.OlePropertyGet("Font").OlePropertySet("Size", dbg->Font->Size);
vSelect.OlePropertyGet("Font").OlePropertySet("Name", WideString(dbg->Font->Name));
int nRowCount(dbg->DataSource->DataSet->RecordCount + 1);
nRowCount = nRowCount < 2? 2: nRowCount;
int nColCount(dbg->Columns->Count);
nColCount = nColCount < 1? 1: nColCount;
vWordApp.OlePropertyGet("ActiveDocument").OlePropertyGet("Tables")
.OleProcedure("Add",
vSelect.OlePropertyGet("Range"),
nRowCount,
nColCount,
1,
0);
vTable = vWordApp.OlePropertyGet("ActiveDocument").
OleFunction("Range").OlePropertyGet("Tables").OleFunction("Item", 1);
for(int i=0; i<nColCount; i++)
{
int nColWidth = dbg->Columns->Items[i]->Width;
vTable.OlePropertyGet("Columns").OleFunction("Item", i + 1)
.OlePropertySet("PreferredWidthType", 3);
vTable.OlePropertyGet("Columns").OleFunction("Item", i + 1)
.OlePropertySet("PreferredWidth", nColWidth);
}
for(int j=0; j<dbg->Columns->Count; j++)
{
vCell = vTable.OleFunction("Cell", 1, j + 1);
vCell.OlePropertySet("Range", WideString(dbg->Columns->Items[j]->FieldName));
vCell.OlePropertyGet("Shading")
.OlePropertySet("BackgroundPatternColor", 14737632);
}
dbg->DataSource->DataSet->First();
for(int i=0; i<nRowCount; i++)
{
for(int j=0; j<dbg->Columns->Count; j++)
{
vCell = vTable.OleFunction("Cell", i + 2, j + 1);
vCell.OlePropertySet("Range", WideString(dbg->DataSource->DataSet->FieldByName(dbg->Columns->Items[j]->FieldName)->AsString));
}
dbg->DataSource->DataSet->Next();
}
Application->ProcessMessages();
vWordApp = Unassigned;
}