if ( SaveDialog->Execute() /*SelectDirectory("请选择存储目录","",Dir)*/ )
{
ExportToExcel( DBGrid,/*Dir*/ SaveDialog->FileName);
}
/*****************************************************
函数说明: 讲DBGrid的数据导出到Excel中
参 数: *dbg 指向要导出的TDBGrid对象,saveDir保存的路径
备 注:数据的写入用了windows的粘贴板做暂存后再粘贴到excel,
这样减少重复多次的读写操作,缩减导出时间。
另外Excel一个sheet只能有65536行,如果导出的数据行数
多于65530行(6行用掉了)应该要存到多个sheet,目前没有实现。
******************************************************/
void TF_report::ExportToExcel(TDBGrid *dbg, String saveDir)
{
/*************************************************************
以下为TExcelApplication、TExcelWorkbook、TExcelWorksheet方法
虽然比较推荐,但是Excel进程只能在关闭窗体后才会退出,找不到
导完数据后关闭的方法。
***********************************************************/
try
{
ExcelApplication->Connect();
ExcelApplication->set_DisplayAlerts(0,false);
}
catch(...)
{
MessageBox(0, "启动 Excel 出错,可能你没有安装Office .",
"导出错误", MB_OK | MB_ICONERROR);
return;
}
try
{
// 隐藏Excel界面
ExcelApplication->set_Visible(0,false);
}
catch (...)
{
MessageBox(0, "启动 Excel 出错 .",
"导出错误", MB_OK | MB_ICONERROR);
ExcelApplication->Disconnect();
ExcelApplication->Quit();
return;
}
//载入模板
String xls = ExtractFilePath(Application->ExeName) + "Template.xls";
if( !FileExists(xls) )
{
MessageBox(0, "Excel模板文件不存在,请重新安装外接软件!",
"导出错误", MB_OK | MB_ICONERROR);
ExcelApplication->Disconnect();
ExcelApplication->Quit();
return;
}
try
{
// 载入模板到Excel
WideString wxls = xls;
ExcelWorkbook->ConnectTo(ExcelApplication->Workbooks->Open(wxls.c_bstr(),
TNoParam(),TNoParam(),TNoParam(),TNoParam(),
TNoParam(),TNoParam(),TNoParam(),TNoParam(),
TNoParam(),TNoParam(),TNoParam(),TNoParam(),0));
}
catch( ... )
{
MessageBox(0, "Excel模板载入错误!",
"导出错误", MB_OK | MB_ICONERROR);
ExcelWorkbook->Disconnect();
ExcelApplication->Disconnect();
ExcelApplication->Quit();
return;
}
try
{
// 操作这个工作表
ExcelWorksheet->ConnectTo( ExcelWorkbook->Worksheets->get_Item( TVariant(1) ) );
// 表格的行数
int nRowCount(dbg->DataSource->DataSet->RecordCount);
nRowCount = nRowCount < 2? 2: nRowCount;
if( nRowCount > 65530 )
{
ShowMessage("记录多于65530条,受Excel的工作表限制,将只导出前65530条。");
nRowCount = 65530;
}
//插入nRowCount-1行
for ( int i = 0; i < nRowCount -1 ; ++i)
{
Excel_2k::RangePtr rp;
rp = ExcelWorksheet->get_Range(TVariant("A3"),TVariant("A3"));
rp->EntireRow->Insert(TNoParam());
}
// 表格的列数
int nColCount(dbg->Columns->Count);
nColCount = nColCount < 1? 1: nColCount;
// 将DBGrid中的数据写入Excel表格
int pcount = 0 , unpcount;
String qual,rate,value,cell;
char ct;
// cell = "A" + IntToStr(1);
// value = "我是标题";
// ExcelWorksheet->get_Range(TVariant(cell),TVariant(cell))->set_Value( TVariant(value) );
TStringList *sl=new TStringList();
dbg->DataSource->DataSet->First();
for(int i=0; i<nRowCount; i++)
{
value = "";
for(int j=0; j<nColCount; j++)
{
if( j != 1)
{
// value = dbg->DataSource->DataSet->FieldByName(dbg->Columns->Items[j]->FieldName)->AsString;
value += Trim(dbg->DataSource->DataSet->Fields->Fields[j]->AsString) + "/t";
}
else
{ //DBGrid显示时间时自动加上了一个日期,在显示和导出时需要格式化,去掉日期( PS:显示用了字典格式化)
// value = FormatDateTime("hh:nn:ss",dbg->DataSource->DataSet->FieldByName(dbg->Columns->Items[j]->FieldName)->AsDateTime);
value += FormatDateTime("hh:nn:ss", Trim(dbg->DataSource->DataSet->Fields->Fields[j]->AsDateTime) ) + "/t";
}
// ct = static_cast<char>('A' + j);
// cell = ct ;
// cell += IntToStr(i + 3);
// ExcelWorksheet->get_Range(TVariant(cell),TVariant(cell))->set_Value( TVariant(value) );
}
sl->Add(value); //TStringList自动在末尾加上 /n 换行符
qual = Trim(dbg->DataSource->DataSet->FieldByName("Test_qual")->AsString);
if( qual == "合格")
pcount++;
dbg->DataSource->DataSet->Next();
}
Clipboard()->SetTextBuf(sl->Text.c_str()); //发送到粘贴板
ExcelWorksheet->get_Range(TVariant("A3"),TVariant("A3"))->Select();
ExcelWorksheet->Paste();
ExcelWorksheet->get_Range(TVariant("A1"),TVariant("A1"))->Select();
Clipboard()->Clear(); //清除粘贴板
unpcount = nRowCount - pcount;
rate = FormatFloat("0.00",100.0f*pcount/nRowCount);
rate += "%";
//设置总个数
value = IntToStr(nRowCount);
ct = static_cast<char>('A' + 3);
cell = ct;
cell += IntToStr(nRowCount + 4);
ExcelWorksheet->get_Range(TVariant(cell),TVariant(cell))->set_Value( TVariant(value) );
//合格个数
value = IntToStr(pcount);
ct = static_cast<char>('A' + 8);
cell = ct;
cell += IntToStr(nRowCount + 4);
ExcelWorksheet->get_Range(TVariant(cell),TVariant(cell))->set_Value( TVariant(value) );
//不合格个数
value = IntToStr(unpcount);
ct = static_cast<char>('A' + 10);
cell = ct ;
cell += IntToStr(nRowCount + 4);
ExcelWorksheet->get_Range(TVariant(cell),TVariant(cell))->set_Value( TVariant(value) );
//合格率
value = rate;
ct = static_cast<char>('A' + 12);
cell = ct;
cell += IntToStr(nRowCount + 4);
ExcelWorksheet->get_Range(TVariant(cell),TVariant(cell))->set_Value( TVariant(value) );
WideString Dir = saveDir;
ExcelWorksheet->SaveAs(Dir.c_bstr(),
TNoParam(),TNoParam(),TNoParam(),TNoParam(),
TNoParam(),TNoParam(),TNoParam(),TNoParam(),0);
}
catch( ... )
{
ExcelWorksheet->Disconnect();
ExcelWorkbook->Disconnect();
ExcelApplication->Disconnect();
ExcelApplication->Quit();
ExcelQueryTable->Disconnect();
return;
}
ExcelWorksheet->Disconnect();
ExcelWorkbook->Disconnect();
ExcelApplication->Disconnect();
ExcelQueryTable->Disconnect();
ExcelApplication->Quit();
/*************************************************************
以下为OLE方法,编译时无法判断错误的Excel操作,
但能在导出后关闭Excel进程。
***********************************************************/
/*
Variant vExcelApp, vSheet,Range;
try
{
vExcelApp = Variant::CreateObject("Excel.Application");
}
catch(...)
{
MessageBox(0, "启动 Excel 出错,可能你没有安装Office .",
"导出错误", MB_OK | MB_ICONERROR);
return;
}
try
{
// 隐藏Excel界面
vExcelApp.OlePropertySet("Visible", false);
}
catch (...)
{
MessageBox(0, "启动 Excel 出错 .",
"导出错误", MB_OK | MB_ICONERROR);
vExcelApp.OleFunction("Quit");
vSheet = Unassigned;
vExcelApp = Unassigned;
return;
}
//载入模板
String xls = ExtractFilePath(Application->ExeName) + "Template.xls";
if( !FileExists(xls) )
{
MessageBox(0, "Excel模板文件不存在,请重新安装外接软件!",
"导出错误", MB_OK | MB_ICONERROR);
vExcelApp.OleFunction("Quit");
vSheet = Unassigned;
vExcelApp = Unassigned;
return;
}
try
{
// 载入模板到Excel
vExcelApp.OlePropertyGet("Workbooks").OleFunction("Open",xls.c_str()); // 工作表
}
catch( ... )
{
MessageBox(0, "Excel模板载入错误!",
"导出错误", MB_OK | MB_ICONERROR);
vExcelApp.OleFunction("Quit");
vSheet = Unassigned;
vExcelApp = Unassigned;
return;
}
// 操作这个工作表
vSheet = vExcelApp.OlePropertyGet("ActiveWorkbook").OlePropertyGet("Sheets", 1);
// 表格的行数
int nRowCount(dbg->DataSource->DataSet->RecordCount);
nRowCount = nRowCount < 2? 2: nRowCount;
//插入nRowCount-1行
for ( int i = 0; i < nRowCount -1 ; ++i)
{
vSheet.OlePropertyGet("Rows",3).OleProcedure("Insert");
}
// 表格的列数
int nColCount(dbg->Columns->Count);
nColCount = nColCount < 1? 1: nColCount;
if( nRowCount > 65530 )
{
ShowMessage("记录多于65530条,受Excel的工作表限制,将只导出前65530条。");
nRowCount = 65530;
}
S
TStringList *sl=new TStringList();
int pcount = 0 , unpcount;
String qual,rate,value ="";
dbg->DataSource->DataSet->First();
for(int i=0; i<nRowCount; i++)
{ value ="";
for(int j=0; j<nColCount; j++)
{
if( j != 1)
{
// value = dbg->DataSource->DataSet->FieldByName(dbg->Columns->Items[j]->FieldName)->AsString;
value += Trim(dbg->DataSource->DataSet->Fields->Fields[j]->AsString) + "/t";
}
else
{ //DBGrid显示时间时自动加上了一个日期,在显示和导出时需要格式化,去掉日期( PS:显示用了字典格式化)
// value = FormatDateTime("hh:nn:ss",dbg->DataSource->DataSet->FieldByName(dbg->Columns->Items[j]->FieldName)->AsDateTime);
value += FormatDateTime("hh:nn:ss",Trim(dbg->DataSource->DataSet->Fields->Fields[j]->AsDateTime)) + "/t";
}
// vSheet.OlePropertyGet("Cells", i + 3, j + 1).OlePropertySet("Value",value.c_str());
}
sl->Add(value);
qual = Trim(dbg->DataSource->DataSet->FieldByName("Test_qual")->AsString);
if( qual == "合格")
pcount++;
dbg->DataSource->DataSet->Next();
}
vExcelApp.Exec(PropertyGet("Range")<<"A3").Exec(Procedure("Select"));
Clipboard()->SetTextBuf(sl->Text.c_str()); //发送到粘贴板
vExcelApp.OlePropertyGet("ActiveSheet").OleProcedure("Paste");
vSheet.OlePropertyGet("Cells", 1, 1).OleProcedure("Select"); //去除粘贴造成的选区
Clipboard()->Clear(); //清除粘贴板
unpcount = nRowCount - pcount;
rate = FormatFloat("0.00",100.0f*pcount/nRowCount);
rate += "%";
//设置总个数
vSheet.OlePropertyGet("Cells", nRowCount + 4,4).OlePropertySet("Value",IntToStr(nRowCount).c_str());
//合格个数
vSheet.OlePropertyGet("Cells", nRowCount + 4,9).OlePropertySet("Value",IntToStr(pcount).c_str());
//不合格个数
vSheet.OlePropertyGet("Cells", nRowCount + 4,11).OlePropertySet("Value",IntToStr(unpcount).c_str());
//合格率
vSheet.OlePropertyGet("Cells", nRowCount + 4,13).OlePropertySet("Value",rate.c_str());
// 保存Excel文档并退出
try
{
vExcelApp.OlePropertyGet("ActiveWorkbook").OleFunction("SaveAs", saveDir.c_str());
}
catch( ... )
{
vExcelApp.OleFunction("Quit");
vSheet = Unassigned;
vExcelApp = Unassigned;
return;
}
vExcelApp.OleFunction("Quit");
vSheet = Unassigned;
vExcelApp = Unassigned;
*/
// 工作结束
MessageBox(0, "导出成功",
"导出到Excel", MB_OK | MB_ICONINFORMATION);
}
dbeaver 怎么导出postgres数据库表结构 dbeaver数据导出excel
转载-
数据库导出神器:Database-Export
一款强大的数据库导出工具!
数据库 Database -
dbeaver 导出postgresql 设置版本 dbeaver导出数据库表
一起来学matlab-matlab学习笔记4参考书籍 《matlab 程序设计与综合应用》张德丰等著 感谢张老师的书籍,让我领略到matlab的便捷MATLAB提供了将磁盘文件或剪贴板中的数据加载到工作空间的多种方法,称之为导入数据(ImportingData);同时也提供了多种将工作空间的变量保存到磁盘的方法,称之为导出数据(ExportingData).选择不同的导入机制或导出机制取决于要传输
dbeaver导出表结构 dll导出结构体 exp 导出表 除了某些个表 grafana导入json文件没有数据 java读取文件实现导出功能 -
dbeaver怎么导出PostgreSQL的数据 dbeaver如何导出数据
1 数组1.1 数组含义数组:相同元素构成有序的元素集合。数组中存储的元素类型是一致的,数组也是学习编程时最先接触的数据集合。1.2 存储方式数组在内存中采用连续的存储方式,也就是说数据在内存中存放是连续的。例如:当程序执行如下代码:int array[10] //在栈上分配一个有10个int元素的数组printf("array的地址:%p\n", &array);for(int
dbeaver导出表结构和数据 不同表结构数据迁移 删除单链上数据域值最小的节点 利用单链表存储一元多项式 单链表排序算法从小到大 -
dbeaver 如何导出hive里的数据 dbeaver怎么导出数据成excel格式
Word与Excel互转,怎样才能格式不变?不要心烦,教程来了!许多初入职场的小伙伴们,经常被各种格式转换,折磨的心力交瘁,什么Word转成PDF,转成PPT,转成Excel啊,工作上的要求可真是花样百出!特别是“Word导入excel”,引发大批怨言!"太麻烦啦!所有内容都挤在一行或者一列里面,画面一片混乱!”“我用心的设置好颜色和间距,复制到Word上竟然毫无美感,乱七八糟!”诸如此类的问题随
dbeaver导入excel文件 html 打开 excel html表格字体大小怎样设置 html转word保留样式 Word -
ubuntu服务器安装gpu驱动
1、查看当前系统版本 cat /proc/version 显示为:2、查看当前显卡型号: sudo lshw -numeric -C display 显示我的显卡型号为:GM107M[GeForce GTX 9
ubuntu服务器安装gpu驱动 ubuntu CUDA 驱动程序 分割线