VC6操作XLS

简单代码如下:

bool CTVMSADMApp::ParseXLS(CString szPath,PYZWLinkArray & yzwLinkArray)
{
	// TODO: Add your command handler code here
    _Application excelApp;   
    Workbooks books;
    _Workbook book;
    Worksheets sheets;
    _Worksheet sheet;
    Range range;

  //  Range xlsCells,xlsCol;
    LPDISPATCH lpDisp;   
    
    COleVariant covTrue((short)TRUE),covFalse((short)FALSE),covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);   

    //创建Excel 2000服务器(启动Excel)   
    if (!excelApp.CreateDispatch("Excel.Application",NULL))
    {
        AfxMessageBox("创建Excel服务失败!");
        return false;
    }

    excelApp.SetVisible(FALSE);          //使Excel可见 true
    excelApp.SetUserControl(FALSE);      //允许其它用户控制Excel true

    books.AttachDispatch(excelApp.GetWorkbooks());
    try
    {
        lpDisp = books.Open(szPath,
          covOptional,  covTrue, covOptional, covOptional, covOptional,
            covOptional, covOptional, covOptional, covOptional, covOptional,
            covOptional, covOptional, covOptional, covOptional);
    }
    catch (...)
    {
        books.Close();
        excelApp.Quit();
       
        CoUninitialize();
        return false;
    }

    //Get work book
    book.AttachDispatch(lpDisp);
    //Get work sheets
    sheets.AttachDispatch(book.GetWorksheets());

    lpDisp=book.GetActiveSheet();
    sheet.AttachDispatch(lpDisp);

//    读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列
    Range usedRange;
    usedRange.AttachDispatch(sheet.GetUsedRange());
    range.AttachDispatch(usedRange.GetRows());
    int iRowUsed=range.GetCount();                  //已经使用的行数
   
    range.AttachDispatch(usedRange.GetColumns());
    int iColNum=range.GetCount();                  //已经使用的列数
   
    int iStartRow=usedRange.GetRow();              //已使用区域的起始行,从1开始
    int iStartCol=usedRange.GetColumn();            //已使用区域的起始列,从1开始

	int nStartRow;    ///有用的数据开始的行
	COleVariant vResult;
	///寻找起始行
	
	for(int i=iStartRow; i<iStartRow+iRowUsed; i++)
	{
		range.AttachDispatch(sheet.GetCells());
        range.AttachDispatch(range.GetItem (COleVariant((long)(i)),COleVariant((long)1)).pdispVal );
		
		vResult=range.GetValue2();
		vResult.ChangeType(VT_BSTR);
		CString strResult=vResult.bstrVal;
		if(strResult=="序号")
		{
			nStartRow=i+1;
			break;
		}
	}

	//int rightDataCount=0;
	for(i=nStartRow; i<iStartRow+iRowUsed; i++)
	{
		YStruct  *pYXYZWS=new YStruct;
		bool bHasUsefulData=false;

		for(int j=1; j<8; j++)
		{
			range.AttachDispatch(sheet.GetCells());
		    range.AttachDispatch(range.GetItem (COleVariant((long)(i)),COleVariant((long)(j))).pdispVal);

			vResult=range.GetValue2();
			vResult.ChangeType(VT_BSTR);
			CString str=vResult.bstrVal;

			pYXYZWS->nSerialNo=-1;
		}
		if(bHasUsefulData)
		{
			yzwLinkArray.Add(pYXYZWS);
		}
else delete pYXYZWS;
	}

    //release
    book.Close(covOptional,COleVariant(szPath),covOptional);
    books.Close();
    excelApp.Quit();

	return true;
}
初始化Com组件:

BOOL CTVMSADMApp::InitInstance()
{
	AfxEnableControlContainer();

	if(!SUCCEEDED(::CoInitialize(NULL)))
	{
		AfxMessageBox("Init Com Failed!");
		return false;
	}

记得最后释放:

CoUninitialize();没有不知道什么结果。

注意:excel.h excel.cpp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值