void CList2Excel::ExportListToExcel(CListCtrl* pList, CString strTitle,CString strExcFile)
{
CString warningStr;
if (pList->GetItemCount ()>0)
{
CDatabase database;
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动
CString sExcelFile = strExcFile; // 要建立的Excel文件
CString sSql;
CString strField = "",strField2 = "";
int m;
int n = pList->GetItemCount();
// 创建进行存取的字符串
sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=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;
CString strV;
sSql = "";
strH = "";
columnData.mask = LVCF_TEXT;
columnData.cchTextMax =256;
columnData.pszText = columnName.GetBuffer (256);
for(i=0;pList->GetColumn(i,&columnData);i++)
{
strField = strField + "[" + columnData.pszText +"]" + " char(255), ";
strField2 = strField2 + "[" + columnData.pszText +"], ";
}
columnName.ReleaseBuffer ();
m = i;
// 创建表结构
sSql.Format("CREATE TABLE [%s] (",strTitle);
strField.Delete(strField.GetLength()-2, 2);
strField += ")";
sSql += strField;
database.ExecuteSQL(sSql);
strField2.Delete(strField2.GetLength()-2, 2);
//Add By HuangXiao Ke;把导出时进度信息显示出来,耦合性太大,如果别的程序要用这个累,把这些无关代码去掉
CD_Progress* pDlg = (CD_Progress*)g_dlgQueryManager.GetDialog(IDD_DIALOG_PROGRESS);
pDlg->ShowWindow(SW_SHOW);
pDlg->m_cProgress.SetRange(0,n);
pDlg->m_cProgress.SetPos(0);
CString str;
// 插入数值
for (i=0; i<n; i++)
{
pDlg->m_cProgress.SetPos(i);
sSql="";
sSql.Format("INSERT INTO [%s] (",strTitle);
sSql += strField2;
sSql += ") VALUES (";
for (int j = 0; j <m ; j++)
{
str = "";
str.Format("'%s', ", pList->GetItemText(i,j));
sSql = sSql + str;
}
sSql.Delete(sSql.GetLength()-2, 2);
sSql += ")";
//OutputDebugString(sSql);
database.ExecuteSQL(sSql);
}
pDlg->ShowWindow(SW_HIDE);
}
// 关闭数据库
database.Close();
warningStr.Format("导出文件保存于%s.xls!",sExcelFile);
AfxMessageBox(warningStr);
}
}