WEB开发网
开发学院软件开发VC 类似EXCEL的报表类库 阅读

类似EXCEL的报表类库

 2006-07-23 11:25:41 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 此代码是一个电子表格类库,还不是很完善,类似EXCEL的报表类库,希望大家给多点意见和建议,我会尽快把相应功能丰富进去的,图表显示,支持HTML文件存储,我的信箱:zzxiong@citiz.net现在这个sample不是很完整,我也正在完善中

本文示例源代码或素材下载

此代码是一个电子表格类库,还不是很完善,希望大家给多点意见和建议,我会尽快把相应功能丰富进去的。我的信箱:zzxiong@citiz.net

现在这个sample不是很完整,我也正在完善中,相应的函数接口到时我会整理成一个文档发布给大家。

声明:

对于此代码中可能引用了其他网站上的一些技术,如果侵犯了相关作者的权益请尽快联系我,我会删除其中不合适部分。也请下载此代码的人尊重代码的原作者的意愿。若下载者要使用此代码请自行征求原作者的意见。

1.12版本现支持单元格合并,文本对齐方式,字体,字体颜色,表格线定制,单元格读写权控制,列排序,动态增删行列,支持通过剪贴板同其他软件间的数据进行交互,支持单元格图形显示。可根据开发者需要进行二次开发,类库提供比较丰富的开发接口类函数,支持类似EXCEL的所见机所得的打印预览。

在下一版本中作者还将加入单元格公式计算,数据库绑定,图表显示,支持HTML文件存储。

以下为单元格公式解析的部分代码,大家感兴趣可以看一下!

CString CGridCtrl::ParserExpression(CString strExpression)
{
  CString strSign; //运算符
  CString strRetu;
  CString strTmp2;
  CString strTmp3;
  LPCSTR lpstr;
  char strTmp[200];
  long nTmp;//,nRetu;
  long i,nLen,nStatus;
  int nRow,nCol;
  strExpression.MakeUpper();
  nLen = strExpression.GetLength();
  strSign = "+,-,*,/,(,)";
  strRetu = "";
  nStatus = 0 ; // 0 初始状态\遇到加减括号等符号 1 字母开始 2 数值开始
  nTmp = -1;
  memset(strTmp,0,200);
  lpstr = strExpression;
  for ( i=1; i=0 )||(i+1 >=nLen)) //是运算符号
    {
      if ((i+1 >= nLen)&&((strExpression.GetAt(i)>=''''0'''') && 
        (strExpression.GetAt(i)<=''''9'''')))
      {
        nStatus = 2;
        nTmp++;
        strTmp[nTmp] = lpstr[i];//strExpression.GetAt(i);
      }
      if ((nStatus==2)&&(strExpression.GetAt(i)==''''('''')) nStatus=1;
      if ( nStatus==1 )  //非单元格和正常计算数,直接拼串返回
      {
        strTmp3 = "";
        strTmp3.Format("%s",strTmp);
        strRetu = strRetu + strTmp3;
      }
      else if ( nStatus == 2)      //正常单元格对象或者数字
      {
        //项 strRetu = strRetu + "<" + _T(strTmp) + ">";
        if (!IsValidCol(strTmp))
        {
          //return "#NAME!";
          strTmp3 = "";
          strTmp3.Format("%s",strTmp);
          strRetu = strRetu + "(" + strTmp3 + ")";
        }
        else
        {
          nRow = 0; nCol = 0;
//          strTmp = ParserCell() 递归
//          MessageBox(strTmp,"ooo",1);
          strTmp2.Format("%s",strTmp);
          CCellID cell;
          if (ConvertStrToCellID(strTmp2,cell))
          {
  //          MessageBox(strTmp,"ooo1111",1);
            strTmp3 = ParserCell(cell.row,cell.col);
            sprintf(strTmp,"%s",strTmp3.GetBuffer(strTmp3.GetLength()));
            strTmp3 = "";
            strTmp3.Format("%s",strTmp);
            strRetu = strRetu + "(" + strTmp3 + ")";
          }
          else
            return "#INVALID!";
          //strRetu = strRetu + "<" + _T(strTmp) + ">";
  //        MessageBox(strTmp,"ooo2222",1);
        }
      }
      nStatus = 0;
      nTmp = -1 ;
      memset(strTmp,0,200);
      if (!((i+1 >= nLen)&&((strExpression.GetAt(i)>=''''0'''') && 
        (strExpression.GetAt(i)<=''''9''''))))
      {
        strTmp3 = "";
        strTmp3.Format("%c",lpstr[i]);//strExpression.GetAt(i));
        strRetu = strRetu + strTmp3;
      }
    }
    else if ((strExpression.GetAt(i)>=''''A'''') && (strExpression.GetAt(i)<=''''Z''''))
    {
      nStatus = 1;
      nTmp++;
      strTmp[nTmp] = strExpression.GetAt(i);
    }
    else if ((strExpression.GetAt(i)>=''''0'''') && (strExpression.GetAt(i)<=''''9''''))
    {
      nStatus = 2;
      nTmp++;
      strTmp[nTmp] = lpstr[i];//strExpression.GetAt(i);
    }
  }
  return strRetu;
}

1 2  下一页

Tags:类似 EXCEL 报表

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接