BCB中多个listview分SHEET导出到一个EXCEL中报错,该怎么处理

BCB中多个listview分SHEET导出到一个EXCEL中报错
报错为这里sysvari.h文件中的这个函数
  Variant Variant::OlePropertyGet(const String& name, P1 p1)
  {
    TAutoArgs<1> args;
    args[1] = p1;
    return OlePropertyGet(name, static_cast<TAutoArgsBase*>(&args));//这里报错  
   }

报的错是“raised exception class EOleSysError with message'发生意外。',Process stopped,Use Step or Run to continue."

我的listview导出到EXCEL的函数内容如下
    i_cols1 = lv1->Columns->Count;
    i_rows1 = lv1->Items->Count;
    i_cols2 = lv2->Columns->Count;
    i_rows2 = lv2->Items->Count;
    i_cols3 = lv3->Columns->Count;
    i_rows3 = lv3->Items->Count;
    i_cols4 = lv4->Columns->Count;
    i_rows4 = lv4->Items->Count;

    //路径
    TSaveDialog* sd = new TSaveDialog(NULL);
    sd->DefaultExt = "xls";
    sd->Filter = "*.xls";
    __try
    {
        if(s_path_to_save.Trim().Length())
            sd->FileName = s_path_to_save;
        if(sd->Execute())
        {
            s_path_to_save = sd->FileName;
            //验证文件是否已存在
            if(FileExists(s_path_to_save) && MessageBox(NULL, "文件已存在,覆盖原文件吗?", "提示", MB_ICONQUESTION|MB_YESNO)!=ID_YES)
                return;
        }
        else
            return;
    }
    __finally
    {
        delete sd;
    }

    //扫描文档的列和行
    Variant Ex, wb, st1, st2, st3, st4, range;
    try
    {
        Ex = Variant::CreateObject("Excel.Application");
    }
    catch(...)
    {
        return;
    }
    Ex.OlePropertySet("Visible",true);
    Ex.OlePropertySet("DisplayAlerts", false);

    Ex.OlePropertyGet("Workbooks").OleFunction("Add"); // 工作表

    //选择工作表1
    Ex.OlePropertyGet("ActiveWorkbook").OlePropertyGet("Sheets", 1).OleProcedure("Select");
    wb = Ex.OlePropertyGet("ActiveWorkBook");
    st1 = wb.OlePropertyGet("ActiveSheet");
    st1.OlePropertySet("Name","A");
    //写标题 并加粗 锁定
    for(int i=1; i<=i_cols1; i++)
    {
        st1.OlePropertyGet("Cells", 1, i).OlePropertySet("Value", lv1->Columns->Items[i-1]->Caption.c_str());
        st1.OlePropertyGet("Cells", 1, i).OlePropertyGet("Font").OlePropertySet("Bold", true);
    }
    //选中
    st1.OlePropertyGet("Rows", 2).OleProcedure("Select");
    //冻结窗格
    Ex.OlePropertyGet("ActiveWindow").OlePropertySet("FreezePanes", true);
    //开始写数据内容
    for(int i=0; i<i_rows1; i++)
    {              
        st1.OlePropertyGet("Cells", i+2, 1).OlePropertySet("NumberFormatLocal", "@");            
        st1.OlePropertyGet("Cells", i+2, 1).OlePropertySet("Value", lv1->Items->Item[i]->Caption.c_str());
        for(int j=0; j<i_cols1-1; j++)
        {
            st1.OlePropertyGet("Cells", i+2, j+2).OlePropertySet("NumberFormatLocal", "@");
            st1.OlePropertyGet("Cells", i+2, j+2).OlePropertySet("Value", lv1->Items->Item[i]->SubItems->Strings[j].c_str());
        }