Excel.Range r = MyExcel.get_Range("A1", NumToExeclRowStr(columncount) + "1");private string NumTochr(int Num)
        {
            int n = 64 + Num;
            return "" + (Char)n;
        }
        private string NumToExeclRowStr(int Num)
        {
            int X, Y;
            if (Num < 27)
            {
                return NumTochr(Num);
            }
            X = Num / 26;
            Y = Num - X * 26;
            return NumTochr(X) + NumTochr(Y);
        }
这个导出,为什么只能导出60多条列,超过这个列就提示错误,怎么回事

解决方案 »

  1.   

    Excel.Range r = MyExcel.get_Range("A1", NumToExeclRowStr(columncount) + "1");private string NumTochr(int Num)
      {
      int n = 64 + Num;
      return "" + (Char)n;
      }
      private string NumToExeclRowStr(int Num)
      {
      int X, Y;
      if (Num < 27)
      {
      return NumTochr(Num);
      }
      X = Num / 26;
      Y = Num - X * 26;
      return NumTochr(X) + NumTochr(Y);
      }
    这段是没有问题的,只要columncount<=256
      

  2.   

    楼的目的应该是根据数字计算EXCEL表示的列号
    EXCEL中列序号为1、2、3、4、5……
    对应的列号表示为A、B、C……Z、AA、AB、AC……AZ、BA……BZ、CA……CZ、……原来的代码列号算的不正确
    当列号应该是AZ、BZ、CZ……的时候,
    计算出来的结果是A@、B@、C@……
    这点楼主可以加断点看看下面是一个应该算正确的计算列号的代码,只要一个方法就够了
    不能计算超过702列,因为超过702列就需要三个字母表示了
            private static string NumToExeclRowStr( int Num )
            {
                string str = string.Empty;            {
                    int left = ( Num - 1 ) / 26;
                    int right = ( Num ) % 26;                str = ( string.Format( "{0}{1}", left == 0 ? "" : "" + (char)( left + 64 ), right == 0 ? "Z" : "" + (char)( right + 64 ) ) );
                }
                return str;
            }
      

  3.   

    楼主的代码我测了,用EXCEL2003,是正常的,只是列数只能在[1-256]之间楼上的代码也是一样,只是变了一下写法,可能我的EXCEL 2003没有那么强大,列只能256列,再多就挂了,也显示不出来了
      

  4.   

    不知道你怎么测的,还是EXCEL能识别@作为列名
    你说NumToExeclRowStr(52)的结果是什么?