我从文本读出数据,然后填充到EXCEL中。读文本数据时使用的语句是:char str[500];fets(str,500,f);
但最后发现如果读取的数据列数少于25列的话就一切OK,但当列数大于25行的话便宜正常,但结果报错!不知道为什么?
我从文本读出的数据转化成float后才放进EXCEL中的。 
我个人理解是不是和char 类型的取值范围有关?但我不知道该怎么改一下!高手帮忙指出错误并给个改正的方案撒?

解决方案 »

  1.   

    读取的可能性:
    fgets()函数的应用是按行读取,返回字符串,但是,该函数在遇到换行符的时候会自动停止读取,而第二个参数则是决定了在遇到换行符之前能够一次性读取的字符数量,500个字符可能不够,或者,在第25列的地方遇到了一个换行符也可能。建议lz调试一下,在调试时观察一下错误发生前,读取出来的字符串(fgets()返回的)的末尾内容是不是换行符,或者,这个时候的字符数量是否超过了500,如果是字符数量的问题,可以设置成1024之类的大数字,毕竟fgets()是按照换行符来区分的。写入的可能性:
    写入的时候,估计你的最后一列应该到了第Z列和第AA列的交界处了,如此递增列标号会造成错误,可以修改一下这部分代码,估计,这个问题的可能性比较大。excel列是从A列到IV列,两位标号的可以想办法转换一些标号。
      

  2.   

    谢谢高手,问题好象就是你说的第二中,25列之前是A,B,C,D25列只有是AA,AB,AC,AD只不过暂时还不知道怎么转换
      

  3.   

    赞成楼上的说法,如果你用的方式是vc+OLE Automation控制excel的话,列的表示应该不是问题,直接用数字就可以了,如果受到某些限制而一定要用字符表示列名的话,可以在z列之后,采用[xx][xx]的方式,类似于二维数组的下标变换规律,遇到z之后,进一位。
      

  4.   

    我是用下面方法做的:
    CString  strcell;   for(n=1;n <columns;n++)   

    strcell.Format("%c1",(char)('A'+n)); 
    range.AttachDispatch(sheet.GetRange(COleVariant(B1),COleVariant(strcell)),true);   
    }
    但读到25列后又得判断填写,判断写了些好象不真确:
    for(n=1;n <columns;n++)   //columns是从文本读出的列数;

    strcell.Format("%c1",(char)('A'+n)); 
    range.AttachDispatch(sheet.GetRange(COleVariant(A1),COleVariant(strcell)),true);   
    if(n>25)
    {
     for(int m=1;m<25;m++)
    {
      strcell.Format("%c1",(char)('AA'+m)); 
      range.AttachDispatch(sheet.GetRange(COleVariant(AA1),COleVariant(strcell)),true);   
    }
    }
    }
    不知道为什么?
      

  5.   

    range.AttachDispatch(sheet.GetCells(),true);
    range.SetItem(COleVariant(long(m)),COleVariant(long(n)),COleVariant(str));
    m代表行号,n代表列号,str代表设置的值,就可以解决你的问题了。