vc++读取写Excel
怎么解决呢,我用的是VS2010
// ADOConn.h: interface for the ADOConn class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_ADOCONN_H__E6DDDA0F_FF74_49EE_8A2A_00E2745D4972__INCLUDED_)
#define AFX_ADOCONN_H__E6DDDA0F_FF74_49EE_8A2A_00E2745D4972__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#import "C:\Program Files\Common Files\System\ado\msado15.dll"no_namespace\
rename("EOF","adoEOF")rename("BOF","adoBOF")
class ADOConn
{
public:
ADOConn();
virtual ~ADOConn();
void OnInitADOConn_Read(); //连接数据源数据库
void OnInitADOConn_Write();//链接目的数据库
int ReadExcel(int,int);//读取数据
int WriteExcel(int row,int col, int count,int data);//写数据
void ExitConnect(); //断开数据库连接
_ConnectionPtr m_pConnection; //添加一个指向Connection对象的指针
_RecordsetPtr m_pRecordset; //添加一个指向Recordest对象的指针
};
#endif // !defined(AFX_ADOCONN_H__E6DDDA0F_FF74_49EE_8A2A_00E2745D4972__INCLUDED_)
// ADOConn.cpp: implementation of the ADOConn class.
//
//////////////////////////////////////////////////////////////////////
//#include "stdafx.h"
#include "ADOConn.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
ADOConn::ADOConn()
{
}
ADOConn::~ADOConn()
{
}
void ADOConn::OnInitADOConn_Read()
{
::CoInitialize(NULL);
try{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConnect="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=ExcelData.xlsx;Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1\"";
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
catch(_com_error &e)
{
printf("ERROR");
printf("%s",e.ErrorMessage());
}
}
void ADOConn::OnInitADOConn_Write()
{
::CoInitialize(NULL);
try{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConnect="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Destination.xlsx;Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1\"";
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
catch(_com_error &e)
{
//printf("OPEN_ERROR\n");
printf("%s",e.ErrorMessage());
}
}
int ADOConn::ReadExcel(int row,int col)
{
char buffer[4];
char data[77];
int size_data;
sprintf(buffer,"F%d",col);
_variant_t temp;
_bstr_t bstrSQL="select * from [sheet1$]";
try
{
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(bstrSQL,_variant_t((IDispatch*)m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);
m_pRecordset->MoveFirst();
if (row==1)
{
temp=m_pRecordset->GetCollect(buffer);
strncpy(data, (_bstr_t)temp, sizeof(temp));
size_data=atoi(data);
}
else
{
for (int i=1; i<row; i++)
m_pRecordset->MoveNext();
temp=m_pRecordset->GetCollect(buffer);
strncpy(data, (_bstr_t)temp, sizeof(temp));
size_data=atoi(data);
}
}
catch(_com_error &e)
{
printf("%s",e.Description());
}
return size_data;
}
int ADOConn::WriteExcel(int row,int col, int count,int data)
{
char buffer[4];
printf(buffer,"F%d",col);
_variant_t temp;
_bstr_t bstrSQL="select * from [sheet1$]";
try
{
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(bstrSQL,_variant_t((IDispatch*)m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);
m_pRecordset->MoveFirst();
if (row==1)
{
temp=m_pRecordset->GetCollect(buffer);
m_pRecordset->AddNew();
m_pRecordset->PutCollect("buffer",data);
}
else
{
for (int i=1; i<row; i++)
m_pRecordset->MoveNext();
m_pRecordset->AddNew();
m_pRecordset->PutCollect("buffer",data);
}
m_pRecordset->Update();
}
catch(_com_error &e)
{
printf("%s",e.Description());
}
return 0;
}
void ADOConn::ExitConnect()
{
if(m_pRecordset!=NULL)
{
m_pRecordset->Close();
}
m_pConnection->Close();
::CoUninitialize();
}
其中 int ADOConn::WriteExcel(int row,int col, int count,int data)出错,请问怎么改,谢谢
还有我用CSpreadSheet编译提示出错,>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(137): error C2146: 语法错误: 缺少“;”(在标识符“SQLHWND”的前面)
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(137): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sqltypes.h(137): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
怎么解决呢,我用的是VS2010
[解决办法]
你直接用Excel的类型库就可以了
[解决办法]
微软有库提供了API可以直接对excel操作
[解决办法]
ADO很好用的,而且效率高
[解决办法]
add class ->mfc class from typelib->mircosoft excel(不同版本后面数字不同)