当前位置:数据库 > SQLServer >>

c++ 读写Excel及数据导入SQLServer

c++ 读写Excel及数据导入SQLServer
      
          C++操作Excel ,网上的资料还是比较多的,写这篇文章也是分享给初学者一些经验。                 
本人 觉得CSpreadSheet.h这个类封装的还不错。下面我就如何使用这个类介绍一下,
[cpp] 
////////////////main.cpp/////////////////////////////////////////////////////  
  
#include <string>  
#include<afxdb.h>  
#include<odbcinst.h>  
#include "CSpreadSheet.h"  
using std::string;  
  
#pragma warning(disable:4146)  
#pragma warning(disable:4786)  
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")  
  
//插入到数据库  
bool InsertExcel(CString str1,CString str2)  
{    
 try     
 {     
  CDatabase m_db;  
  if (!m_db.IsOpen())   
   {   
    m_db.OpenEx("Dsn=MyDatabase;uid=Administrator;trusted_connection=Yes;app=Microsoft? Visual Studio? 2005;wsid=LIYU\SQLEXPRESS;database=MyDdatabase",0);  
   }  
    
  CString sql("insert into Students(myname,age) values('"+ str1+"','"+str2+"')");  
  m_db.ExecuteSQL(sql);  
  
  if(m_db.IsOpen())   
  {   
    m_db.Close();  
  }   
  return true;  
 }     
 catch(_com_error e)      
 {     
  string ErrorMessage("数据库连接关闭失败:"),Description,Source;  
  Description=e.Description();  
  Source=e.Source();  
  ErrorMessage+=e.ErrorMessage();  
  ErrorMessage=ErrorMessage+"\r\n"+Source+"\r\n"+Description;  
  ::MessageBox(NULL,ErrorMessage.c_str(),"错误",MB_OK);  
  return   false;     
 }     
   
  
}  
//获取路径  
CString GetAddr()  
{  
       
 CString sFile,sPath;  
                                   
 //获取主程序所在路径,存在sPath中  
 GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);  
 sPath.ReleaseBuffer ();  
    int nPos;  
 nPos=sPath.ReverseFind ('\\');  
 sPath=sPath.Left (nPos);  
  
 sFile = sPath + "\\Demo.xls";   
 return sFile;  
}  
 
[cpp] 
//得到驱动  
CString GetExcelDriver()  
{  
    char szBuf[2001];  
    WORD cbBufMax = 2000;  
    WORD cbBufOut;  
    char *pszBuf = szBuf;  
    CString sDriver;  
  
    // 获取已安装驱动的名称(涵数在odbcinst.h里)  
    if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))  
        return "";  
      
    // 检索已安装的驱动是否有Excel...  
    do  
    {  
        if (strstr(pszBuf,"Excel") != 0)  
        {  
            //发现 !  
            sDriver = CString(pszBuf);  
            break;  
        }  
        pszBuf = strchr(pszBuf, '\0') + 1;  
    }  
    while (pszBuf[1] != '\0');  
  
    return sDriver;  
}  
 
 
[cpp]  
//读取Excel  
void ReadFromExcel()   
{  
    TRY  
    {  
        CString str=GetAddr();  
        if(str.IsEmpty())  
            ::MessageBox(NULL,"无法获取当前路径",NULL,MB_OK);  
        else  
        {  
            CSpreadSheet SS(str,"Students");  
            CStringArray Rows, Column;  
            CString strContents = "";  
            CString sItem[3]={"0"};  
            for (int i = 2; i < SS.GetTotalRows()+1; i++)  
            {  
                // 读取一行  
                SS.ReadRow(Rows, i);  
                strContents.Empty();  
                for (int j = 0; j < Rows.GetSize(); j++)  
                {  
                    strContents = Rows.GetAt(j);  
                    sItem[j]=strContents;  
                    printf("%s\t",sItem[j]);  
                }  
                printf("\n");  
                if(!InsertExcel(sItem[1],sItem[2]))  
                {  
                    ::MessageBox(NULL,"导入数据出错","错误",MB_OK);  
                    return;  
                }             
            }  
        }               
    }  
    CATCH(CDBException, e)  <
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,