CListCtrl获得列的属性可以使用BOOL CListCtrl::GetColumn( int nCol, LVCOLUMN* pColumn ),nCol为需要获得获得属性值的列序号,pColumn 为 LVCOLUMN 结构体的指针。LVCOLUMN结构体中的 UINT mask 作为输入,决定返回哪些属性的值,如果 mask 的值包含LVCF_TEXT ,则需要将字符串缓存的首地址指针置入结构体中的 LPTSTR pszText; 变量,缓存大小置入 int cchTextMax; 变量。
使用这个函数的主要问题是主要问题期望返回 LVCF_TEXT ,设置了 pszText 却没有设置cchTextMax 变量,并且通常都在分配 LVCOLUMN 结构体空间时将所分配的内存清0,因此总是不能返回列名。反而是没有清0所分配空间,直接设置 mask 为 LVCF_TEXT ,那么可能可以获得列名的值。当然只要正确设置 pszText 和 cchTextMax 就不会有这些问题。
还有一个问题是列的数量。没有直接的函数可以获得列的数量,只能从0开始不断自增 nCol 的值,判断 GetColumn( nCol,pColumn ) 的返回值是否为 False 以计算列的数量。
///
//
void GetExcelDriver(CListCtrl* pList, CString strTitle)
//
参数:
//
pList 需要导出的List控件指针
//
strTitle 导出的数据表标题
//
说明:
//
导出CListCtrl控件的全部数据到Excel文件。Excel文件名由用户通过“另存为”
//
对话框输入指定。创建名为strTitle的工作表,将List控件内的所有数据(包括
//
列名和数据项)以文本的形式保存到Excel工作表中。保持行列关系。
//
//
edit by [r]@dotlive.cnblogs.com
///
void
ExportListToExcel(CListCtrl
*
pList, CString strTitle)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/34031c708bfe702fe82d01ff5c6593aa.gif)
{
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
CString warningStr;
if (pList->GetItemCount ()>0) {
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
CDatabase database;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
CString sDriver;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
CString sExcelFile;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
CString sSql;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
CString tableName = strTitle;
// 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
sDriver = GetExcelDriver();
if (sDriver.IsEmpty())
![ExpandedSubBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
{
// 没有发现Excel驱动
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
AfxMessageBox("没有安装Excel!\n请先安装Excel软件才能使用导出功能!");
return;
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
///默认文件名
if (!GetDefaultXlsFileName(sExcelFile))
return;
// 创建进行存取的字符串
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile);
// 创建数据库 (既Excel表格文件)
if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
![ExpandedSubBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
{
// 创建表结构
int i;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
LVCOLUMN columnData;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
CString columnName;
int columnNum = 0;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
CString strH;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
CString strV;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
sSql = "";
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
strH = "";
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
columnData.mask = LVCF_TEXT;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
columnData.cchTextMax =100;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
columnData.pszText = columnName.GetBuffer (100);
for(i=0;pList->GetColumn(i,&columnData);i++)
![ExpandedSubBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
{
if (i!=0)
![ExpandedSubBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
{
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
sSql = sSql + ", " ;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
strH = strH + ", " ;
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
sSql = sSql + " " + columnData.pszText +" TEXT";
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
strH = strH + " " + columnData.pszText +" ";
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
columnName.ReleaseBuffer ();
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
columnNum = i;
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
sSql = "CREATE TABLE " + tableName + " ( " + sSql + " ) ";
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
database.ExecuteSQL(sSql);
// 插入数据项
int nItemIndex;
for (nItemIndex=0;nItemIndex<pList->GetItemCount ();nItemIndex++){
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
strV = "";
for(i=0;i<columnNum;i++)
![ExpandedSubBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
{
if (i!=0)
![ExpandedSubBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/3112b7b6526db5bc83e275260ae60525.gif)
{
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
strV = strV + ", " ;
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
strV = strV + " '" + pList->GetItemText(nItemIndex,i) +"' ";
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
sSql = "INSERT INTO "+ tableName
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
+" ("+ strH + ")"
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
+" VALUES("+ strV + ")";
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
database.ExecuteSQL(sSql);
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
// 关闭数据库
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
database.Close();
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
warningStr.Format("导出文件保存于%s!",sExcelFile);
![InBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
AfxMessageBox(warningStr);
![ExpandedSubBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/eec4c0236afc26744c9c4e910bc34958.gif)
}
![ExpandedBlockEnd.gif](https://i-blog.csdnimg.cn/blog_migrate/4fd96b3cf02f4c7b5c8964ac8167f7af.gif)
}
完整工程示例可以在这里下载,使用VC6 MFC 。
本文转自 lu xu 博客园博客,原文链接:http://www.cnblogs.com/dotLive/archive/2006/08/26/486980.html ,如需转载请自行联系原作者