SmsManager/DLG_HZB_Export.cpp
2025-01-14 10:46:18 +08:00

297 lines
8.1 KiB
C++

// DLG_HZB_Export.cpp : implementation file
//
#include "stdafx.h"
#include "smsmanager.h"
#include "DLG_HZB_Export.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// DLG_HZB_Export dialog
DLG_HZB_Export::DLG_HZB_Export(CWnd* pParent /*=NULL*/)
: CDialog(DLG_HZB_Export::IDD, pParent)
{
//{{AFX_DATA_INIT(DLG_HZB_Export)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_pList = NULL;
m_pItem = NULL;
m_lItemCount=0;
m_lAddJH = -1;
}
void DLG_HZB_Export::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(DLG_HZB_Export)
DDX_Control(pDX, IDC_USER_EXPORT_LIST, m_L_List);
DDX_Control(pDX, IDC_USER_EXPORT_FILENAME, m_E_FileName);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(DLG_HZB_Export, CDialog)
//{{AFX_MSG_MAP(DLG_HZB_Export)
ON_BN_CLICKED(IDC_USER_EXPORT_SELALL, OnUserExportSelall)
ON_BN_CLICKED(IDC_USER_EXPORT_CLEAR, OnUserExportClear)
ON_BN_CLICKED(IDC_USER_EXPORT_FILENAME_SEL, OnUserExportFilenameSel)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// DLG_HZB_Export message handlers
BOOL DLG_HZB_Export::OnInitDialog()
{
CDialog::OnInitDialog();
InitList();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void DLG_HZB_Export::InitList()
{
//m_wndList.SetHeadings(_T("序号,50; 企业名称,200;特服号,60;发送量,80;计费量,80;总发送量,80;可用余额,80;发送,80;转发,80;日程提醒,80;短信邮差,80;接收,80;娱乐短信,80;商务通,80;"));
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) );
TCHAR Buf[256]={0};
for ( int i = 0 ; i<m_lItemCount ; i++ )
{
m_L_List.InsertItem( i , _itot(i+1,Buf,10) );
m_L_List.SetItemText(i , 1 , m_pItem[i].szItem );
m_L_List.SetItemData(i , i ); //设置这个是为了顺序不至于打乱
}
m_L_List.CheckAll();
m_L_List.NoverCheck();
m_L_List.ReShowSort();
if ( m_lAddJH==-2 )
{
m_L_List.SetCheck(0,false);
m_L_List.SetCheck(1,false);
m_L_List.SetCheck(2,false);
m_L_List.SetCheck(3,false);
m_L_List.SetCheck(4,false);
m_L_List.SetCheck(7,false);
m_L_List.SetCheck(9,false);
m_L_List.SetCheck(10,false);
m_L_List.SetCheck(11,false);
m_L_List.SetCheck(13,false);
}
}
void DLG_HZB_Export::OnUserExportSelall()
{
m_L_List.CheckAll();
}
void DLG_HZB_Export::OnUserExportClear()
{
m_L_List.ClearAll();
}
void DLG_HZB_Export::OnOK()
{
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<lItemCount ; i++ )
{
if ( m_L_List.GetCheck(i) )
{
lExPortItem[lCheckCount] = m_L_List.GetItemData(i) ;
lCheckCount ++;
}
}
if ( lCheckCount <=0 )
{
MessageBox( _T("你必须从左边的字段列表中选择一个或多个导出字段。") , _T("选择错误") , MB_OK|MB_ICONWARNING );
return ;
}
TCHAR szFileName[512];
m_E_FileName.GetWindowText( szFileName , sizeof(szFileName) );
if ( _tcslen(AllTrim(szFileName)) <=0 )
{
MessageBox( _T("你必须输入导出的文件名。") , _T("错误") , MB_OK|MB_ICONWARNING );
m_E_FileName.SetFocus();
return ;
}
CFile fTalk;
if ( !fTalk.Open( szFileName , CFile::modeReadWrite|CFile::modeCreate ) )
{
TCHAR Buf[512];
_stprintf( Buf , _T("创建文件:%s\n产生错误!") , szFileName );
MessageBox( Buf , _T("错误") , MB_ICONWARNING|MB_OK );
return ;
}
long lAdrCount = m_pList->GetItemCount();
TCHAR Buf[1024];
TCHAR Buf2[256];
long lRecnCount= 0; //总记录数
long lFileSize = 0; //文件总字节数
long lBufLen = 0;
for ( i = 0; i<lAdrCount ; i++ )
{
memset(Buf , 0 , sizeof(Buf) );
for( int j = 0 ; j< lCheckCount ; j++ ) //按按所选中的字段,取通讯录内容进行保存。
{
memset(Buf2 , 0 , sizeof(Buf2) );
////m_wndList.SetHeadings(_T("序号,50; 企业名称,200;特服号,60;发送量,80;计费量,80;总发送量,80;可用余额,80;发送,80;转发,80;日程提醒,80;短信邮差,80;接收,80;娱乐短信,80;商务通,80;"));
switch( lExPortItem[j] )
{
case 0: //企业名称
m_pList->GetItemText( i , 1 , Buf2 , sizeof(Buf2) );
break;
case 1: //昵称
if ( m_lAddJH == 1 )
{
Buf2[0]='#';
m_pList->GetItemText( i , 2 , Buf2+1 , sizeof(Buf2) );
}
else
{
m_pList->GetItemText( i , 2 , Buf2 , sizeof(Buf2) );
}
break;
case 2: //生日
m_pList->GetItemText( i , 3 , Buf2 , sizeof(Buf2) );
break;
case 3: //职务
m_pList->GetItemText( i , 4 , Buf2 , sizeof(Buf2) );
break;
case 4: //电话
m_pList->GetItemText( i , 5 , Buf2 , sizeof(Buf2) );
break;
case 5: //手机
m_pList->GetItemText( i , 6 , Buf2 , sizeof(Buf2) );
break;
case 6: //Email
m_pList->GetItemText( i , 7 , Buf2 , sizeof(Buf2) );
break;
case 7: //Email
m_pList->GetItemText( i , 8 , Buf2 , sizeof(Buf2) );
break;
case 8: //Email
m_pList->GetItemText( i , 9 , Buf2 , sizeof(Buf2) );
break;
case 9: //Email
m_pList->GetItemText( i , 10 , Buf2 , sizeof(Buf2) );
break;
case 10: //Email
m_pList->GetItemText( i , 11 , Buf2 , sizeof(Buf2) );
break;
case 11: //Email
m_pList->GetItemText( i , 12 , Buf2 , sizeof(Buf2) );
break;
case 12: //Email
m_pList->GetItemText( i , 13 , Buf2 , sizeof(Buf2) );
break;
case 13: //Email
m_pList->GetItemText( i , 14 , Buf2 , sizeof(Buf2) );
break;
case 14: //Email
m_pList->GetItemText( i , 15 , Buf2 , sizeof(Buf2) );
break;
}
ExChar(Buf2,_T(","));
ExChar(Buf2,_T("\r"));
ExChar(Buf2,_T("\n"));
ExChar(Buf2,_T("\t"));
_tcscat(Buf , Buf2 );
if ( j < lCheckCount-1 ) //最后一条不用加_T(",")号
_tcscat(Buf , _T(",") );
}
_tcscat(Buf , _T("\r\n") ); //换行
CStringA strA;
#ifdef _UNICODE
strA = CW2A(Buf);
#else
strA = Buf;
#endif
lBufLen = strA.GetLength();
fTalk.Write( strA.GetBuffer() , lBufLen );
lRecnCount++; //取得总记录数
lFileSize = lFileSize + lBufLen ; //取得总字节数
}
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 );
CDialog::OnOK();
}
void DLG_HZB_Export::OnUserExportFilenameSel()
{
TCHAR szFile[256] = { 0 };
TCHAR szFileB[ 256] = { 0 };
TCHAR szFilter[ 256 ] = { 0 };
TCHAR szAllFile[ 50 ] = { 0 };
*szFileB = NULL;
if ( m_lAddJH == 1 )
_stprintf( szFile , _T("HZB.csv") );
if ( m_lAddJH == -2 )
_stprintf( szFile , _T("List.csv") );
if ( m_lAddJH == -3 )
_stprintf( szFile , _T("Pay.csv") );
_stprintf( szFilter , _T("Excel csv(*.csv)\0"));
_tcsncpy( (szFilter + _tcslen( szFilter ) + 1 ) , _T("*.csv") , 5);
//memset( (szFilter + _tcslen( szFilter ) + 1 +5 ) , 0 , 2 );
//加入所有文件
_stprintf( szAllFile , _T("所有文件(*.*)\0"));
_stprintf( ( szAllFile + _tcslen( szAllFile ) + 1 ) , _T("*.*") , 3);
//memset( ( szAllFile + _tcslen( szAllFile ) + 1 + 3 ) , 0 , 2 );
memcpy( szFilter + _tcslen( szFilter ) + 1 + 5 + 1 ,
szAllFile , (_tcslen( szAllFile) + 1 + 5 + 3)*sizeof(TCHAR));
OPENFILENAME sOpen;
sOpen.lStructSize = sizeof( sOpen );
sOpen.hwndOwner = this->m_hWnd ;
sOpen.Flags = OFN_EXPLORER|OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY;
sOpen.lpstrFilter = szFilter;
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_HZB_Export::SetParam(CListCtrl *pList)
{
m_pList = pList;
}
void DLG_HZB_Export::SetListItem( SortItem * pItem , long lCount , long lAddJH)
{
m_pItem = pItem;
m_lItemCount = lCount;
m_lAddJH = lAddJH;
}