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

VC++
使用免费界面换肤软件 USkin
Cell插件在J2EE系统中的应用
采用MFC编制MVC模式之球体演示程序
托管资源全攻略
使用 MFC 编写打印程序
根据所选择的 TrueType 字体生成点阵数据
让你的软件界面更漂亮(四):不完美之菜单
VC界面的实现
让你的软件界面更漂亮(三)
分割窗口后如何限制分割条的移动范围
关于 CFileDialog 对话框多选功能的一个问题
让你的软件界面更漂亮(二)
对话框模板,RegexTest
让你的软件界面更漂亮(一)
利用窗口子类化隐藏系统图标
KVIP考勤系统
类似于FlashGet的悬浮框的制作
计算MDI子窗口数,仅显示文件夹的打开对话框
智能ABC窗口的实现
在打开文件对话框上实现图象预览

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 100 ::
收藏到网摘: 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