谁有dbgrid导出到excel的快速方法?不用三方控件,不用ole,不用数据集导出的方法。 谁有dbgrid导出到excel的快速方法?三方控件,ole,直接用数据集导出以及用存储过程的方法我都有了。但有没有直接从dbgrid导出到excel的快速方法呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 字段值之间用Tab值,文件扩展名用.xls就可以了 我遇到了更奇怪的问题dbgrid导出到Excel最前面两个字段和最后面的两个字段之间没有间隔符号,是什么原因 直接用DBGRID 导出我认为速度是快不了的! 给你一个函数void __fastcall Tsearch::DBGridToExcel(TDBGrid *AGrid, AnsiString Title) //从DBGrid导出到Excel{ if(AGrid->DataSource->DataSet->IsEmpty()) { ShowMessage("没有数据需要导出"); } else { AGrid->DataSource->DataSet->DisableControls(); TBook bmkDataSet = AGrid->DataSource->DataSet->GetBook(); try { try { Variant vExcel = CreateOleObject("Excel.Application"); vExcel.OlePropertySet("Visible",false); Variant vWorkbooks = vExcel.OlePropertyGet("Workbooks"); Variant vWorkbook = vWorkbooks.OleFunction("Add"); Variant vSheets = vWorkbook.OlePropertyGet("Sheets"); Variant vCells = vExcel.OlePropertyGet("Cells"); int k = 0; for(int i = 0; i < AGrid->Columns->Count; i++) { //本循环输出标题 if (AGrid->Columns->Items[i]->Visible) { k++; vCells.OlePropertyGet("Cells",1,k).OlePropertySet("Value",AGrid->Columns->Items[i]->Title->Caption.c_str() ); //vSheets.OlePropertyGet("Columns", k).OlePropertyGet("ColumnWidth").OlePropertySet("Value", // AGrid->Fields[k - 1]->DisplayWidth); } } AGrid->DataSource->DataSet->First(); Variant vText=VarArrayCreate(OPENARRAY(int, (1, AGrid->DataSource->DataSet->RecordCount, 1, AGrid->Columns->Count)), varVariant); int iRow=1; while (!AGrid->DataSource->DataSet->Eof) { int iCol = 0; for (int j=1;j<=AGrid->Columns->Count;j++) { if (AGrid->Columns->Items[j-1]->Visible) { iCol++; //vText.GetElement(iRow,iCol).ChangeType(varString); if(AGrid->Columns->Items[j-1]->Field->DataType==ftString) //如果是字符原样输出,利用LOTUS '符 vText.PutElement("'"+AGrid->Columns->Items[j-1]->Field->DisplayText,iRow,iCol); else vText.PutElement(AGrid->Columns->Items[j-1]->Field->DisplayText,iRow,iCol); //vCells.OlePropertyGet("Cells",iRow,iCol).OlePropertySet("NumberFormatLocal","@"); } } iRow ++; Application->ProcessMessages(); AGrid->DataSource->DataSet->Next(); } vCells.OlePropertyGet("Range", vCells.OlePropertyGet("Item",2,1), vCells.OlePropertyGet("Item",AGrid->DataSource->DataSet->RecordCount+1,AGrid->Columns->Count)).OlePropertySet("Value",vText); vExcel.OlePropertySet("Visible", true); } catch(Exception &E) { ShowMessage(E.Message+"\n可能是系统没有安装Excel"); //Application->MessageBox("系统没有安装Excel", Application->Title.c_str(), MB_ICONINFORMATION); } } __finally { if(bmkDataSet) { AGrid->DataSource->DataSet->GotoBook(bmkDataSet); AGrid->DataSource->DataSet->FreeBook(bmkDataSet); } AGrid->DataSource->DataSet->EnableControls(); } }}//--------------------------------------------------------------------------- 可以用逗号分隔文件 字段之间用半角逗号 记录之间用回车 取名x.csv 判读窗体指针问题 delphi7 报表 Delphi使用TADOQuery时:不正常地定义参数对象。提供了不一致或不完整的信息 很简单的问题:query中执行带函数sql语句,比如说avg求平均值,执行后的值怎么取出啊? 很难实现的SQL语句,有兴趣的可以看看 初学sql,求如何用SQL语句创建表到指定数据库中? 请问怎么隐藏FileListBox中文件的后缀? D6到D7的程序转换,请大家帮忙,有关serversocket控件和TNMHttp控件 EXCEL问题求助。 DCOM紧急求救 DBLookupComboboxEh的下拉列表问题 求远程DELPHI家教!
dbgrid导出到Excel最前面两个字段和最后面的两个字段之间没有间隔符号,是什么原因
我认为速度是快不了的!
{
if(AGrid->DataSource->DataSet->IsEmpty())
{
ShowMessage("没有数据需要导出");
}
else
{
AGrid->DataSource->DataSet->DisableControls();
TBook bmkDataSet = AGrid->DataSource->DataSet->GetBook();
try
{
try
{
Variant vExcel = CreateOleObject("Excel.Application");
vExcel.OlePropertySet("Visible",false);
Variant vWorkbooks = vExcel.OlePropertyGet("Workbooks");
Variant vWorkbook = vWorkbooks.OleFunction("Add");
Variant vSheets = vWorkbook.OlePropertyGet("Sheets");
Variant vCells = vExcel.OlePropertyGet("Cells"); int k = 0;
for(int i = 0; i < AGrid->Columns->Count; i++)
{ //本循环输出标题
if (AGrid->Columns->Items[i]->Visible)
{
k++;
vCells.OlePropertyGet("Cells",1,k).OlePropertySet("Value",AGrid->Columns->Items[i]->Title->Caption.c_str() );
//vSheets.OlePropertyGet("Columns", k).OlePropertyGet("ColumnWidth").OlePropertySet("Value",
// AGrid->Fields[k - 1]->DisplayWidth);
}
}
AGrid->DataSource->DataSet->First();
Variant vText=VarArrayCreate(OPENARRAY(int,
(1, AGrid->DataSource->DataSet->RecordCount,
1, AGrid->Columns->Count)), varVariant);
int iRow=1;
while (!AGrid->DataSource->DataSet->Eof)
{
int iCol = 0;
for (int j=1;j<=AGrid->Columns->Count;j++)
{
if (AGrid->Columns->Items[j-1]->Visible)
{
iCol++;
//vText.GetElement(iRow,iCol).ChangeType(varString);
if(AGrid->Columns->Items[j-1]->Field->DataType==ftString) //如果是字符原样输出,利用LOTUS '符
vText.PutElement("'"+AGrid->Columns->Items[j-1]->Field->DisplayText,iRow,iCol);
else
vText.PutElement(AGrid->Columns->Items[j-1]->Field->DisplayText,iRow,iCol);
//vCells.OlePropertyGet("Cells",iRow,iCol).OlePropertySet("NumberFormatLocal","@"); }
}
iRow ++;
Application->ProcessMessages();
AGrid->DataSource->DataSet->Next();
} vCells.OlePropertyGet("Range", vCells.OlePropertyGet("Item",2,1),
vCells.OlePropertyGet("Item",AGrid->DataSource->DataSet->RecordCount+1,AGrid->Columns->Count)).OlePropertySet("Value",vText); vExcel.OlePropertySet("Visible", true);
}
catch(Exception &E)
{
ShowMessage(E.Message+"\n可能是系统没有安装Excel");
//Application->MessageBox("系统没有安装Excel", Application->Title.c_str(), MB_ICONINFORMATION);
}
}
__finally
{
if(bmkDataSet)
{
AGrid->DataSource->DataSet->GotoBook(bmkDataSet);
AGrid->DataSource->DataSet->FreeBook(bmkDataSet);
}
AGrid->DataSource->DataSet->EnableControls();
}
}
}
//---------------------------------------------------------------------------