在VC中对EXCEL操作,怎样保存、关闭EXCEL文件?Saveas函数后面有一大堆参数,应该怎么用?最好给出源代码,提供链接也可以

解决方案 »

  1.   

    {
    WIN32_FIND_DATA FileData; 
    HANDLE hSearch;  USES_CONVERSION;
    hSearch = FindFirstFile(A2T(strTableName), &FileData); 
    if (hSearch != INVALID_HANDLE_VALUE) // 找到

    if(IDYES == ::MessageBox(this->m_hWnd, _T("该文件已经存在,要替换吗?"), 
    _T("提示"), MB_YESNO))
    {
    DeleteFile(A2T(strTableName));
    }
    else
    {
    return TRUE;
    }

    COleVariant
    covTrue((short)TRUE),
    covFalse((short)FALSE),
    covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    _Application app;
    Workbooks books;
    _Workbook book;
    Worksheets sheets;
    _Worksheet sheet;
    Range range;
    Font font;
    Range cols; app.CreateDispatch(_T("Excel.Application"));
    app.SetVisible(1);
    //Get a new workbook.
    books = app.GetWorkbooks();
    book = books.Add (covOptional);

    //Get the first sheet.
    sheets =book.GetSheets();
    sheet = sheets.GetItem(COleVariant((short)1)); // 设置报表的标题
    range = sheet.GetRange(COleVariant(_T("A1")), COleVariant(_T("A1")));
    range.SetValue(COleVariant(A2T(strTitle)));
    font = range.GetFont();
    font.SetBold(covTrue);
    font.SetSize(COleVariant(_T("14"))); // 设置项目名
    range = sheet.GetRange(COleVariant(_T("A2")), COleVariant(_T("A2")));
    range.SetValue(COleVariant(_T("学号")));
    range = sheet.GetRange(COleVariant(_T("B2")), COleVariant(_T("B2")));
    range.SetValue(COleVariant(_T("姓名"))); // 获得年级数
    TCHAR tstr[MAX_PATH];
    CHAR strTemp[MAX_PATH];
    int nGrade = 0;
    std::vector<OBJECTSTRUC *> szVecObj; nGrade = SendMessage(GetDlgItem(IDC_COMBO_GRADE), CB_GETCURSEL, 0, 0) + 1; if(!GetObjectFromTable(nGrade, szVecObj))
    {
    ::MessageBox(this->m_hWnd, _T("从表中读取科目信息错误"), _T("提示"), MB_OK | MB_ICONEXCLAMATION);
    return FALSE;
    } // 把科目的名称写上去
    for(int i = 0; i < szVecObj.size() - 2; i ++)
    {
    sprintf(strTemp, "%c2", 'C' + i);
    range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
    range.SetValue(COleVariant(A2T(szVecObj[i]->m_chaName)));
    } // 添加主科总分
    sprintf(strTemp, "%c2", 'C' + szVecObj.size() - 2);
    range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
    range.SetValue(COleVariant(_T("主科总分"))); // 添加主科名次
    sprintf(strTemp, "%c2", 'C' + szVecObj.size() - 1);
    range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
    range.SetValue(COleVariant(_T("主科名次"))); // 添加总分
    sprintf(strTemp, "%c2", 'C' + szVecObj.size());
    range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
    range.SetValue(COleVariant(_T("总分"))); // 添加总分名次
    sprintf(strTemp, "%c2", 'C' + szVecObj.size() + 1);
    range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
    range.SetValue(COleVariant(_T("总分名次"))); // 添加考场说明以及学号、姓名 // 读出表中的所有记录
    ADODB::_RecordsetPtr pRS = NULL;
    pRS.CreateInstance(__uuidof(ADODB::Recordset));
    SendMessage(GetDlgItem(IDC_COMBO_SOURCE_TABLENAME),
    WM_GETTEXT, MAX_PATH, (LONG)tstr);
    sprintf(strTemp, "SELECT 学号, 姓名 FROM %s", T2A(tstr));
    pRS->Open(strTemp, _variant_t((IDispatch *)g_pConn, TRUE), 
     ADODB::adOpenStatic, ADODB::adLockOptimistic, ADODB::adCmdText); int rows = 3;
    for(i = 0; i < g_room.size(); i ++)
    {
    // 添加考场人数及说明
    sprintf(strTemp, "A%d", rows);
    range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
    sprintf(strTemp, "%d场%d人", atol(g_room[i].m_chaNo), atol(g_room[i].m_chaPersons));
    range.SetValue(COleVariant(A2T(strTemp))); sprintf(strTemp, "B%d", rows ++);
    range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
    range.SetValue(COleVariant(A2T(g_room[i].m_chaDescription))); // 添加学号和姓名
    VARIANT var;
    for(int j = 0; j < atol(g_room[i].m_chaPersons); j ++)
    {
    if(!pRS->adoEOF)
    {
    sprintf(strTemp, "A%d", rows);
    range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
    var = pRS->GetCollect("学号");
    range.SetValue(COleVariant(var.lVal)); sprintf(strTemp, "B%d", rows ++);
    range = sheet.GetRange(COleVariant(A2T(strTemp)), COleVariant(A2T(strTemp)));
    var = pRS->GetCollect("姓名");
    range.SetValue(COleVariant(OLE2T(var.bstrVal)));
    pRS->MoveNext();
    }
    }
    } pRS->Close(); // 保存结果, 退出Excel程序
    book.SaveAs(COleVariant(A2T(strTableName)), covOptional, 
    covOptional, covOptional, covOptional, covOptional, 
    1,covOptional, covFalse, covOptional, covOptional);
    //book.SaveCopyAs(var111);

    //VariantClear(&var111);
    app.Quit(); return TRUE;
    }