如何将DBGrid 中的数据导入到EXCEL中

如何将DBGrid 中的数据导入到EXCEL中

//--------------------------------------------------------------------------- 
// 将DBGrid中的数据导出到Word文档 
// v0.1 by ccrun(老妖) 2005.10.13 1:40 
//--------------------------------------------------------------------------- 
void __fastcall DBGrid2Word(TDBGrid *dbg, String strDocFile) 

if(!dbg->DataSource->DataSet->Active) // 数据集没有打开就返回 
return; 
Variant vWordApp, vTable, vCell; 
try 

vWordApp = Variant::CreateObject("Word.Application"); 

catch(...) 

MessageBox(0, "启动 Word 出错, 可能是没有安装Word.", 
"DBGrid2Word", MB_OK | MB_ICONERROR); 
vWordApp = Unassigned; 
return; 

// 隐藏Word界面 
vWordApp.OlePropertySet("Visible", false); 
// 新建一个文档 
vWordApp.OlePropertyGet("Documents").OleFunction("Add"); 
// 
Variant vSelect = vWordApp.OlePropertyGet("Selection"); 
// 设置一下字体,大小 
vSelect.OlePropertyGet("Font").OlePropertySet("Size", dbg->Font->Size); 
vSelect.OlePropertyGet("Font").OlePropertySet("Name", dbg->Font->Name.c_str()); 
// 要插入表格的行数 
int nRowCount(dbg->DataSource->DataSet->RecordCount + 1); 
nRowCount = nRowCount < 2? 2: nRowCount; 
// 要插入表格的列数 
int nColCount(dbg->Columns->Count); 
nColCount = nColCount < 1? 1: nColCount; 
// 在Word文档中插入与DBGrid行数列数基本相同的一个表格 
vWordApp.OlePropertyGet("ActiveDocument").OlePropertyGet("Tables") 
.OleProcedure("Add", 
vSelect.OlePropertyGet("Range"), 
nRowCount, // 行数 
nColCount, // 列数 
1, // DefaultTableBehavior:=wdWord9TableBehavior 
0); // AutoFitBehavior:=wdAutoFitFixed 
// 操作这个表格 
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); // wdPreferredWidthPoints 
vTable.OlePropertyGet("Columns").OleFunction("Item", i + 1) 
.OlePropertySet("PreferredWidth", nColWidth); 

//---------------------------------------------------------------------------- 
// 抱歉,这个提示又来了,为了防止不负责任的转载者,只好在此留些信息。 
// 作者:ccrun(老妖) info@ccrun.com 
// 本文转自 C++Builder 研究 - http://www.ccrun.com/article/go.asp?i=635&d=g75jbn 
//---------------------------------------------------------------------------- 
// 先将列名写入Word表格 
for(int j=0; j <dbg->Columns->Count; j++) 

vCell = vTable.OleFunction("Cell", 1, j + 1); 
vCell.OlePropertySet("Range", dbg->Columns->Items[j]->FieldName.c_str()); 
// 列名单元格背景颜色 // wdColorGray125 
vCell.OlePropertyGet("Shading") 
.OlePropertySet("BackgroundPatternColor", 14737632); 

// 将DBGrid中的数据写入Word表格 
dbg->DataSource->DataSet->First(); 
for(int i=0; i <nRowCount; i++) 

// 63 63 72 75 6E 2E 63 6F 6D 
for(int j=0; j <dbg->Columns->Count; j++) 

vCell = vTable.OleFunction("Cell", i + 2, j + 1); 
vCell.OlePropertySet("Range", 
dbg->DataSource->DataSet->FieldByName( 
dbg->Columns->Items[j]->FieldName)->AsString.c_str()); 

dbg->DataSource->DataSet->Next(); 

// 保存Word文档并退出 
vWordApp.OlePropertyGet("ActiveDocument") 
.OleProcedure("SaveAs", strDocFile.c_str()); 
vWordApp.OlePropertyGet("ActiveDocument").OleProcedure("Close"); 
Application->ProcessMessages(); 
vWordApp.OleProcedure("Quit"); 
Application->ProcessMessages(); 
vWordApp = Unassigned; 
// 工作结束 
MessageBox(0, "DBGrid2Word 转换结束!", 
"DBGrid2Word", MB_OK | MB_ICONINFORMATION); 

//--------------------------------------------------------------------------- 
// 将DBGrid中的数据导出到Excel文档 
// v0.1 by ccrun(老妖) 2005.10.13 1:55 
//--------------------------------------------------------------------------- 
void __fastcall DBGrid2Excel(TDBGrid *dbg, String strXlsFile) 

if(!dbg->DataSource->DataSet->Active) // 数据集没有打开就返回 
return; 
Variant vExcelApp, vSheet; 
try 

vExcelApp = Variant::CreateObject("Excel.Application"); 

catch(...) 

MessageBox(0, "启动 Excel 出错, 可能是没有安装Excel.", 
"DBGrid2Excel", MB_OK | MB_ICONERROR); 
return; 

// 隐藏Excel界面 
vExcelApp.OlePropertySet("Visible", false); 
// 新建一个工作表 
vExcelApp.OlePropertyGet("Workbooks").OleFunction("Add", 1); // 工作表 
// 操作这个工作表 
vSheet = vExcelApp.OlePropertyGet("ActiveWorkbook") 
.OlePropertyGet("Sheets", 1); 
// 设置Excel文档的字体 
vSheet.OleProcedure("Select"); 
vSheet.OlePropertyGet("Cells").OleProcedure("Select"); 
vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font") 
.OlePropertySet("Size", dbg->Font->Size); 
vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font") 
.OlePropertySet("Name", dbg->Font->Name.c_str()); 
vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font") 
.OlePropertySet("FontStyle", "常规"); 
vSheet.OlePropertyGet("Cells", 1, 1).OleProcedure("Select"); 
// 表格的行数 
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; 
vExcelApp.OlePropertyGet("Columns", i + 1) 
.OlePropertySet("ColumnWidth", nColWidth / 7); 

//---------------------------------------------------------------------------- 
// 抱歉,这个提示又来了,为了防止不负责任的转载者,只好在此留些信息。 
// 作者:ccrun(老妖) info@ccrun.com 
// 本文转自 C++Builder 研究 - http://www.ccrun.com/article/go.asp?i=635&d=g75jbn 
//---------------------------------------------------------------------------- 
// 先将列名写入Excel表格 
for(int j=0; j <dbg->Columns->Count; j++) 

// 标题行的行高 
vExcelApp.OlePropertyGet("Rows", 1).OlePropertySet("RowHeight", 20); 
// 
vSheet.OlePropertyGet("Cells", 1, j + 1) 
.OlePropertySet("Value", 
dbg->Columns->Items[j]->FieldName.c_str()); 
// 设置列名单元格的背景色 
Variant vInter = vSheet.OlePropertyGet( 
"Cells", 1, j + 1).OlePropertyGet("Interior"); 
vInter.OlePropertySet("ColorIndex", 15); // 灰色 
vInter.OlePropertySet("Pattern", 1); // xlSolid 
vInter.OlePropertySet("PatternColorIndex", -4105); // xlAutomatic 

// 将DBGrid中的数据写入Excel表格 
dbg->DataSource->DataSet->First(); 
for(int i=0; i <nRowCount; i++) 

// 普通数据行的行高16 
vExcelApp.OlePropertyGet("Rows", i + 2).OlePropertySet("RowHeight", 16); 
// 63 63 72 75 6E 2E 63 6F 6D 
for(int j=0; j <dbg->Columns->Count; j++) 

vSheet.OlePropertyGet("Cells", i + 2, j + 1) 
.OlePropertySet("Value", 
dbg->DataSource->DataSet->FieldByName( 
dbg->Columns->Items[j]->FieldName)->AsString.c_str()); 

dbg->DataSource->DataSet->Next(); 

// 保存Excel文档并退出 
vExcelApp.OlePropertyGet("ActiveWorkbook") 
.OleFunction("SaveAs", strXlsFile.c_str()); 
vExcelApp.OleFunction("Quit"); 
vSheet = Unassigned; 
vExcelApp = Unassigned; 
// 工作结束 
MessageBox(0, "DBGrid2Excel 转换结束!", 
"DBGrid2Excel", MB_OK | MB_ICONINFORMATION); 
void __fastcall TPhoneForm::SelectButtonClick(TObject *Sender) {   AnsiString StrDate, ExName;//存放日期用于sheet   AnsiString Datatem,phone1="拨号";//临时存放数据库的字段值   int i,j;   //查询所需的数据   PhoneADOQuery->Close();   PhoneADOQuery->Parameters->ParamByName("date1")->Value=PhoneMaskEdit1->Text;   PhoneADOQuery->Parameters->ParamByName("date2")->Value=PhoneMaskEdit2->Text;   PhoneADOQuery->Active=true;   //新建一个EXCEL   Ex = Variant::CreateObject("Excel.Application");   Ex.OlePropertyGet("workbooks").OleFunction("Add", 6);   Wb = Ex.OlePropertyGet("ActiveWorkBook");   Sh = Wb.OlePropertyGet("ActiveSheet");   Ex.OlePropertySet("Visible", true);   //给sheet以日期重命名,   StrDate=DateToStr(Date());   Sh.OlePropertySet("Name", StrDate.c_str());   //给EXCEL输入数据   for (j=0;jFieldCount;j++)   {      Datatem=PhoneADOQuery->Fields->Fields[j]->FieldName;      Sh.OlePropertyGet("Cells", 1, j+1).OlePropertySet("Value", Datatem.c_str());   }   PhoneADOQuery->First();   for (i=0; iRecordCount; i++)   {   for (j=0;jFieldCount;j++)   {      Datatem=PhoneADOQuery->Fields->Fields[j]->AsString;      Sh.OlePropertyGet("Cells", i+2, j+1).OlePropertySet("Value", Datatem.c_str());      if (phone1==PhoneADOQuery->Fields->Fields[j]->FieldName)     {Sh.OlePropertyGet("Cells", i+2, j+1).OlePropertySet("NumberFormatLocal", "0_ ");//设置单元格格式为数值格式 }   }   PhoneADOQuery->Next();   }   //保存EXCEL并退出   ExName=GetCurrentDir()+"\\"+DateToStr(Date())+".xls";   Wb.OleFunction("SaveAs", ExName.c_str());   Wb.OleFunction("Close");   Ex.OleFunction ("Quit");   Ex = Unassigned; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值