Chinaunix首页 | 论坛 | 博客
  • 博客访问: 216874
  • 博文数量: 7
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 385
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-29 11:28
文章分类
文章存档

2011年(1)

2008年(6)

我的朋友

分类: C/C++

2008-04-07 11:14:54

把CListCtrl数据写成Excel文件,网上资料多介绍的是ODBC的操作方式。因为我采用的是ADO连接MDB数据库,统计查询的结果用CListCtrl显示在界面上,然后根据要求需要把CListCtrl数据写成Excel文件,下面给出采用ADO的操作方式,虽说和ODBC大同小异,但毕竟有异,所以把我稍作改写的代码贴在此处,以便给需要者参考。

void CDlgClientSingalCPJG::OnOK() 
{
ADODB::_ConnectionPtr mcon;

mcon.CreateInstance("ADODB.Connection");

CString constr;

constr="Provider=Microsoft.Jet.OLEDB.4.0;\
Data Source=C:\\du-XIAO.xls;\
Extended Properties = Excel 8.0";

mcon->Open(_bstr_t(LPCTSTR(constr)),"","",ADODB::adModeUnknown);


// 创建表结构
int i;
LVCOLUMN columnData;
CString columnName;
int columnNum = 0;
CString strH , sSql;
CString strV; 
CString tableName = "客户销量";   //SHEET

sSql = "";
strH = "";
columnData.mask = LVCF_TEXT;
columnData.cchTextMax =100;
columnData.pszText = columnName.GetBuffer (100);
for(i=0;m_list.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 +  " ) ";
mcon->Execute(_bstr_t(LPCTSTR(sSql)), NULL, ADODB::adCmdText);

   
// 插入数据项
int nItemIndex;
for (nItemIndex=0; nItemIndex < m_list.GetItemCount ();nItemIndex++){
 strV = "";
 for(i=0;i {
  if (i!=0)
  {
   strV = strV + ", " ;
  }
  strV = strV + " '" + m_list.GetItemText(nItemIndex,i) +"' ";
 }
 
 sSql = "INSERT INTO "+ tableName 
  +" ("+ strH + ")"
  +" VALUES("+ strV + ")";
 mcon->Execute(_bstr_t(LPCTSTR(sSql)), NULL, ADODB::adCmdText);

}

mcon->Close();

AfxMessageBox("写入成功!");

CDialog::OnOK();
}

阅读(1837) | 评论(0) | 转发(0) |
0

上一篇:工作了

下一篇:将MFC类封装为DLL

给主人留下些什么吧!~~