QQ登录

只需一步,快速开始

上位机通过ADO数据库读取保存EXCEL文件 xlsx

[ 复制链接 ]

上位机通过ADO数据库读取保存EXCEL文件 xlsx

上位机通过ADO数据库读取保存EXCEL文件 xlsx


上位机通过ADO数据库读取保存EXCEL文件,        在编程时有两种引擎可以选择用来操作EXCEL表格
Microsoft.Jet.OLEDB.4.0(简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(简称 ACE 引擎)。
   Jet 引擎可以访问 Office 97-2003,但不能访问 Office 2007。
   ACE 引擎是随 Office 2007 一起发布的数据库连接组件,既可以访问 Office 2007,也可以访问 Office 97-2003。
   Microsoft.ACE.OLEDB.12.0 可以访问正在打开的 Excel 文件,而 Microsoft.Jet.OLEDB.4.0 不可以。
下载地址可以到微软管网看看
https://www.microsoft.com/zh-cn/download/details.aspx?id=23734
https://www.microsoft.com/zh-cn/download/details.aspx?id=13255

ADO访问Excel数据驱动连接字符串的写法:
    //Excel2003
    ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source='+ Excel_FILENAME +';Extended Properties=Excel 8.0; HDR=Yes; IMEX=1';
    //Excel2003 和 Excel2007,前提是需要安装Office 2007的ACE引擎驱动
    ConnectionString := 'Provider=Microsoft.Ace.OleDb.12.0; Data Source='+ Excel_FILENAME +';Extended Properties=''Excel 12.0; HDR=Yes'''; //IMEX=1

"IMEX=1;" 通知驱动程序始终将“互混”(数字,日期,字符串等)数据列作为文本读取,同时这个选项有可能影响到excel表格拒绝写操作,也就是说,如果我们要求写入excel的话,这个选项不能被设置
HDR 是No的话,表示ADO将不把Excel文件的第一行作为字段名

例程实现xls文件的读取保存操作,xlsx文件,可以选择另一引擎,测试

这样例程就完成实现了基于ADO数据库的数据源动态创建,数据添加,
数据删改,
数据删除,
数据查询,
excel表格的读取与保存功能;
例程中关键代码为
  1. BOOL CADO::SaveAsXLS(CString sPath,CListCtrl *pList)
  2. {
  3.         if(NULL == pList)
  4.                 return false;
  5.         if(!IsWindow(pList->m_hWnd) )
  6.                 return false;
  7.         if(!access(sPath,00))
  8.                 DeleteFile(sPath);//文件存在,删除
  9.         CString sTableName = "Sheet1";//表名
  10. //
  11.         int nFieldNum = pList->GetHeaderCtrl()->GetItemCount();
  12.         int nRowNum   = pList->GetItemCount();
  13.         LVCOLUMN hItem;
  14.         char cBuf[MAX_PATH]="";
  15.         ZeroMemory(&hItem,sizeof(LVCOLUMN));
  16.         hItem.mask       = LVCF_TEXT;
  17.         hItem.cchTextMax = MAX_PATH;
  18.         hItem.pszText    = cBuf;
  19.         CString sHead;
  20. //创建表头
  21.         _ConnectionPtr pConn;
  22.         try {
  23.                 pConn.CreateInstance(__uuidof(Connection));        
  24.                 _bstr_t vSQL="Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0';Persist Security Info=False;Data Source='"+sPath+"'";
  25.         pConn->PutCursorLocation(adUseClient);
  26.                 pConn->Open(vSQL, "", "", adModeUnknown);        
  27.                 for(int i=0;i<nFieldNum;i++)
  28.                 {
  29.                         pList->GetColumn(i,&hItem);
  30.                         sHead+=cBuf;
  31.                         sHead+=" TEXT,";
  32.                 }
  33.                 sHead=sHead.Left(sHead.GetLength()-1);
  34.                 vSQL = "CREATE TABLE "+sTableName+" ("+sHead+")";
  35.                 pConn->Execute(vSQL, NULL, adCmdText);
  36.         }
  37.         catch (_com_error e){
  38.                 AfxMessageBox(e.ErrorMessage());
  39.                 return false;
  40.         }
  41. //写入内容
  42.     try{
  43.                 for(int x=0;x<nRowNum;x++)
  44.                 {
  45.                         sHead.Empty();
  46.                         for(int y=0;y<nFieldNum;y++)
  47.                         {
  48.                                 sHead+="\'";
  49.                                 sHead+=pList->GetItemText(x,y);
  50.                                 sHead+="\',";
  51.                         }
  52.                         sHead=sHead.Left(sHead.GetLength()-1);
  53.                         _bstr_t vSQL = "insert into "+sTableName+" values("+sHead+")";
  54.                         pConn->Execute(vSQL, NULL, adCmdText);
  55.                 }
  56.     }
  57.         catch(_com_error &e){
  58.         TRACE("%s\n", (LPCTSTR)e.Description());
  59.                 AfxMessageBox(e.ErrorMessage());
  60.                 pConn->Close();
  61.                 pConn.Release();
  62.                 return false;
  63.     }
  64.         return true;
  65. }
  66. BOOL CADO::OpenXLS(CString sPath,CListCtrl *pList)
  67. {
  68.         if(-1 == access(sPath,00))
  69.                 return false;
  70.         if(NULL == pList)
  71.                 return false;
  72.         if(!IsWindow(pList->m_hWnd) )
  73.                 return false;
  74.         
  75.         _ConnectionPtr pConn;
  76.         pConn.CreateInstance(__uuidof(Connection));
  77.         try
  78.     {
  79. /*                _bstr_t strConnect = "";
  80.                 // Excel2007
  81.         strConnect =_T("Provider=Microsoft.ACE.OLEDB.12.0;");
  82.                 strConnect +=_T(";Extended Properties='Excel 12.0 Xml;HDR=YES'");
  83.                 // Excel2003
  84.                 //strConnect =_T("Provider=Microsoft.ACE.OLEDB.4.0;");
  85.         strConnect +=_T("Data Source=");
  86.         strConnect +=path;
  87.                 //strConnect +=_T(";Extended Properties='Excel 8.0 Macro'");*/
  88.                 _bstr_t vSQL="Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source='"+sPath+"';Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
  89.         pConn->Open(vSQL, "", "", adModeUnknown);
  90.     }catch(_com_error &e){
  91.                 AfxMessageBox(e.ErrorMessage());
  92.                 return false;
  93.     }
  94.         _RecordsetPtr  pRec;
  95.     pRec.CreateInstance(__uuidof(Recordset));  
  96.     try{
  97.                 _bstr_t vSQL = "SELECT * FROM [Sheet1$]";
  98.         pRec->Open(vSQL,pConn.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText);
  99.     }catch(_com_error &e){
  100.         AfxMessageBox(e.ErrorMessage());
  101.                 pConn->Close();
  102.                 pConn.Release();
  103.                 return false;
  104.     }
  105.         long nFieldNum = pRec->Fields->GetCount();
  106.         if(nFieldNum<pList->GetHeaderCtrl()->GetItemCount())
  107.                 goto END;
  108.         if(pRec->adoBOF)
  109.                 goto END;
  110.         pList->DeleteAllItems();
  111.         pRec->MoveFirst();
  112.         while(!pRec->adoEOF)
  113.         {
  114.                 int i= pList->GetItemCount();
  115.                 pList->InsertItem(i,"");
  116.                 for(long x=0;x<nFieldNum;x++)
  117.                 {        
  118.                         pList->SetItemText(i,x,(_bstr_t)pRec->Fields->GetItem(x)->Value );
  119.                 }
  120.                 pRec->MoveNext();
  121.         }
  122.         return true;
  123. END:
  124.         pRec->Close();
  125.     pRec.Release();
  126.         pConn->Close();
  127.         pConn.Release();
  128.         return false;
  129. }
复制代码
  1. void CMy123View::OnButton5()
  2. {
  3.         CFileDialog dlg(FALSE,".xls","gkbc8",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Worksheet Files (*.xls)|*.xls|All Files (*.*)|*.*||",NULL);
  4.         if(IDOK==dlg.DoModal())
  5.         {
  6.                 CListCtrl*pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
  7.                 m_ado.SaveAsXLS(dlg.GetPathName(),pList);
  8.         }
  9. }
  10. void CMy123View::OnButton6()
  11. {
  12.         CFileDialog dlg(TRUE,".xls","gkbc8",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Worksheet Files (*.xls)|*.xls|All Files (*.*)|*.*||",NULL);
  13.         if(IDOK==dlg.DoModal())
  14.         {
  15.                 CListCtrl*pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
  16.                 m_ado.OpenXLS(dlg.GetPathName(),pList);
  17.         }        
  18. }
复制代码
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:上位机通过ADO数据库读取保存EXCEL文件 xlsx.rar 
文件大小:41.44 KB  售价:3金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  




回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索