// DLG_User_Inport2.cpp : implementation file // #include "stdafx.h" #include "corpsms.h" #include "DLG_User_Inport2.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // DLG_User_Inport2 dialog #include "FGAddress.h" #include "FPAddress.h" #include "MainFrm.h" #include "DLG_AddWarning.h" DLG_User_Inport2::DLG_User_Inport2(CWnd* pParent /*=NULL*/) : CDialog(DLG_User_Inport2::IDD, pParent) { //{{AFX_DATA_INIT(DLG_User_Inport2) //}}AFX_DATA_INIT m_bInport = false; m_lAddressType = 0; m_bReMobile = false; m_bExportAll = false; memset(&m_szGroupID,0,sizeof(m_szGroupID)); } void DLG_User_Inport2::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(DLG_User_Inport2) DDX_Control(pDX, IDC_USER_INPORT_REMOBILE, m_B_ReMobile); DDX_Control(pDX, IDC_USER_INPORT_RECORD_SPLIT, m_C_RecordSplit); DDX_Control(pDX, IDC_USER_INPORT_FIELD_SPLIT, m_C_FieldSplit); DDX_Control(pDX, IDC_USER_INPORT_S1, m_B_Tips); DDX_Control(pDX, IDC_USER_INPORT_FILENAME, m_E_FileName); DDX_Control(pDX, IDC_USER_INPORT_LIST, m_L_List); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(DLG_User_Inport2, CDialog) //{{AFX_MSG_MAP(DLG_User_Inport2) ON_BN_CLICKED(IDC_USER_INPORT_SELALL, OnUserInportSelall) ON_BN_CLICKED(IDC_USER_INPORT_CLEAR, OnUserInportClear) ON_BN_CLICKED(IDC_USER_INPORT_GETFILE, OnUserInportGetfile) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // DLG_User_Inport2 message handlers BOOL DLG_User_Inport2::OnInitDialog() { CDialog::OnInitDialog(); if ( !m_bInport ) { this->SetWindowText(_T("导出地址本(*.txt , *.csv)")); CWnd * pWnd = (CWnd*)GetDlgItem(IDOK); pWnd->SetWindowText(_T("导 出")); pWnd = (CWnd*)GetDlgItem(IDC_USER_INPORT_S2); pWnd->SetWindowText(_T("导出字段与顺序(拖动选择,打勾为导出字段)")); pWnd = (CWnd*)GetDlgItem(IDC_USER_INPORT_S1); pWnd->SetWindowText(_T("导出txt/csv文件名")); m_C_FieldSplit.EnableWindow(false); m_C_RecordSplit.EnableWindow(false); } m_C_FieldSplit.SetCurSel(0); m_C_RecordSplit.SetCurSel(0); InitList(); /* if ( !m_bPAddress || !m_bInport) { m_B_ReMobile.ShowWindow(SW_HIDE); } */ return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void DLG_User_Inport2::OnOK() { BOOL b=User_Export(); if (b) CDialog::OnOK(); } void DLG_User_Inport2::SetInport(CAdoRecordSet * pAdoRS,const TCHAR * szGroupID,long lAddressType,BOOL bExportAll) { m_lAddressType= lAddressType; //通讯录类型,0-users,1-paddress,2-gaddress m_bExportAll=bExportAll; m_pAdoRS = pAdoRS; _tcscpy(m_szGroupID,szGroupID); } void DLG_User_Inport2::InitList() { m_L_List.Init(true,-1,-1,-1); m_L_List.InsertColumn( 0 , _T("顺序") , LVCFMT_LEFT , 40 , 0); m_L_List.InsertColumn( 1 , _T(" 字段名") , LVCFMT_LEFT , 120 , 1); m_L_List.SetTextColor( RGB(0,0,255) ); if ( m_lAddressType>0 ) { TCHAR * pItem[] = { _T("姓 名"), _T("昵 称"), _T("性 别"), _T("生 日"), _T("公 司"), _T("职 务"), _T("地 址"), _T("手 机"), _T("电 话"), _T("传 真"), _T("Email"), _T("QQ"), _T("备 注"), }; TCHAR Buf[256]; for ( int i = 0 ; i<13 ; i++ ) { m_L_List.InsertItem( i , _itot(i+1,Buf,10) ); m_L_List.SetItemText(i , 1 , pItem[i] ); m_L_List.SetItemData(i , i ); //设置这个是为了顺序不至于打乱 } } else { TCHAR * pItem[] = { _T("姓 名"), _T("昵 称"), _T("性 别"), _T("生 日"), _T("职 务"), _T("手 机"), _T("电 话"), _T("传 真"), _T("Email"), _T("QQ"), _T("备 注"), }; TCHAR Buf[256]; for ( int i = 0 ; i<11 ; i++ ) { m_L_List.InsertItem( i , _itot(i+1,Buf,10) ); m_L_List.SetItemText(i , 1 , pItem[i] ); m_L_List.SetItemData(i , i ); //设置这个是为了顺序不至于打乱 } } m_L_List.CheckAll(); m_L_List.NoverCheck(); m_L_List.ReShowSort(); } void DLG_User_Inport2::OnUserInportSelall() { m_L_List.CheckAll(); } void DLG_User_Inport2::OnUserInportClear() { m_L_List.ClearAll(); } BOOL DLG_User_Inport2::User_Export() { long lItemCount = m_L_List.GetItemCount(); long lExPortItem[50];memset(&lExPortItem,0,sizeof(lExPortItem)); for ( int j=0 ; j < 50 ; j++ ) lExPortItem[j] = -1; long lCheckCount = 0; for ( int i=0 ; i=4 ) lItemJ++; if ( m_lAddressType==0 && lItemJ>=6 ) lItemJ++; switch( lItemJ ) { case 0: //姓名 _tcscpy(Buf2,_T("姓 名")); break; case 1: //昵 称 _tcscpy(Buf2,_T("昵 称")); break; case 2: //Sex _tcscpy(Buf2,_T("性 别")); break; case 3: //生 日 _tcscpy(Buf2,_T("生 日")); break; case 4: //公 司 _tcscpy(Buf2,_T("公 司")); break; case 5: //职 务 _tcscpy(Buf2,_T("职 务")); break; case 6: //地 址 _tcscpy(Buf2,_T("地 址")); break; case 7: //手 机 _tcscpy(Buf2,_T("手 机")); break; case 8: //电 话 _tcscpy(Buf2,_T("电 话")); break; case 9: //传 真 _tcscpy(Buf2,_T("传 真")); break; case 10: //Email _tcscpy(Buf2,_T("Email")); break; case 11: //QQ _tcscpy(Buf2,_T("QQ")); break; case 12: //备 注 _tcscpy(Buf2,_T("备 注")); break; } _tcscat(Buf , Buf2 ); if ( j < lCheckCount-1 ) //最后一条不用加","号 _tcscat(Buf , _T(",") ); } _tcscat(Buf , _T("\r\n") ); //换行 #ifdef UNICODE CAdoRecordSet::Ado_W2A(Buf,szTempA); lBufLen = strlen(szTempA); fTalk.Write( szTempA , lBufLen ); #else lBufLen = _tcslen(Buf); fTalk.Write( Buf , lBufLen ); #endif } CString strSelect; CString strTable = _T("paddress"); if ( m_lAddressType==0 ) strTable = _T("users"); if ( m_lAddressType==2 ) strTable = _T("gaddress"); if ( m_bExportAll ) { strSelect.Format( _T("select * from %s where UserType='1' order by GroupID"),strTable ); //查找此组下的用户 } else { if ( _tcslen(m_szGroupID)<=0 ) //如果是根,导出所有 strSelect.Format( _T("select * from %s where GroupID is null or len(GroupID)=0 and UserType='1' ") ,strTable); //查找此组下的用户 else strSelect.Format( _T("Select * from %s where GroupID='%s' AND UserType='1' ") ,strTable, m_szGroupID ); //查找此组下的用户 } BOOL b = m_pAdoRS->Open( strSelect ); long lCount = m_pAdoRS->GetRecordCount(); if ( b && lCount ) { COleDateTime t; m_pAdoRS->MoveFirst(); while(!m_pAdoRS->IsEOF() ) { memset(Buf , 0 , sizeof(Buf) ); for( int j = 0 ; j< lCheckCount ; j++ ) //按按所选中的字段,取通讯录内容进行保存。 { memset(Buf2 , 0 , sizeof(Buf2) ); long lItemJ = lExPortItem[j]; if ( m_lAddressType==0 && lItemJ>=4 ) lItemJ++; if ( m_lAddressType==0 && lItemJ>=6 ) lItemJ++; switch( lItemJ ) { case 0: //姓名 m_pAdoRS->GetCollect( _T("Name") , Buf2 ); break; case 1: //昵 称 m_pAdoRS->GetCollect( _T("NickName") , Buf2 ); break; case 2: //Sex m_pAdoRS->GetCollect( _T("Sex") , Buf2 ); break; case 3: //生 日 m_pAdoRS->GetCollect( _T("Birthday") , t ); if ( t.GetStatus() == COleDateTime::valid ) _stprintf( Buf2 , _T("%04d-%02d-%02d") , t.GetYear(),t.GetMonth(),t.GetDay() ); else memset(Buf2 , 0 , sizeof(Buf2)); break; case 4: //公 司 m_pAdoRS->GetCollect( _T("Ltd") , Buf2 ); break; case 5: //职 务 m_pAdoRS->GetCollect( _T("Job") , Buf2 ); break; case 6: //地 址 m_pAdoRS->GetCollect( _T("Addr") , Buf2 ); break; case 7: //手 机 m_pAdoRS->GetCollect( _T("Mobile") , Buf2 ); break; case 8: //电 话 m_pAdoRS->GetCollect( _T("Tel") , Buf2 ); break; case 9: //传 真 m_pAdoRS->GetCollect( _T("Fax") , Buf2 ); break; case 10: //Email m_pAdoRS->GetCollect( _T("Email") , Buf2 ); break; case 11: //QQ m_pAdoRS->GetCollect( _T("QQ") , Buf2 ); break; case 12: //备 注 m_pAdoRS->GetCollect( _T("BZ") , Buf2 ); break; } _tcscat(Buf , Buf2 ); if ( j < lCheckCount-1 ) //最后一条不用加","号 _tcscat(Buf , _T(",") ); } _tcscat(Buf , _T("\r\n") ); //换行 #ifdef UNICODE CAdoRecordSet::Ado_W2A(Buf,szTempA); lBufLen = strlen(szTempA); fTalk.Write( szTempA , lBufLen ); #else lBufLen = _tcslen(Buf); fTalk.Write( Buf , lBufLen ); #endif lRecnCount++; //取得总记录数 lFileSize = lFileSize + lBufLen ; //取得总字节数 m_pAdoRS->MoveNext(); } } fTalk.Close(); this->EndWaitCursor(); _stprintf(Buf , _T("导出发送列表成功,具体如下:\n导出文件类型:TXT\n导出记录数:%d\n导出字节数:%d\n导出文件名:%s") , lRecnCount , lFileSize , szFileName); MessageBox( Buf , _T("导出成功"),MB_OK|MB_ICONINFORMATION ); return true; } void DLG_User_Inport2::OnUserInportGetfile() { #define FILE_FILTER_TEXT \ TEXT("txt文本文件 (*.txt)\0*.txt\0")\ TEXT("Excel csv 文件 (*.csv)\0*.csv\0")\ TEXT("所有文件 (*.*)\0*.*;\0\0") if ( m_bInport ) { TCHAR szFile[ 256 ]; TCHAR szFileB[ 256 ]; *szFileB = NULL; _stprintf( szFile , _T("Address.txt") ); OPENFILENAME sOpen; sOpen.lStructSize = sizeof( sOpen ); sOpen.hwndOwner = this->m_hWnd ; sOpen.Flags = OFN_EXPLORER|OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY; sOpen.lpstrFilter = FILE_FILTER_TEXT; sOpen.lpstrDefExt = _T("txt"); sOpen.lpstrCustomFilter = NULL; sOpen.nMaxCustFilter = 0; sOpen.lpstrFile = szFile; sOpen.nMaxFile = sizeof( szFile ); sOpen.lpstrFileTitle = szFileB; sOpen.nMaxFileTitle = sizeof( szFileB ); sOpen.lpstrInitialDir = NULL; sOpen.lpstrTitle = _T("打开导入发送列表的文件"); if ( ::GetOpenFileName( &sOpen ) ) { m_E_FileName.SetWindowText(sOpen.lpstrFile); return ; } } else { TCHAR szFile[ 256 ]; TCHAR szFileB[ 256 ]; *szFileB = NULL; _stprintf( szFile , _T("Address") ); if ( m_strName.GetLength()>0 ) _stprintf( szFile ,m_strName ); OPENFILENAME sOpen; sOpen.lStructSize = sizeof( sOpen ); sOpen.hwndOwner = this->m_hWnd ; sOpen.Flags = OFN_EXPLORER|OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY; sOpen.lpstrFilter = FILE_FILTER_TEXT; sOpen.lpstrDefExt = _T("csv"); sOpen.lpstrCustomFilter = NULL; sOpen.nMaxCustFilter = 0; sOpen.lpstrFile = szFile; sOpen.nMaxFile = sizeof( szFile ); sOpen.lpstrFileTitle = szFileB; sOpen.nMaxFileTitle = sizeof( szFileB ); sOpen.lpstrInitialDir = NULL; sOpen.lpstrTitle = _T("选择导出发送列表的文件"); if ( ::GetSaveFileName( &sOpen ) ) { m_E_FileName.SetWindowText(sOpen.lpstrFile); } } } void DLG_User_Inport2::SetOutportName(CString strName) { m_strName = strName; }