Online Service 在线服务
New Articles 最新更新
Hot Articles 热点文章
Google 广告
首页 … 技术文档 Technical Articles
类似EXCEL的报表类库
(时间:2007-6-29 17:42:31 共有 人次浏览)

下载源代码

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



打印 【打印该页】 【关闭窗口

此技术资料来自网络,仅供参考。未经许可,不得转载。
若有侵权,请及时与我们取得联系!
FAQS 常见问题
Consultation 即时咨询
Contact Us 联系我们