Пример #1
0
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;
	}
}
Пример #2
0
//////////////////////////////////////////////////////////////////////////////
//	函数: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);
		
	}
}
Пример #3
0
///////////////////////////////////////////////////////////////////////////////
//	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遍历每一行的循环
}
Пример #4
0
//也是导入
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);
	}
Пример #5
0
///////////////////////////////////////////////////////////////////////////////
//	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);
}