类似EXCEL的报表类库,类似EXCEL的报表类库
【 tulaoshi.com - C语言心得技巧 】
类似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
                        来源:http://www.tulaoshi.com/n/20160129/1484615.html
看过《类似EXCEL的报表类库》的人还看了以下文章 更多>>