strValue = range.GetText().bstrVal;//没错,总是VT_BSTR //... no more in this case //别忘了 app.Quit(); range.ReleaseDispatch(); sheet.ReleaseDispatch(); sheets.ReleaseDispatch(); book.ReleaseDispatch(); books.ReleaseDispatch(); app.ReleaseDispatch(); return TRUE;//I've got !!! 哈哈! }来者请签到,明日散分!
参考
http://community.csdn.net/Expert/topic/3138/3138542.xml?temp=.44038032
你是怎么读的,也用文本形式读出来看看
1。你引用的代码段是用ADO连的,偶不很清楚,不知是否有只用ODBC的方法?
2。m_Database.OpenEx(..)//成功
rs.Open(..)//成功
rs.GetFieldValue(nField, str)//正常的文本、数字、日期字段都能成功
对于那种异常情况,我用rs.GetODBCFieldInfo得到的类型是SQL_DOUBLEkillfocus(killfocus)
那些单元格好像没有公式,但是是从用友里导出来的。如果是用公式,就不能得到一些想关的信息吗?多谢!
熬了一通宵,没用ODBC,但终于都搞定了!
为使后来的兄弟免受一夜之苦,将相关代码贴出来:BOOL GetCellValue(LPCTSTR lpszFile,
LPCTSTR lpszCell/*Like "A1"*/,
CString& strValue)
{
_Application app;
Workbooks books;
_Workbook book;
Worksheets sheets;
_Worksheet sheet;
Range range;
//创建Excel 2000服务器(启动Excel)
if (!app.CreateDispatch("Excel.Application",NULL))
{
AfxMessageBox("创建Excel服务失败!");
return FALSE;
}
books.AttachDispatch(app.GetWorkbooks(),true);
book.AttachDispatch(books.Add(COleVariant(lpszFile))); //得到Worksheets
sheets.AttachDispatch(book.GetWorksheets(),true); //怎样获取所有表单的名称?如下:
long lCount = wssMysheets.GetCount();
for(long n=1; n<=lCount; n++)
{
sheet.AttachDispatch(sheets.GetItem(COleVariant((long)n))); CString strSheetName = (sheet.GetName());//得到了,类推可得到所有的
break;
} //
//总是得到字符串形的值,可以读取公式计算出来的单元格值。
//
// 如果是货币字段,得到的是:19,200.00 ;
// 日期字段,为:2004-8-3等,需要转换一下,但这很容易了!
//
range = sheet.GetRange(COleVariant(lpszCell), COleVariant(lpszCell) );
strValue = range.GetText().bstrVal;//没错,总是VT_BSTR //... no more in this case //别忘了
app.Quit(); range.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
app.ReleaseDispatch(); return TRUE;//I've got !!! 哈哈!
}来者请签到,明日散分!