BOOL C51JobWebPost::CreatExcelDb(CString dbpath,CString tableName,CString &strError) { if (_access(dbpath,0)==0) //存在 { strError = "数据库已存在"; return TRUE; } CDatabase database; CString sDriver; CString sExcelFile; CString sSql; //检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)" sDriver = GetExcelDriver(); if (sDriver.IsEmpty()) { // 没有发现Excel驱动 strError = "请先安装Excel软件才能使用导出功能"; return FALSE; } // 创建进行存取的字符串 sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, dbpath); // 创建数据库 (既Excel表格文件) if( database.OpenEx(sSql,CDatabase::noOdbcDialog) ) { CString strTemp; strTemp.Format("账号 TEXT,密码 TEXT,推荐人 TEXT,邮箱 TEXT,网址 TEXT,时间 TEXT"); // 创建表结构 sSql = "CREATE TABLE " + tableName + " ( " + strTemp + " ) "; database.ExecuteSQL(sSql); return TRUE; } else { strError = "创建EXCEL数据库失败"; return FALSE; } }
////////////////////////////////////////////////////////////////////////////// // 函数: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遍历每一行的循环 }
//也是导入 bool CXlsCtrolClass::ImportEx(CString strFile,vector<ExpressStr> &vecStr) { CDatabase database; CString sSql; CString sItem1, sItem2; CString sDriver; CString sDsn; CString sFile = strFile; // 将被读取的Excel文件名 vecStr.clear(); // 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)" sDriver = GetExcelDriver(); if (sDriver.IsEmpty()) { return false; } sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s", sDriver, sFile); TRY { // 打开数据库(既Excel文件) database.Open(NULL, false, false, sDsn); int iSheetCount =1; while (true) { CRecordset adoRst(&database); // 设置读取的查询语句. sSql = "SELECT * from "; sSql.Format("SELECT * from [Sheet%d$]",iSheetCount); // 执行查询语句 try { adoRst.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly); } catch (CException* e) { int ii = 0; char strMessage[MAX_PATH]; e->GetErrorMessage(strMessage, sizeof(strMessage) - 1); e->Delete(); CString strError = CString(strMessage); if (strError.Find("不是一个有效名称。请确认它不包含无效的字符或标点") >=0 ) { //所有列已经遍历完 break; } } if (adoRst.IsEOF()) //已经为空了 { break; } ExpressStr ExpressInfo; BookStr bookStr; CString strTemp = ""; //CString strColumnName = adoRst.GetFieldName(0); bool bColumnFlag = false;//是否已经读取了列名 bool bNewStruInfo = false; bool bInfoEnd = false; bool bReadBookInfo = false; while (!adoRst.IsEOF()) { if (bInfoEnd) { vecStr.push_back(ExpressInfo); bNewStruInfo = false; bInfoEnd = false; ExpressInfo.vecBookInfo.clear(); bReadBookInfo = false; } adoRst.GetFieldValue((short)0,strTemp); if (strTemp != "") //OrderNo { adoRst.GetFieldValue((short)2,ExpressInfo.strOrderNo); bNewStruInfo = true; adoRst.MoveNext(); continue; } strTemp = ""; adoRst.GetFieldValue((short)1,strTemp); if (strTemp == "") //One Record End { bInfoEnd = true; adoRst.MoveNext(); continue; } else if (strTemp == "ISBN") //Book Info { bReadBookInfo = true; adoRst.MoveNext(); continue; } else if (bReadBookInfo) // add book info { bookStr.strISBN = strTemp; adoRst.GetFieldValue((short)2,bookStr.strName); adoRst.GetFieldValue((short)3,bookStr.strPress); adoRst.GetFieldValue((short)4,bookStr.strPrice); adoRst.GetFieldValue((short)5,bookStr.strNum); adoRst.GetFieldValue((short)6,bookStr.strSellPrice); ExpressInfo.vecBookInfo.push_back(bookStr); } else if (strTemp == "发货地址") { adoRst.GetFieldValue((short)2,ExpressInfo.strAddr); } else if (strTemp == "联 系 人") { adoRst.GetFieldValue((short)2,ExpressInfo.strRecver); } else if (strTemp == "联系方式") { adoRst.GetFieldValue((short)2,ExpressInfo.strPhone); } else if (strTemp == "备 注") { adoRst.GetFieldValue((short)2,ExpressInfo.strMemo); } else if (strTemp == "付款时间") { adoRst.GetFieldValue((short)2,ExpressInfo.strPayTime); } else if (strTemp == "快递名称") { adoRst.GetFieldValue((short)2,ExpressInfo.strExpressCompany); } else if (strTemp == "快递单号") { adoRst.GetFieldValue((short)2,ExpressInfo.strExpressNo); } adoRst.MoveNext(); } if (ExpressInfo.vecBookInfo.size()>0) { vecStr.push_back(ExpressInfo); } iSheetCount++; } // 关闭数据库 database.Close(); } CATCH(CDBException, e) { // 数据库操作产生异常时... AfxMessageBox("数据库错误: " + e->m_strError); }
/////////////////////////////////////////////////////////////////////////////// // void GetExcelDriver(CListCtrl* pList, CString strTitle) // 參數: // pList 需要導出的List控件指针 // strTitle 導出的數據表標題 // 說明:\ // 導出CListCtrl控件的全部數據到Excel文件。Excel文件名由用戶通過"另存為" // 對話框輸入指定。創建名為strTitle的工作表,將List控件內的所有數據(包括列 // 名和數據項)以文本的形式保存到Excel工作表中。保持行列關係。 /////////////////////////////////////////////////////////////////////////////// void ExportExcelToList(CListCtrl* pList, CString strTitle) { CString warningStr; CDatabase database; CString sDriver; CString sExcelFile; CString sSql; CString tableName = strTitle; // 檢查是否有安裝Excel驅動 "Microsoft Excel Driver (*.xls)" sDriver = GetExcelDriver(); if (sDriver.IsEmpty()) { //沒有發現Excel驅動 AfxMessageBox(L"沒有安装Excel!\n請先安裝Excel軟件才能使用Excel導出功能!!"); return; } //默認文件名(獲得文件名) if (!LoadGetDefaultXlsFileName(sExcelFile)) return; //創建進行存取的字符串 sSql.Format(L"ODBC;DRIVER={%s};DSN='''';DBQ=%s",sDriver, sExcelFile); // 創建數據庫 (既Excel表格文件) if (database.Open(NULL,false,false,sSql)) //開啟資料庫 { pList->DeleteAllItems(); //創建結構表 CString sItem; CString columnName; LVCOLUMN columnData; columnData.mask = LVCF_TEXT; columnData.cchTextMax = 100; columnData.pszText = columnName.GetBuffer(100); int ListCount = 0; CRecordset recset(&database); /*****************修改SQL語法在這**************************/ sSql = L""; for (int j = 0; pList->GetColumn(j, &columnData); j++) { if (j != 0) { sSql = sSql + L", "; } sSql = sSql + columnData.pszText; } columnName.ReleaseBuffer(); sSql = L"SELECT " + sSql + L" FROM " + tableName; AfxMessageBox(sSql); recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly); while (!recset.IsEOF()) { pList->InsertItem(ListCount, NULL); for (int i = 0; pList->GetColumn(i, &columnData); i++) { pList->GetColumn(i, &columnData); recset.GetFieldValue(columnData.pszText, sItem); LONG Value = _ttol(sItem); sItem.Format(L"%d", Value); pList->SetItemText(ListCount, i, sItem); } //next ListCount++; recset.MoveNext(); } } //關閉數據庫 database.Close(); warningStr.Format(L"%s檔案導入成功!", sExcelFile); AfxMessageBox(warningStr); }