中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > WINDOWS标准界面元素
类似EXCEL的报表类库
作者:未知 时间:2005-07-20 14:11 出处:VC知识库 责编:chinaitpower
              摘要:类似EXCEL的报表类库
类似EXCEL的报表类库
作者:朱志雄


源代码:类似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:用类库做的样例
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有