#import "C:\Program Files\Common Files\Microsoft Shared\OFFICE11\mso.dll" rename("RGB", "MSRGB")
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" raw_interfaces_only, rename("Reference", "ignorethis"), rename("VBE", "testVBE")
#import "C:\Program Files\Microsoft Office\OFFICE11\excel.exe" exclude("IFont", "IPicture") rename("RGB", "ignorethis"), rename("DialogBox", "ignorethis"), rename("VBE", "testVBE"), rename("ReplaceText", "EReplaceText"), rename("CopyFile","ECopyFile"), rename("FindText", "EFindText"), rename("NoPrompt", "ENoPrompt")using namespace Office;
using namespace Excel ;class COperateExcel2003
{
public:
COperateExcel2003();
~ COperateExcel2003();
public:
_ApplicationPtr pApplication ; WorkbooksPtr pWorkbooks;
_WorkbookPtr pThisWorkbook ; WorksheetsPtr pWorksheets;
_WorksheetPtr pThisWorksheet ;
/*SheetsPtr*/
RangePtr pThisRange ;
_variant_t vt ;public:
//int ExportExcelFile();
BOOL OpenExcelFile(int &nRows);
//int GetRowS();
private:
BOOL CreateExcelInstance();
};#include "stdafx.h"
#include "OperateExcel2003.h"
COperateExcel2003::COperateExcel2003()
{
CoInitialize(NULL); pApplication = NULL ; pWorkbooks = NULL;
pThisWorkbook = NULL ; pWorksheets = NULL;
pThisWorksheet = NULL ; pThisRange = NULL ;
}
COperateExcel2003::~COperateExcel2003()
{
if(pThisRange)
pThisRange.Release(); if(pThisWorksheet)
pThisWorksheet.Release();
if(pWorkbooks)
pWorkbooks.Release(); if(pThisWorkbook)
pThisWorkbook.Release();
if(pWorkbooks)
pWorkbooks.Release(); if(pApplication)
{
pApplication->Quit();
pApplication.Release();
} CoUninitialize();
}
BOOL COperateExcel2003::OpenExcelFile(int &nRows)
{
BOOL bIsRet = FALSE; if(!CreateExcelInstance())
return bIsRet; pApplication->PutVisible (0,VARIANT_TRUE); pWorkbooks = pApplication->Workbooks;
pThisWorkbook = pWorkbooks->Open("H:\\My VC++ Proj\\HelpFile.xls"); pWorksheets = pThisWorkbook->GetWorksheets();/*走到这里报错,说ExcelToIni.exe 中的 0x7c812afb 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012f9d8 处的 _com_error。*/
pThisWorksheet = pWorksheets->GetItem(1); pThisRange = pThisWorksheet->GetCells();
nRows = pThisRange->GetRow();//这里我想得到此excel的row数 bIsRet = TRUE; return bIsRet;
}
BOOL COperateExcel2003::CreateExcelInstance()
{
BOOL bIsRet = TRUE;
if(S_OK != pApplication.CreateInstance("Excel.Application"))
bIsRet = FALSE; return bIsRet;
}没操作过excel,上面的流程对不?
我主要是想打开一份excel然后两列两列的存入ini文件中。列数为偶数。
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" raw_interfaces_only, rename("Reference", "ignorethis"), rename("VBE", "testVBE")
#import "C:\Program Files\Microsoft Office\OFFICE11\excel.exe" exclude("IFont", "IPicture") rename("RGB", "ignorethis"), rename("DialogBox", "ignorethis"), rename("VBE", "testVBE"), rename("ReplaceText", "EReplaceText"), rename("CopyFile","ECopyFile"), rename("FindText", "EFindText"), rename("NoPrompt", "ENoPrompt")using namespace Office;
using namespace Excel ;class COperateExcel2003
{
public:
COperateExcel2003();
~ COperateExcel2003();
public:
_ApplicationPtr pApplication ; WorkbooksPtr pWorkbooks;
_WorkbookPtr pThisWorkbook ; WorksheetsPtr pWorksheets;
_WorksheetPtr pThisWorksheet ;
/*SheetsPtr*/
RangePtr pThisRange ;
_variant_t vt ;public:
//int ExportExcelFile();
BOOL OpenExcelFile(int &nRows);
//int GetRowS();
private:
BOOL CreateExcelInstance();
};#include "stdafx.h"
#include "OperateExcel2003.h"
COperateExcel2003::COperateExcel2003()
{
CoInitialize(NULL); pApplication = NULL ; pWorkbooks = NULL;
pThisWorkbook = NULL ; pWorksheets = NULL;
pThisWorksheet = NULL ; pThisRange = NULL ;
}
COperateExcel2003::~COperateExcel2003()
{
if(pThisRange)
pThisRange.Release(); if(pThisWorksheet)
pThisWorksheet.Release();
if(pWorkbooks)
pWorkbooks.Release(); if(pThisWorkbook)
pThisWorkbook.Release();
if(pWorkbooks)
pWorkbooks.Release(); if(pApplication)
{
pApplication->Quit();
pApplication.Release();
} CoUninitialize();
}
BOOL COperateExcel2003::OpenExcelFile(int &nRows)
{
BOOL bIsRet = FALSE; if(!CreateExcelInstance())
return bIsRet; pApplication->PutVisible (0,VARIANT_TRUE); pWorkbooks = pApplication->Workbooks;
pThisWorkbook = pWorkbooks->Open("H:\\My VC++ Proj\\HelpFile.xls"); pWorksheets = pThisWorkbook->GetWorksheets();/*走到这里报错,说ExcelToIni.exe 中的 0x7c812afb 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012f9d8 处的 _com_error。*/
pThisWorksheet = pWorksheets->GetItem(1); pThisRange = pThisWorksheet->GetCells();
nRows = pThisRange->GetRow();//这里我想得到此excel的row数 bIsRet = TRUE; return bIsRet;
}
BOOL COperateExcel2003::CreateExcelInstance()
{
BOOL bIsRet = TRUE;
if(S_OK != pApplication.CreateInstance("Excel.Application"))
bIsRet = FALSE; return bIsRet;
}没操作过excel,上面的流程对不?
我主要是想打开一份excel然后两列两列的存入ini文件中。列数为偶数。
不过你抱的错误是一个_com_error类型的异常,你可以看一下异常的原因BOOL COperateExcel2003::OpenExcelFile(int &nRows)
{
CString strError;
BOOL bIsRet = FALSE;
if(!CreateExcelInstance())
return bIsRet;
try
{
pApplication->PutVisible (0,VARIANT_TRUE);
pWorkbooks = pApplication->Workbooks;
pThisWorkbook = pWorkbooks->Open("H:\\My VC++ Proj\\HelpFile.xls");
pWorksheets = pThisWorkbook->GetWorksheets();/*走到这里报错,说ExcelToIni.exe 中的 0x7c812afb 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012f9d8 处的 _com_error。*/
pThisWorksheet = pWorksheets->GetItem( _variant_t((long)1));
pThisRange = pThisWorksheet->GetCells();
nRows = pThisRange->GetRow();//这里我想得到此excel的row数
bIsRet = TRUE;
}
catch(_com_error &e )
{
strError = (LPCTSTR)e.Description(); // 这里能得到异常的原因,你看一下
}
return bIsRet;
}
// Also provides simple error checking.
//
Interface* operator->() const
{
if (m_pInterface == NULL) {
_com_issue_error(E_POINTER);
} return m_pInterface;
}