zoukankan      html  css  js  c++  java
  • vs创建控制台程序使用C++读写excel文件(ODBC方式)

    1.创建一个vs项目,选择windows控制台应用程序,项目名称输入cppRWexcel

    2.在StdAfx.h文件最下方加入如下代码:

    #include <iostream>
    #include <afxdb.h>
    #include <odbcinst.h>
    using namespace std;
    

      

    3.在cppRWexcel.cpp中写入如下代码:

    // cppRWexcel.cpp: 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    
    //创建并写入Excel文件
    void WriteToExcel()
    {
    	CDatabase database;
    	CString sDriver = "Microsoft Excel Driver (*.xls)"; // Excel安装驱动
    	CString sExcelFile = "d:\demo.xls"; // 要建立的Excel文件
    	CString sSql;
    
    	TRY
    	{
    		// 创建进行存取的字符串
    		sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB="%s";DBQ=%s",sDriver, sExcelFile, sExcelFile);
    
    	// 创建数据库 (既Excel表格文件)
    	if (database.OpenEx(sSql,CDatabase::noOdbcDialog))
    	{
    		// 创建表结构(姓名、年龄)
    		sSql = "CREATE TABLE demo (Name TEXT,Age NUMBER)";
    		database.ExecuteSQL(sSql);
    
    		// 插入数值
    		sSql = "INSERT INTO demo (Name,Age) VALUES ('qinshujin',32)";
    		database.ExecuteSQL(sSql);
    
    		sSql = "INSERT INTO demo (Name,Age) VALUES ('jiyingjun',28)";
    		database.ExecuteSQL(sSql);
    
    		sSql = "INSERT INTO demo (Name,Age) VALUES ('zhangqi',28)";
    		database.ExecuteSQL(sSql);
    	}
    
    	// 关闭数据库
    	database.Close();
    	}
    		CATCH_ALL(e)
    	{
    		TRACE1("Excel驱动没有安装: %s", sDriver);
    	}
    	END_CATCH_ALL;
    }
    
    
    // 获取ODBC中Excel驱动
    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, '') + 1;
    	} while (pszBuf[1] != '');
    
    	return sDriver;
    }
    
    // 读取Excel文件
    void ReadFromExcel()
    {
    	CDatabase database;
    	CString sSql;
    	CString sItem1, sItem2;
    	CString sDriver;
    	CString sDsn;
    	CString sFile = "d:\demo.xls"; // 将被读取的Excel文件名
    
    									// 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)" 
    	sDriver = GetExcelDriver();
    	if (sDriver.IsEmpty())
    	{
    		// 没有发现Excel驱动
    		cout << "没有安装Excel驱动!" << endl;
    		return;
    	}
    
    	// 创建进行存取的字符串
    	sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s", sDriver, sFile);
    
    	TRY
    	{
    		// 打开数据库(既Excel文件)
    		database.Open(NULL, false, false, sDsn);
    
    	CRecordset recset(&database);
    
    	// 设置读取的查询语句.
    	sSql = "SELECT Name, Age "
    		"FROM demo "
    		"ORDER BY Name ";
    
    	// 执行查询语句
    	recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
    
    	// 获取查询结果
    	while (!recset.IsEOF())
    	{
    		//读取Excel内部数值
    		recset.GetFieldValue("Name", sItem1);
    		recset.GetFieldValue("Age", sItem2);
    		cout << sItem1 << "	" << sItem2 << endl;
    
    		// 移到下一行
    		recset.MoveNext();
    	}
    
    	// 关闭数据库
    	database.Close();
    
    	}
    		CATCH(CDBException, e)
    	{
    		// 数据库操作产生异常时...
    		AfxMessageBox("数据库错误: " + e->m_strError);
    	}
    	END_CATCH;
    }
    
    int main()
    {
    	WriteToExcel();
    	ReadFromExcel();
    	return 0;
    }
    

      

    4.项目属性更改(以下酌情,出现哪个错误改哪个)

    菜单栏 项目->cppRWexcel属性->配置属性->常规->项目默认值->MFC的使用->在共享 DLL 中使用 MFC。

    菜单栏 项目->cppRWexcel属性->配置属性->常规->项目默认值->字符集->使用多字节字符集。

    (vs2017可能需要修改)菜单栏 项目->cppRWexcel属性->配置属性->链接器->输入->附加依赖项中添加"legacy_stdio_definitions.lib"不含双引号。

    (vs2010可能需要修改)菜单栏 项目->cppRWexcel属性->配置属性->清单工具->输入和输出->嵌入清单->否。

    5.编译运行,即可看到d盘根目录下创建的excel文件,读写方式见上方代码,均为SQL语句。

  • 相关阅读:
    Python笔记 #17# Pandas: Merge
    MVC相关资料收集
    Python笔记 #16# Pandas: Operations
    Least slack time scheduling
    Python笔记 #15# Pandas: Missing Data
    Python笔记 #14# Pandas: Selection
    C++中const引用的是对象的时候只能调用该对象的f()const方法
    模板与泛型编程
    c++中的单例模式
    C/C++异常处理机制
  • 原文地址:https://www.cnblogs.com/renjiashuo/p/7545784.html
Copyright © 2011-2022 走看看