////////////////////////////////////////////////////////////////////////////// // 函数:void CListCtrlToExcel(CListCtrl* pList, CString strTitle) // 参数: // pList 需要导出的List控件指针 // strTitle 导出的数据表标题 // 说明: // 导出CListCtrl控件的全部数据到Excel文件。Excel文件名由用户通过“另存为” // 对话框输入指定。创建名为strTitle的工作表,将List控件内的所有数据(包括 // 列名和数据项)以文本的形式保存到Excel工作表中。保持行列关系。 // ////////////////////////////////////////////////////////////////////////////// void CListCtrlToExcel(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='';FIRSTORWHASNAMES=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,strV; sSql=""; strH=""; columnData.mask = LVCF_TEXT; columnData.cchTextMax = 100; columnData.pszText = columnName.GetBuffer(100); 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; sSql = "CREATE TABLE " + tableName + " ( " + sSql + " ) "; database.ExecuteSQL(sSql); //插入数据项 int nItemIndex; for(nItemIndex=0;nItemIndex<pList->GetItemCount();nItemIndex++) { strV = ""; for(i=0;i<columnNum;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); ShellExecute(NULL,"open",sExcelFile,NULL,NULL,SW_SHOW); //最后才显示文件名为strFile的数据表 } else { //没有数据 MessageBox(NULL,"没有数据,不能导出!","提示",MB_OK|MB_ICONWARNING|MB_TOPMOST); } }
/////////////////////////////////////////////////////////////////////////////// // void GetExcelDriver(CListCtrl* pList, CString strTitle) // 参数: // pList 需要导出的List控件指针 // strTitle 导出的数据表标题 // 说明: // 导出CListCtrl控件的全部数据到Excel文件。Excel文件名由用户通过“另存为” // 对话框输入指定。创建名为strTitle的工作表,将List控件内的所有数据(包括 // 列名和数据项)以文本的形式保存到Excel工作表中。保持行列关系。 // /////////////////////////////////////////////////////////////////////////////// void CFunc::ExportListToExcel(CListCtrl* pList[], CString strTitle[], int number) { CString warningStr; bool l_bStart = true; for (int index = 0; index < number; index++)//判断交易分析是否完成 { if (pList[index]->GetItemCount () == 0 || pList[index]->GetItemCount () < 0) { l_bStart = false; } } if (l_bStart) //遍历每一行的循环 { CDatabase database; CString sDriver; CString sExcelFile; CString sSql; CString tableName; // 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)" sDriver = GetExcelDriver(); if (sDriver.IsEmpty()) { // 没有发现Excel驱动 AfxMessageBox("You've not installed Excel!\nPlease install Excel first!"); return; } ///默认文件名 if (!GetDefaultXlsFileName(sExcelFile)) return; // 创建进行存取的字符串 sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile); database.OpenEx(sSql,CDatabase::noOdbcDialog); // 创建数据库 (既Excel表格文件) for (int tableIndex = 0; tableIndex < number; tableIndex++)//创建多个Excel表的循环 { tableName = strTitle[tableIndex]; // 创建表结构 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); for(i=1;pList[tableIndex]->GetColumn(i,&columnData);i++)//第一列没有数据应跳过 { if (i!=1) { sSql = sSql + ", " ; strH = strH + ", " ; } sSql = sSql + " " + columnData.pszText +" TEXT";//数据暂时全部是以文本类型写入Excel strH = strH + " " + columnData.pszText +" "; } columnName.ReleaseBuffer (); columnNum = i; sSql = "CREATE TABLE " + tableName + " ( " + sSql + " ) "; database.ExecuteSQL(sSql); // 插入数据项 int nItemIndex; for (nItemIndex=0;nItemIndex < pList[tableIndex]->GetItemCount(); nItemIndex++) { strV = ""; for(i=1;i<columnNum;i++)//第一列没有数据应跳过 { if (i!=1) { strV = strV + ", " ; } strV = strV + " '" + pList[tableIndex]->GetItemText(nItemIndex,i) +"' "; } sSql = "INSERT INTO "+ tableName +" ("+ strH + ")" +" VALUES("+ strV + ")"; database.ExecuteSQL(sSql); sSql.Empty(); } }//end for创建多个Excel表的循环 // 关闭数据库 database.Close(); warningStr.Format("Excel file is saved as %s!",sExcelFile); AfxMessageBox(warningStr); }//end for遍历每一行的循环 }