BOOL ReadExcel(const TCHAR* filePathName)
{
//启动
_Application _ExcelApp;
if(!_ExcelApp.CreateDispatch(_T("Excel.Application")))
{
AfxMessageBox(_T("启动Excel未能成功!"));
return FALSE;
}
Workbooks _Workbooks(_ExcelApp.GetWorkbooks());
//打开
_Workbook __Workbook(_Workbooks.Add(_variant_t(filePathName)));
Worksheets _Worksheets(__Workbook.GetWorksheets());
_Worksheet __Worksheet(_Worksheets.GetItem(_variant_t((long)1)));//1-based
Range _Range(__Worksheet.GetUsedRange()); //Used
Range _Rows(_Range.GetRows());
Range _Cols(_Range.GetColumns());
const long rows = _Rows.GetCount(); //行数
const long cols = _Cols.GetCount(); //列数
VARIANT var;
CString str;
m_dataTable.SetEmpty();
//读取表头
CString szTableHead;
int headRows = 0;
long row;
for (row=1; row<=rows; row++)
{
CString cellName;
cellName.Format(_T("A%d"), row);
Range _Cell(_Range.GetRange(_variant_t(cellName), _variant_t(cellName)));
var = _Cell.GetMergeCells();
if (-1 != var.boolVal)
{
_Cell.ReleaseDispatch();
break;
}
var = _Cell.GetFormula();
CString temp = CString(var.bstrVal);
szTableHead += temp;
headRows++;
_Cell.ReleaseDispatch();
}
m_dataTable.m_sTableHead = szTableHead;
//读取表格内容
for (row = headRows+1; row<=rows; row++)
{
TyStringTableRow dataRow;
for (long col = 1; col<=cols; col++)
{
var = _Range.GetItem(_variant_t(row), _variant_t(col));
str = (TCHAR *)(_bstr_t)var;
VariantClear( &var);
str.TrimRight();
dataRow.Add(str);
}
m_dataTable.Add(dataRow);
}
//关闭
__Workbook.Close(_variant_t((bool)false), _variant_t(filePathName), _variant_t((bool)false));
//退出
_ExcelApp.Quit();
_Rows.ReleaseDispatch();
_Cols.ReleaseDispatch();
_Range.ReleaseDispatch();
__Worksheet.ReleaseDispatch();
_Worksheets.ReleaseDispatch();
__Workbook.ReleaseDispatch();
_Workbooks.ReleaseDispatch();
_ExcelApp.ReleaseDispatch();
return TRUE;
}
{
//启动
_Application _ExcelApp;
if(!_ExcelApp.CreateDispatch(_T("Excel.Application")))
{
AfxMessageBox(_T("启动Excel未能成功!"));
return FALSE;
}
Workbooks _Workbooks(_ExcelApp.GetWorkbooks());
//打开
_Workbook __Workbook(_Workbooks.Add(_variant_t(filePathName)));
Worksheets _Worksheets(__Workbook.GetWorksheets());
_Worksheet __Worksheet(_Worksheets.GetItem(_variant_t((long)1)));//1-based
Range _Range(__Worksheet.GetUsedRange()); //Used
Range _Rows(_Range.GetRows());
Range _Cols(_Range.GetColumns());
const long rows = _Rows.GetCount(); //行数
const long cols = _Cols.GetCount(); //列数
VARIANT var;
CString str;
m_dataTable.SetEmpty();
//读取表头
CString szTableHead;
int headRows = 0;
long row;
for (row=1; row<=rows; row++)
{
CString cellName;
cellName.Format(_T("A%d"), row);
Range _Cell(_Range.GetRange(_variant_t(cellName), _variant_t(cellName)));
var = _Cell.GetMergeCells();
if (-1 != var.boolVal)
{
_Cell.ReleaseDispatch();
break;
}
var = _Cell.GetFormula();
CString temp = CString(var.bstrVal);
szTableHead += temp;
headRows++;
_Cell.ReleaseDispatch();
}
m_dataTable.m_sTableHead = szTableHead;
//读取表格内容
for (row = headRows+1; row<=rows; row++)
{
TyStringTableRow dataRow;
for (long col = 1; col<=cols; col++)
{
var = _Range.GetItem(_variant_t(row), _variant_t(col));
str = (TCHAR *)(_bstr_t)var;
VariantClear( &var);
str.TrimRight();
dataRow.Add(str);
}
m_dataTable.Add(dataRow);
}
//关闭
__Workbook.Close(_variant_t((bool)false), _variant_t(filePathName), _variant_t((bool)false));
//退出
_ExcelApp.Quit();
_Rows.ReleaseDispatch();
_Cols.ReleaseDispatch();
_Range.ReleaseDispatch();
__Worksheet.ReleaseDispatch();
_Worksheets.ReleaseDispatch();
__Workbook.ReleaseDispatch();
_Workbooks.ReleaseDispatch();
_ExcelApp.ReleaseDispatch();
return TRUE;
}