大家有没有什么好的方法,在网上查了一些方法,大都是vc6.0对低版本Excel的操作,试了几次没有成功;还有一个问题,是不是必须建立mfc项目才能操作Excel
解决方案 »
- [求助]驱动信息(系统消息)的过滤问题?
- 求水晶报表8.5的下载地址
- 多文档程序,如何从MainFrame.cpp中向当前活动的视图发送重画消息,就是要该view中OnDraw()执行
- 一个非常奇怪的SOCK问题,前所未见????谁能告诉我原因啊?
- 写一个程序读出您所使用的PCI总线的配置信息。
- 如何在程序中显示砂漏?
- 看书看不明白的地方,谁能解释一下,能让我还能对学习VC有点信心?
- akiy是不是几位的图象都可以用你的方法抖动处理呀
- 上条问题还没搞定,请帮忙。(在线等)
- 请问:怎样在SDI中一打开程序就可以跳出一个对话框,谢谢。
- 帮忙找找原因?
- 难题求助:关于窗口隐藏后,在任务栏该窗口还在,而且右键关闭也没有办法将其关闭
“导入ole和com环境,再import mso11.dll 和 excel.exe”具体怎么做呢?
http://hi.baidu.com/onlywater/blog/item/2e708c2391c4914cad34deac.html
#7给出的资料是不错的如果ADO觉得不爽,可以用ODBC,移植性差点,但是更具有通用性
m_pRecordset.CreateInstance("ADODB.Connection");
上面这两个自变量怎么定义呢?
m_pConnection->Open((_bstr_t)adoinfo,"","",adModeUnknown);这个语句的时候就发生异常了跳出了,不知道怎么回事???
1. 建立基于对话框的MFC程序
2. 在“stdafx.h”文件的末尾处加上下面的语句(注意:路径需要根据具体的目录设置)
#import "C:\Program Files\Common Files\System\ado\msado27.tlb" no_namespace rename("EOF", "adoEOF")
或者
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
3. 在对话框中的“确定”按钮上双击,响应事件OnBnClickedOk()
4. 在事件OnBnClickedOk()中写代码,代码如下:void CExcelTestADODlg::OnBnClickedOk()
{
_ConnectionPtr m_pConnection = NULL;
_RecordsetPtr m_pRecordset = NULL;
CString m_SinFile;
CString m_TableName;
long lFiledCount = 0;
long lRowCount = 0; // 表的记录数目,不包括表格的表头行 CoInitialize(NULL); CFileDialog dlg(TRUE,_T(".xls"),NULL,OFN_OVERWRITEPROMPT,_T("Excel2003 Files (*.xls)|*.xls|Excel2007 Files (*.xlsx)|*.xlsx||"),NULL,NULL);
if(dlg.DoModal()==IDOK)
{
BeginWaitCursor();
CString FileExt=dlg.GetFileExt();
m_SinFile=dlg.GetPathName(); m_pConnection.CreateInstance("ADODB.Connection");
m_pRecordset.CreateInstance("ADODB.Connection");
CString adoinfo;
if(FileExt=="xlsx")
adoinfo.Format(_T("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s;Extended Properties=Excel 12.0"),m_SinFile);
else
adoinfo.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Extended Properties=Excel 8.0"),m_SinFile); try
{ //打开excel文件
m_pConnection->Open((_bstr_t)adoinfo,"","",adModeUnknown); ////读取表名
//_RecordsetPtr pRstSchema = NULL;
//pRstSchema = m_pConnection->OpenSchema(adSchemaTables);
//_bstr_t table_name; //// 循环读取excel文件中的所有表的名字
//while(!pRstSchema->adoEOF)
//{
// table_name = pRstSchema->Fields->GetItem("TABLE_NAME")->Value;
// m_TableName=(LPCSTR)table_name;
// pRstSchema->MoveNext();
//}
//pRstSchema->Close();
//pRstSchema.Release();
//pRstSchema=NULL;
////打开表
//char conntchar[150];
//sprintf(conntchar,"SELECT * FROM [yueanzhi$]",m_TableName);//(LPCSTR)m_TableName.GetBuffer()
//_bstr_t sqltext(conntchar); _RecordsetPtr pRecordset;
pRecordset.CreateInstance (__uuidof(Recordset)); try
{
// [Feature$]代表Excel表格的某个工作表的名称
pRecordset->Open("SELECT * FROM [Feature$]", // 查询DemoTable表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenStatic,//adOpenDynamic,adOpenKeyset
adLockOptimistic,
adCmdText); //得到字段数目
lFiledCount = pRecordset->GetFields()->GetCount();
//得到记录条数
lRowCount = pRecordset->GetRecordCount(); //获取字段名
_bstr_t *filedName = new _bstr_t[lFiledCount]; // 存储字段名
for (int filedIndex = 0;filedIndex < lFiledCount;filedIndex++)
{
filedName[filedIndex] = pRecordset->GetFields()->GetItem(_variant_t(long(filedIndex)))->GetName();
} //Suffiled=pRecordset->GetFields()->GetItem(_variant_t(long(0)))->GetName();//GetItem(_variant_t(0));
//XCorfiled=pRecordset->GetFields()->GetItem(_variant_t(long(1)))->GetName();
//YCorfiled=pRecordset->GetFields()->GetItem(_variant_t(long(2)))->GetName();
//Elevfiled=pRecordset->GetFields()->GetItem(_variant_t(long(3)))->GetName(); long lRowIndex = 0;
float *fFeatureData = new float[lFiledCount*lRowCount]; // 存储表格中的所有数据
pRecordset->MoveFirst();
while(!pRecordset->adoEOF)
{
for (int filedIndex = 0;filedIndex < lFiledCount;filedIndex++)
{
// 按行,然后对每条数据的各个字段进行存储
fFeatureData[lRowIndex*lFiledCount+filedIndex] = pRecordset->GetFields()->GetItem(_variant_t(filedName[filedIndex]))->Value;
}
//revNum=pRecordset->GetFields()->GetItem(_variant_t(Suffiled))->Value;
//x=pRecordset->GetFields()->GetItem(_variant_t(XCorfiled))->Value;
//y=pRecordset->GetFields()->GetItem(_variant_t(YCorfiled))->Value;
//Elev=pRecordset->GetFields()->GetItem(_variant_t(Elevfiled))->Value; pRecordset->MoveNext();
lRowIndex++;
} pRecordset->Close();
pRecordset.Release();
pRecordset = NULL;
if (filedName != NULL)
{
delete []filedName;
filedName = NULL;
}
if (fFeatureData != NULL)
{
delete []fFeatureData;
fFeatureData = NULL;
} }
catch(_com_error e)
{
EndWaitCursor();
AfxMessageBox(e.Description());
}
}
catch(_com_error e)
{
AfxMessageBox(e.Description()); EndWaitCursor();
return;
}
}}