有两个listcontrol,想把它合成一个,导出一个excel,记录一下,一个是p_lista,一个是p_listb, 直接上代码:
void CSetClass::OnBnClickedOut()
{
if((p_lista.GetItemCount()<=0)||(p_listb.GetItemCount()<=0))
{
AfxMessageBox("列表中没有记录保存");
return;
}
CString FileName;
CTime time=CTime::GetCurrentTime();
FileName=time.Format("分类备份%Y%m%d%H%M");//分类备份%Y-%m-%d%H:%M
CFileDialog dlg(FALSE,"xls",FileName,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Excel 文件(*.xls)|*.xls||");
dlg.m_ofn.lpstrTitle="文件列表另存为";
if(dlg.DoModal()!=IDOK)
return;
CString strFilePath;
//获取文件路径名
strFilePath=dlg.GetPathName();
//判断文件是否存在,存在则删除重建
DWORD dwRe=GetFileAttributes(strFilePath);
if(dwRe!=(DWORD)-1)
{
DeleteFile(strFilePath);
}
CDatabase database;
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);
//创建数据库
if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
{
//获得列别框总列数
int iColumnNuma,iRowCounta,iColumnNumb,iRowCountb;
LVCOLUMN lvCola,lvColb;
CString strColNamea,strColNameb; //用于保存列标题名称
int ia,ja,ib,jb; //列、行循环参数
iColumnNuma = p_lista.GetHeaderCtrl()->GetItemCount();
iRowCounta = p_lista.GetItemCount();
iColumnNumb = p_listb.GetHeaderCtrl()->GetItemCount();
iRowCountb = p_listb.GetItemCount();
sSql = " CREATE TABLE DSO_DX ( ";
strInsert = " INSERT INTO DSO_DX ( " ;
//获得列标题名称
lvCola.mask = LVCF_TEXT; //必需设置,说明LVCOLUMN变量中pszText参数有效
lvCola.cchTextMax = 32; //必设,pszText参数所指向的字符串的大小
lvCola.pszText = strColNamea.GetBuffer(32); //必设,pszText 所指向的字符串的实际存储位置。
lvColb.mask = LVCF_TEXT; //必需设置,说明LVCOLUMN变量中pszText参数有效
lvColb.cchTextMax = 32; //必设,pszText参数所指向的字符串的大小
lvColb.pszText = strColNameb.GetBuffer(32); //必设,pszText 所指向的字符串的实际存储位置。
//以上三个参数设置后才能通过 GetColumn()函数获得列标题的名称
for( ia=0 ; ia< iColumnNuma ; ia++ )
{
if ( !(p_lista.GetColumn(ia,&lvCola)) )
return;
if ( ia<iColumnNuma-1 )
{
sSql = sSql + lvCola.pszText + " TEXT , ";
strInsert = strInsert + lvCola.pszText + " , ";
}
else
{
sSql = sSql + lvCola.pszText + " TEXT , ";
strInsert = strInsert + lvCola.pszText + " , ";
for( ib=0 ; ib< iColumnNumb ; ib++ )
{
if ( !(p_listb.GetColumn(ib,&lvColb)) )
return;
if ( ib<iColumnNumb-1 )
{
sSql = sSql + lvColb.pszText + " TEXT , ";
strInsert = strInsert + lvColb.pszText + " , ";
}
else
{
sSql = sSql + lvColb.pszText + " TEXT ) ";
strInsert = strInsert + lvColb.pszText + " ) VALUES ( ";
}
}
}
}
b
//创建Excel表格文件
database.ExecuteSQL(sSql);
//循环提取记录并插入到EXCEL中
sSql = strInsert;
char chTemp[33];
for ( ja=0 ; ja<((iRowCounta>=iRowCountb)?iRowCounta:iRowCountb); ja++ )
{
memset(chTemp,0,33);
for ( ia=0 ; ia<iColumnNuma ; ia++ )
{
p_lista.GetItemText(ja,ia,chTemp,33);
if ( ia < (iColumnNuma-1) )
{
sSql = sSql + "'" + chTemp + "' , ";
}
else
{
sSql = sSql + "'" + chTemp + "' , ";
}
}
/
for ( ib=0 ; ib<iColumnNumb ; ib++ )
{
p_listb.GetItemText(ja,ib,chTemp,33);
if ( ib+4 < (iColumnNumb+3) )
{
sSql = sSql + "'" + chTemp + "' , ";
}
else
{
sSql = sSql + "'" + chTemp + "' ) ";
}
}
//将记录插入到表格中
database.ExecuteSQL(sSql);
sSql = strInsert;
}
}
// 关闭Excel表格文件
database.Close();
// AfxMessageBox("保存查询结果为Excel文件成功!");
// AfxMessageBox(_T("保存查询结果为Excel文件成功!"), MB_OK | MB_ICONINFORMATION);
MessageBox(_T("保存查询结果为Excel文件成功!"),"提示",0);
}
catch/*CATCH_ALL*/(CDBException* e)
{
//错误类型很多,根据需要进行报错。
// AfxMessageBox(e.Description());
AfxMessageBox(e->m_strError);
}
}