EXCEL表格里本来有四条记录并且能够导入到成功,可是在EXCEL表格里将记录数增加到30条,再执行程序的时候,只能导入十条左右,然后就运行出错了,为什么?????

解决方案 »

  1.   

    你至少也要调试一下,看看哪里出错吧?是从Excel中读取数据出错,还是写Access数据库出错
      

  2.   


    void CMaindlg::OnPutin() 
    {
    // TODO: Add your control notification handler code here
    CFileDialog FileDlg(TRUE);
    FileDlg.m_ofn.lpstrTitle="Choose The File You Want To Open!";
        FileDlg.m_ofn.lpstrFilter="Text File(*.xls)\0*.xls\0All File(*.*)\0*.*\0\0";
        FileDlg.m_ofn.lpstrDefExt="xls";
    CString FileDirect;
        if(IDOK==FileDlg.DoModal())
    {
          FileDirect=FileDlg.GetFileName();
    }
    CoInitialize(NULL);
    //定义变量
    _Application excelapp;
    Workbooks books;
    _Workbook book;
    Sheets sheets;
    _Worksheet sheet;
    Range range;
    Range usedRange;
    LPDISPATCH lpDisp;
    COleVariant vResult;
    COleVariant
    covTrue((short)TRUE),
    covFalse((short)FALSE),
    covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
    if(!excelapp.CreateDispatch("Excel.Application"))
    {
    MessageBox("确认是否安装了Excel");
    }
    books.AttachDispatch(excelapp.GetWorkbooks());
    CString strtext="G:\\毕业设计\\c++\\背景\\dri\\"+FileDirect;
    //打开Excel
      lpDisp = books.Open(strtext,  
                               covOptional, covOptional, covOptional, covOptional, covOptional,
                               covOptional, covOptional, covOptional, covOptional, covOptional,
                               covOptional, covOptional, covOptional, covOptional); book.AttachDispatch(lpDisp);
    sheets.AttachDispatch(book.GetWorksheets());
    lpDisp=book.GetActiveSheet();
    sheet.AttachDispatch(lpDisp);
    //读取已经使用区域的信息,包括已经使用的行数,列数,起始行,起始列
    usedRange.AttachDispatch(sheet.GetUsedRange());
    range.AttachDispatch(usedRange.GetRows());
    long iRowNum=range.GetCount();//取得已经使用的行数
    range.AttachDispatch(usedRange.GetColumns());
    long iColNum=range.GetCount();//取得已经使用的列数
    long iStartRow=usedRange.GetRow();//取得已经使用区域的起始行,从一开始
    long iStartCol=usedRange.GetColumn();//取得已经使用区域的起始列,从一开始
    UpdateData(true);
    ADOConn m_AdoConn;
    m_AdoConn.OnInitADOConn();
    CString student[10][10];
    _bstr_t sql,sql1,sql2,sql3,sql4;
    sql1="create table 报名表(编号 int ,姓名 char(30),性别 char(30),准考证号 char(30)PRIMARY KEY,邮箱 char(30),学院 char(30),级别 char(30),科目 char(30))";
    m_AdoConn.ExecuteSQL(sql1);
    for(int i=iStartRow;i<=iRowNum;i++)
    {
    for(int j=iStartCol;j<=iColNum;j++)
    {
    //读取单元格的值
    range.AttachDispatch(sheet.GetCells());
    range.AttachDispatch(range.GetItem(COleVariant((long)i),COleVariant((long)j)).pdispVal);
    vResult =range.GetValue2();  CString str,stry,strm,strd;
    SYSTEMTIME st;
    if(vResult.vt==VT_BSTR)//字符
    {
    str=vResult.bstrVal;
    }
    else if(vResult.vt==VT_R8)
    {
    str.Format("%f",vResult.dblVal);
    }
    else if(vResult.vt==VT_DATE)//时间格式
    {
    VariantTimeToSystemTime(vResult.date,&st);
    stry.Format("%d",st.wYear);
    strm.Format("%d",st.wMonth);
    strd.Format("%d",st.wDay);
    str=stry+"-"+strm+"-"+strd;
    }
    else if(vResult.vt==VT_EMPTY)//单元格为空
    {
    str="";
    }
    student[i-1][j-1]=str;
    }


    sql="insert into 报名表(编号,姓名,性别,准考证号,邮箱,学院,级别,科目)values('"+student[i-1][0]+"','"+student[i-1][1]+"','"+student[i-1][2]+"','"+student[i-1][3]+"','"+student[i-1][4]+"','"+student[i-1][5]+"','"+student[i-1][6]+"','"+student[i-1][7]+"')";
     m_AdoConn.ExecuteSQL(sql); }