搜档网
当前位置:搜档网 › MFC导出excel

MFC导出excel

void TabPart2::OnExcelout()
{//首先判断列表框中是否有记录
if ( m_list.GetItemCount()<= 0 )
{
AfxMessageBox("列表中没有记录需要保存!");
return;
}
//打开另存为对话框 ,需要包含 #include
CFileDialog dlg( FALSE,
"xls",
"FileList",
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"Excel 文件(*.xls)|*.xls||");
dlg.m_ofn.lpstrTitle = " 导出EXCEL数据";

if (dlg.DoModal() != IDOK)
return;
CString strFilePath;
//获得文件路径名
strFilePath = dlg.GetPathName();
//判断文件是否已经存在,存在则删除重建
DWORD dwRe = GetFileAttributes(strFilePath);
if ( dwRe != (DWORD)-1 )
{
DeleteFile(strFilePath);
}
CDatabase database;//数据库库需要包含头文件 #include
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel驱动
CString sSql,strInsert;
TRY
{
// 创建进行存取的字符串
sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, strFilePath, strFilePath);

// 创建数据库 (既Excel表格文件)
if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
{
//获得列别框总列数
int iColumnNum,iRowCount;
LVCOLUMN lvCol;
CString strColName; //用于保存列标题名称
int i,j; //列、行循环参数

iColumnNum = m_list.GetHeaderCtrl()->GetItemCount();
iRowCount = m_list.GetItemCount();

sSql = " CREATE TABLE DSO_DX ( ";
strInsert = " INSERT INTO DSO_DX ( " ;
//获得列标题名称
lvCol.mask = LVCF_TEXT; //必需设置,说明LVCOLUMN变量中pszText参数有效
https://www.sodocs.net/doc/b413056176.html,hTextMax = 32; //必设,pszText参数所指向的字符串的大小
lvCol.pszText = strColName.GetBuffer(32); //必设,pszText 所指向的字符串的实际存储位置。
//以上三个参数设置后才能通过 GetColumn()函数获得列标题的名称
for( i=0 ; i< iColumnNum ; i++ )
{
if ( !(m_list.GetColumn(i,&lvCol)) )
return;
if ( i{
sSql = sSql + lvCol.pszText + " TEXT , ";
strInsert = strInsert + lvCol.pszText + " , ";
}
else
{
sSql = sSql + lvCol.pszText + " TEXT ) ";
strInsert = strInsert + lvCol.pszText + " ) VALUES ( ";
}
}
//创建Excel表格文件
database.ExecuteSQL(sSql);

//循环提取记录并插入到EXCEL中
sSql = strInsert;
char chTemp[100];
for ( j=0 ; j{
memset(chTemp,0,100);
for ( i=0 ; i{
m_list.GetItemText(j,i,chTemp,100);
if ( i < (iColumnNum-1) )
{
sSql = sSql + "'" + chTemp + "' , ";
}
else
{
sSql = sSql + "'" + chTemp + "' ) ";
}
}
//将记录插入到表格中
database.ExecuteSQL(sSql);
sSql = strInsert;
}
}

// 关闭Excel表格文件
database.Close();

AfxMessageBox("保存查询结

果为Excel文件成功!");
}
CATCH_ALL(e)
{
//错误类型很多,根据需要进行报错。
AfxMessageBox("Excel文件保存失败。");
}
END_CATCH_ALL;


}

相关主题