一封装好的导出CListCtrl数据函数如下:
///
// void
ExportListToExcel
(CListCtrl* pList, CString strTitle)
//
参数:
pList
需要导出的
List
控件指针
// strTitle
导出的数据表标题
//
说明
:
//
导出
CListCtrl
控件的全部数据到
Excel
文件。
Excel
文件名由用户通过
“
另存为
”
//
对话框输入指定。创建名为
strTitle
的工作表,将
List
控件内的所有数据(包括
//
列名和数据项)以文本的形式保存到
Excel
工作表中。保持行列关系
///
void
ExportListToExcel(CListCtrl* pList, CString strTitle)
{
CString warningStr;
if (pList->GetItemCount ()>0) {
CDatabase database;
CString sDriver;
CString sExcelFile;
CString sSql;
CString tableName = strTitle;
//
检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"
sDriver = GetExcelDriver();
if (sDriver.IsEmpty())
{ //
没有发现Excel驱动
AfxMessageBox("
没有安装Excel!/n请先安装Excel软件才能使用导出功能!");
return;
}
if (!GetDefaultXlsFileName(sExcelFile)) ///
默认文件名
return;
//
创建进行存取的字符串
sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=/"%s/";DBQ=%s",sDriver, sExcelFile, sExcelFile);
//
创建数据库 (既Excel表格文件)
if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
{ //
创建表结构
int i;
LVCOLUMN columnData;
CString columnName;
int columnNum = 0;
CString strH;
CString strV;
sSql = "";
strH = "";
columnData.mask = LVCF_TEXT;
columnData.cchTextMax =100;
columnData.pszText = columnName.GetBuffer (100);
//
书写excel表头,即第一行
for(i=0;pList->GetColumn(i,&columnData);i++)
{
if (i!=0)
{
sSql = sSql + ", " ;
strH = strH + ", " ;
}
sSql = sSql + " " + columnData.pszText +" TEXT ";//
单元
strH = strH + " " + columnData.pszText +" "; //
单元
}
columnName.ReleaseBuffer ();
columnNum = i;
//
最后一列根据自己情况去掉,工作子目录用来做表名
CString strSrc =sSql;
strSrc.TrimLeft(" ");
strSrc.TrimRight(" ");
strSrc.TrimRight(" ");
strSrc.TrimRight(" ");
strSrc.TrimRight("/t");
int pos;//,
的位置
pos=strSrc.ReverseFind(',');
sSql=strSrc.Left(pos);
strSrc=strSrc.Right(strSrc.GetLength()-pos-1);
strSrc =strH;
strSrc.TrimLeft(" ");
strSrc.TrimRight(" ");
strSrc.TrimRight(" ");
strSrc.TrimRight(" ");
strSrc.TrimRight("/t");
pos=strSrc.ReverseFind(',');
strH=strSrc.Left(pos);
strSrc=strSrc.Right(strSrc.GetLength()-pos-1);
tableName=strSrc;
sSql = "CREATE TABLE " + tableName + " ( " + sSql + " ) ";
database.ExecuteSQL(sSql);
//
插入数据项
int nItemIndex;
for (nItemIndex=0;nItemIndex<pList->GetItemCount ();nItemIndex++)
{
strV = "";
//for(i=0;i<columnNum;i++)
//
因为最后一列我想作为EXCEL的表名,所以不需要记录所有-1
for(i=0;i<columnNum-1;i++)
{
if (i!=0)
{
strV = strV + ", " ;
}
strV = strV + " '" + pList->GetItemText(nItemIndex,i) +"' ";
}
sSql = "INSERT INTO "+ tableName
+" ("+ strH + ")"
+" VALUES("+ strV + ")";
database.ExecuteSQL(sSql);
}
}
//
关闭数据库
database.Close();
warningStr.Format("
导出文件保存于%s!",sExcelFile);
AfxMessageBox(warningStr);
}
else
{
AfxMessageBox("ListCtrl
控件中的内容为空,没有必要导出",MB_OK);
}
}
为ListCtrl控件添加Contrl型变量m_ListResult ,
导出Excel时只需调用
ExportListToExcel(&m_ListResult , "
每周周会报表")
函数就可以了.