类似EXCEL的报表类库

翻译|其它|编辑:郝浩|2005-11-10 09:43:00.000|阅读 1714 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>



源代码:类似EXCEL的开发库

此代码是一个电子表格类库,还不是很完善,希望大家给多点意见和建议,我会尽快把相应功能丰富进去的。我的信箱: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:用类库做的样例
 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP