vs创建控制台程序使用C++读写excel文件(ODBC方式)
1.创建一个vs项目,选择windows控制台应用程序,项目名称输入cppRWexcel
2.在StdAfx.h文件最下方加入如下代码:
1 2 3 4 | #include <iostream> #include <afxdb.h> #include <odbcinst.h> using namespace std; |
3.在cppRWexcel.cpp中写入如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | // 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, '\0' ) + 1; } while (pszBuf[1] != '\0' ); 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 << "\t" << 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语句。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步