一个关于EXCEL读写的问题,请高手帮忙!我在网上找的代码,是写数据到EXCEL文件,用VC6.0编译运行没有问题C/C+
一个关于EXCEL读写的问题,请高手帮忙!
我在网上找的代码,是写数据到EXCEL文件,用VC6.0编译运行没有问题
- C/C++ code
#include <afxdb.h> // this example creates the Excel file C:\DEMO.XLS, puts in a worksheet with two// columns (one text the other numeric) an appends three no-sense records.//void Put2Excel(){ CDatabase database; CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // exactly the same name as in the ODBC-Manager CString sExcelFile = "c:\\demo.xls"; // Filename and path for the file to be created CString sSql; TRY { // Build the creation string for access without DSN sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s", sDriver,sExcelFile,sExcelFile); // Create the database (i.e. Excel sheet) if( database.OpenEx(sSql,CDatabase::noOdbcDialog) ) { // Create table structure sSql = "CREATE TABLE demo (Name TEXT,Age NUMBER)"; database.ExecuteSQL(sSql); // Insert data sSql = "INSERT INTO demo (Name,Age) VALUES ('Bruno Brutalinsky',45)"; database.ExecuteSQL(sSql); sSql = "INSERT INTO demo (Name,Age) VALUES ('Fritz Pappenheimer',30)"; database.ExecuteSQL(sSql); sSql = "INSERT INTO demo (Name,Age) VALUES ('Hella Wahnsinn',28)"; database.ExecuteSQL(sSql); } // Close database database.Close(); } CATCH_ALL(e) { TRACE1("Driver not installed: %s",sDriver); } END_CATCH_ALL;} void main(){ Put2Excel();}但是要是我把上面的代码改成带2个变量的,就只能创建EXCEL文件和数据结构,但是数据却不能写人EXCEL文件,请高手帮忙看看是哪里有错误,谢谢!
- C/C++ code
#include <afxdb.h> // this example creates the Excel file C:\DEMO.XLS, puts in a worksheet with two// columns (one text the other numeric) an appends three no-sense records.//void Put2Excel(LPSTR name, int age){ CDatabase database; CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // exactly the same name as in the ODBC-Manager CString sExcelFile = "c:\\demo.xls"; // Filename and path for the file to be created CString sSql; TRY { // Build the creation string for access without DSN sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s", sDriver,sExcelFile,sExcelFile); // Create the database (i.e. Excel sheet) if( database.OpenEx(sSql,CDatabase::noOdbcDialog) ) { // Create table structure sSql = "CREATE TABLE demo (Name TEXT,Age NUMBER)"; database.ExecuteSQL(sSql); // Insert data sSql = "INSERT INTO demo (Name,Age) VALUES ("+(CString)name+","+(CString)age+")"; database.ExecuteSQL(sSql); } // Close database database.Close(); } CATCH_ALL(e) { TRACE1("Driver not installed: %s",sDriver); } END_CATCH_ALL;} void main(){ Put2Excel("Bruno",45);}[解决办法]
char a[10];
itoa(age,a,10);
// sSql = "INSERT INTO demo (Name,Age) VALUES ("+(CString)name+","+(CString)age+")";
// 错了,int型转出来乱的
sSql = "INSERT INTO demo (Name,Age) VALUES ("+(CString)name+","+a+")";
[解决办法]
这张表已经create了,你反复create当然不行了
再写一个函数叫insert2execl与void Put2Excel(LPSTR name, int age)基本一致
但是下面这段话去掉
// Create table structure
sSql = "CREATE TABLE demo (Name TEXT,Age NUMBER)";
database.ExecuteSQL(sSql);
第一次调用Put2Excel,第二次以后都用insert2execl
