如何做统计报表? 我在人事管理中想按部门或性别进行统计,然后打印输出,请问如何实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 select * from tablename group by 部门,性别然后输出到一些表格控件去。在www.vckbase.com中有一些范例 small_well: 统计结果我已经做完了,(放在List Control中)剩下打印报表格式如何处理?(中国式的报表) 我没有用过List Control做打印的,这需要自己画,在www.vckbase.com应该有吧。我都是用第三方控件做报表的。如f1book small_wei: 请问您有第三方控件报表吗?有类似的范例吗,能否发一个过来:[email protected],谢谢! www.codeproject.com扛鼎之作MFC GridCtrl当然,如果要做中国式报表,必须用清华Wangwei修订的可以合并单元格的版本也在那个站点上,相关例子也可在www.vckbase.com上找 http://www.codeproject.com/miscctrl/#Grid Control ahphone: 您好! 能否给点原代码?让我看看您是如何写的,如果可以我马上结帐,谢谢![email protected] 同意 ahphone(阿丰) ,如果自己写报表的话,如果格式固定还好,如果不是的话会非常烦人的。DC里面的任何一个点都要自己算了位置在话上去,烦啊。 hjunxu: 请问有其他的方法统计报表吗? 类似EXCEL的报表类库作者:supervip源代码:类似EXCEL的开发库http://www.vckbase.com/document/viewdoc.asp?id=761http://www.vckbase.com/code/downcode.asp?id=2022此代码是一个电子表格类库,还不是很完善,希望大家给多点意见和建议,我会尽快把相应功能丰富进去的。我的信箱:[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 = 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:用类库做的样例 自定义类如何响应鼠标消息 怎么改变CTreeCtrl的滚动条的大小 坐标转换 有没有图像插值算法的具体实现啊? 第一次注册CSDN马甲,先散分 关于保护进程所占有的内存空间不被别的进程修改 VC6和MSDN2003的安装? 一个局域网中的一台计算机与另一个局域网的一台计算机是否可以通信(都没有实IP)。是否有解决方法。 vc求助 请问如何获得网卡的MAC地址 关于报表的问题,急!!! 怎样对计算机的红外线接口编程?
然后输出到一些表格控件去。在www.vckbase.com中有一些范例
统计结果我已经做完了,(放在List Control中)剩下打印报表格式如何处理?(中国式的报表)
请问您有第三方控件报表吗?有类似的范例吗,能否发一个过来:[email protected],谢谢!
当然,如果要做中国式报表,必须用清华Wangwei修订的可以合并单元格的版本
也在那个站点上,相关例子也可在www.vckbase.com上找
您好!
能否给点原代码?让我看看您是如何写的,如果可以我马上结帐,谢谢![email protected]
请问有其他的方法统计报表吗?
作者:supervip
源代码:类似EXCEL的开发库
http://www.vckbase.com/document/viewdoc.asp?id=761http://www.vckbase.com/code/downcode.asp?id=2022此代码是一个电子表格类库,还不是很完善,希望大家给多点意见和建议,我会尽快把相应功能丰富进去的。我的信箱:[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 = 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:用类库做的样例