当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 类似EXCEL的报表类库

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 类似EXCEL的报表类库


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 99 ::
收藏到网摘: n/a

类似EXCEL的报表类库

作者:朱志雄

下载源代码

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