如何生成html格式的报告 需生成格式丰富的报告哪里有这方面的资料?谢谢!!最好有源代码类 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 呵呵,我手工写的如下:CString path; char filter[] = "Web Files(*.htm,*.html) | *.htm;*.html||"; CFileDialog fd(FALSE,".htm",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,filter,NULL); if(fd.DoModal() == IDOK) { path = fd.GetPathName(); } CString ips,ipe; m_ipstart.GetWindowText(ips); m_ipend.GetWindowText(ipe); CStdioFile file; if(file.Open(path, CFile::modeCreate|CFile::modeWrite)) { CString temp; file.Write("",0); file.WriteString("<html>\n<head>\n<title>网络扫描结果(ALF MODERN STUDIO)</title>\n</head>\n"); file.WriteString("<body>\n<p><font size=4 face=宋体><b>网络扫描结果</b></font></p>\n"); temp.Format("<p><font face=宋体 size=2>(从 %s 到 %s )</font></p>\n",ips,ipe); file.WriteString(temp); file.WriteString("<table border=1 width=100% cellspacing=0 bordercolor=#C0C0C0>\n<tr>\n"); file.WriteString("<td width=25% bgcolor=#E8E8E8><font size=2>IP地址</font></td>\n"); file.WriteString("<td width=35% bgcolor=#E8E8E8><font size=2>机器名称</font></td>\n"); file.WriteString("<td width=30% bgcolor=#E8E8E8><font size=2>MAC地址</font></td>\n"); file.WriteString("<td width=10% bgcolor=#E8E8E8><font size=2>状态</font></td>\n</tr>\n"); for(int i=0;i<ItemCount;i++) { file.WriteString("<tr>\n"); if(m_list.GetItemText(i,0) != "") { temp.Format("<td width=25%% bgcolor=#FFFFFF><font size=2> %s</font></td>\n",m_list.GetItemText(i,0)); } else { temp.Format("<td width=25%% bgcolor=#FFFFFF><font size=2> </font></td>\n"); } file.WriteString(temp); if(m_list.GetItemText(i,1) != "") { temp.Format("<td width=35%% bgcolor=#FFFFFF><font size=2> %s</font></td>\n",m_list.GetItemText(i,1)); } else { temp.Format("<td width=35%% bgcolor=#FFFFFF><font size=2> </font></td>\n"); } file.WriteString(temp); if(m_list.GetItemText(i,2) != "") { temp.Format("<td width=30%% bgcolor=#FFFFFF><font size=2> %s</font></td>\n",m_list.GetItemText(i,2)); } else { temp.Format("<td width=30%% bgcolor=#FFFFFF><font size=2> </font></td>\n"); } file.WriteString(temp); if(m_list.GetItemText(i,3) != "") { temp.Format("<td width=10%% bgcolor=#FFFFFF><font size=2> %s</font></td>\n",m_list.GetItemText(i,3)); } else { temp.Format("<td width=10%% bgcolor=#FFFFFF><font size=2> </font></td>\n"); } file.WriteString(temp); file.WriteString("</tr>\n"); } file.WriteString("</table>\n<br>"); CString time,sy,sm,sd; GetYMD(sy,sm,sd); time.Format("<font size=2>创建时间:%s年%s月%s日</font>\n",sy,sm,sd); file.WriteString(time); file.WriteString("</body>\n</html>"); file.Close(); } file.Close(); 数据一xml生成表现用xslt,这样可以作到动态 生成HTML表格的程序http:\\5inet.cn\web\silverplume\temp\html.rar 我用过一种方法.首先做一个网页模板[就是空的Html表格]在网页前面用注释标上生成表格的Html语句.然后用VC读这个文件,再写入一个新文件 就可以生成一个Htm表格文件.虽然笨一点,却很好用[可以在模板中自定义任何格式,生成的报表可以被Excel等直接读取],很方便又不用任何控件. 也不是很费时间. ^_^ 这是最简单的模板<!--BlueSnow:标题开始 = <title>--><!--BlueSnow:标题结束 = </title>--><!--BlueSnow:表头开始 = <p align="center" class="Title">--><!--BlueSnow:表头结束 = </p>--><!--BlueSnow:表行开始 = <tr>--><!--BlueSnow:表行结束 = </tr>--><!--BlueSnow:表列开始 = <td align="center" valign="middle">--><!--BlueSnow:表列结束 = </td>--><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><!--BlueSnow:标题--><style type="text/css"><!--.Title { font-family: "宋体_GB2312"; font-size: 24px; font-weight: bold; color: #000000;}--></style></head><body><!----><!--BlueSnow:表头--><table width="100%" border="1" cellpadding="1" cellspacing="1"><!--BlueSnow:表格--></table></body></html> ......略...... //////////////////////////////////////////////////////////////////////// if ( ! fileTableTemplate.Open( "C:\\Table.htm" , CFile::modeReadWrite ) ) { MessageBox("模板文件打开失败!"); return; } if ( fileTableHtml.Open( "C:\\TableHtml.htm",CFile::modeCreate|CFile::modeWrite|CFile::typeText ) == 0 ) { MessageBox("模板文件建立失败!"); return; } ////////////////////////////////////////////////////////////////////////////////// // 标题开始 fileTableTemplate.ReadString( strDataLine ); strTableNameStart = strDataLine.Mid( 24 , strDataLine.GetLength() - 27 ) ; // 标题结束 fileTableTemplate.ReadString( strDataLine ); strTableNameEnd = strDataLine.Mid( 24 , strDataLine.GetLength() - 27 ) + "\n"; // 表头开始 fileTableTemplate.ReadString( strDataLine ); strTableTitleStart = strDataLine.Mid( 24 , strDataLine.GetLength() - 27 ) ; // 表头结束 fileTableTemplate.ReadString( strDataLine ); strTableTitleEnd = strDataLine.Mid( 24 , strDataLine.GetLength() - 27 ) + "\n"; // 表行开始 fileTableTemplate.ReadString( strDataLine ); strTableRowStart = strDataLine.Mid( 24 , strDataLine.GetLength() - 27 ) ; // 表行结束 fileTableTemplate.ReadString( strDataLine ); strTableRowEnd = strDataLine.Mid( 24 , strDataLine.GetLength() - 27 ) + "\n"; // 表列开始 fileTableTemplate.ReadString( strDataLine ); strTableColStart = strDataLine.Mid( 24 , strDataLine.GetLength() - 27 ) ; // 表列结束 fileTableTemplate.ReadString( strDataLine ); strTableColEnd = strDataLine.Mid( 24 , strDataLine.GetLength() - 27 ) + "\n"; ////////////////////////////////////////////////////////////////////////////////// while ( fileTableTemplate.ReadString( strDataLine ) ) { nFind = 0 ; if ( strDataLine.IsEmpty() ) continue; strDataLine = strDataLine + "\n"; fileTableHtml.WriteString( strDataLine ); ////////////////////////////////////////////////////////////////////////////// if ( strDataLine == "<!--BlueSnow:标题-->\n" ) { strNewDataLine = strTableNameStart + "统计报表" + strTableNameEnd; fileTableHtml.WriteString(strNewDataLine); } ////////////////////////////////////////////////////////////////////////////// if ( strDataLine == "<!--BlueSnow:表头-->\n" ) { strNewDataLine = strTableTitleStart + m_strScopeName + "不同项目方法,实验室数及所占比例" + strTableTitleEnd; fileTableHtml.WriteString(strNewDataLine); } ////////////////////////////////////////////////////////////////////////////// if ( strDataLine == "<!--BlueSnow:表格-->\n" ) { ////////////////////////////////////////////////////////////////////////// // 小行字 for ( int i = 0; i < m_strArrayBatchID.GetSize(); i++) { strTemp = strTemp + m_strArrayBatchID.GetAt(i) + ";"; } fileTableHtml.WriteString("批号:" + strTemp ); ////////////////////////////////////////////////////////////////////////// // 表格题头 strNewDataLine = strTableColStart + "项目" + strTableColEnd; fileTableHtml.WriteString(strNewDataLine); strNewDataLine = strTableColStart + "批号" + strTableColEnd; fileTableHtml.WriteString(strNewDataLine); strNewDataLine = strTableColStart + "方法" + strTableColEnd; fileTableHtml.WriteString(strNewDataLine); strNewDataLine = strTableColStart + "实验室数" + strTableColEnd; fileTableHtml.WriteString(strNewDataLine); strNewDataLine = strTableColStart + "所占比例(%)" + strTableColEnd; fileTableHtml.WriteString(strNewDataLine); ////////////////////////////////////////////////////////////////////////// ......略...... 使用Xslt样式,输出为html,输入为xml用xml形式做数据就容易多了,而且改了xslt就有不同的效果,可以定制主程序又不要改的不过你又得专门搞个动态匹配的程序(可以以后在用啊)让他们工作。 问个小问题 遍历某文件夹中所有子文件夹 出现了2个小问题 MFC-怎么调用成员变量 兔子党向各位问候新年好 如何在对话框中添加动态菜单? 自定义CEdit控件的右键菜单,默认菜单项怎么设置(急!!) 问一个关于论坛的问题 以PreCreateWindow中注册窗口类,送多分 用iPicture怎样把图片另存为JPEG格式 关于 《深入浅出MFC >> FRAME7.03 FRAME8.03 的编译错误的问题!!! CRectTracker用在有Scroll的Wnd里时,错误百出。不能正确画Draw和HitTest,怎么解决? 为什么还有错??? 紧急求教一个webbrowser2问题,谢谢!
CString path;
char filter[] = "Web Files(*.htm,*.html) | *.htm;*.html||";
CFileDialog fd(FALSE,".htm",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,filter,NULL);
if(fd.DoModal() == IDOK)
{
path = fd.GetPathName();
} CString ips,ipe;
m_ipstart.GetWindowText(ips);
m_ipend.GetWindowText(ipe); CStdioFile file;
if(file.Open(path, CFile::modeCreate|CFile::modeWrite))
{
CString temp;
file.Write("",0);
file.WriteString("<html>\n<head>\n<title>网络扫描结果(ALF MODERN STUDIO)</title>\n</head>\n");
file.WriteString("<body>\n<p><font size=4 face=宋体><b>网络扫描结果</b></font></p>\n");
temp.Format("<p><font face=宋体 size=2>(从 %s 到 %s )</font></p>\n",ips,ipe);
file.WriteString(temp);
file.WriteString("<table border=1 width=100% cellspacing=0 bordercolor=#C0C0C0>\n<tr>\n");
file.WriteString("<td width=25% bgcolor=#E8E8E8><font size=2>IP地址</font></td>\n");
file.WriteString("<td width=35% bgcolor=#E8E8E8><font size=2>机器名称</font></td>\n");
file.WriteString("<td width=30% bgcolor=#E8E8E8><font size=2>MAC地址</font></td>\n");
file.WriteString("<td width=10% bgcolor=#E8E8E8><font size=2>状态</font></td>\n</tr>\n"); for(int i=0;i<ItemCount;i++)
{
file.WriteString("<tr>\n");
if(m_list.GetItemText(i,0) != "")
{
temp.Format("<td width=25%% bgcolor=#FFFFFF><font size=2> %s</font></td>\n",m_list.GetItemText(i,0));
}
else
{
temp.Format("<td width=25%% bgcolor=#FFFFFF><font size=2> </font></td>\n");
}
file.WriteString(temp);
if(m_list.GetItemText(i,1) != "")
{
temp.Format("<td width=35%% bgcolor=#FFFFFF><font size=2> %s</font></td>\n",m_list.GetItemText(i,1));
}
else
{
temp.Format("<td width=35%% bgcolor=#FFFFFF><font size=2> </font></td>\n");
}
file.WriteString(temp);
if(m_list.GetItemText(i,2) != "")
{
temp.Format("<td width=30%% bgcolor=#FFFFFF><font size=2> %s</font></td>\n",m_list.GetItemText(i,2));
}
else
{
temp.Format("<td width=30%% bgcolor=#FFFFFF><font size=2> </font></td>\n");
}
file.WriteString(temp);
if(m_list.GetItemText(i,3) != "")
{
temp.Format("<td width=10%% bgcolor=#FFFFFF><font size=2> %s</font></td>\n",m_list.GetItemText(i,3));
}
else
{
temp.Format("<td width=10%% bgcolor=#FFFFFF><font size=2> </font></td>\n");
}
file.WriteString(temp);
file.WriteString("</tr>\n");
} file.WriteString("</table>\n<br>");
CString time,sy,sm,sd;
GetYMD(sy,sm,sd);
time.Format("<font size=2>创建时间:%s年%s月%s日</font>\n",sy,sm,sd);
file.WriteString(time);
file.WriteString("</body>\n</html>");
file.Close();
} file.Close();
表现用xslt,这样可以作到动态
http:\\5inet.cn\web\silverplume\temp\html.rar
在网页前面用注释标上生成表格的Html语句.
然后用VC读这个文件,再写入一个新文件 就可以生成一个Htm表格文件.虽然笨一点,却很好用[可以在模板中自定义任何格式,生成的报表可以被Excel等直接读取],很方便又不用任何控件. 也不是很费时间. ^_^
<!--BlueSnow:标题结束 = </title>-->
<!--BlueSnow:表头开始 = <p align="center" class="Title">-->
<!--BlueSnow:表头结束 = </p>-->
<!--BlueSnow:表行开始 = <tr>-->
<!--BlueSnow:表行结束 = </tr>-->
<!--BlueSnow:表列开始 = <td align="center" valign="middle">-->
<!--BlueSnow:表列结束 = </td>-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<!--BlueSnow:标题--><style type="text/css">
<!--
.Title {
font-family: "宋体_GB2312";
font-size: 24px;
font-weight: bold;
color: #000000;
}
-->
</style>
</head><body>
<!---->
<!--BlueSnow:表头--><table width="100%" border="1" cellpadding="1" cellspacing="1">
<!--BlueSnow:表格--></table>
</body>
</html>
//////////////////////////////////////////////////////////////////////// if ( ! fileTableTemplate.Open( "C:\\Table.htm" , CFile::modeReadWrite ) )
{
MessageBox("模板文件打开失败!");
return;
}
if ( fileTableHtml.Open(
"C:\\TableHtml.htm",CFile::modeCreate|CFile::modeWrite|CFile::typeText ) == 0 )
{
MessageBox("模板文件建立失败!");
return;
}
//////////////////////////////////////////////////////////////////////////////////
// 标题开始
fileTableTemplate.ReadString( strDataLine );
strTableNameStart = strDataLine.Mid( 24 , strDataLine.GetLength() - 27 ) ;
// 标题结束
fileTableTemplate.ReadString( strDataLine );
strTableNameEnd = strDataLine.Mid( 24 , strDataLine.GetLength() - 27 ) + "\n";
// 表头开始
fileTableTemplate.ReadString( strDataLine );
strTableTitleStart = strDataLine.Mid( 24 , strDataLine.GetLength() - 27 ) ;
// 表头结束
fileTableTemplate.ReadString( strDataLine );
strTableTitleEnd = strDataLine.Mid( 24 , strDataLine.GetLength() - 27 ) + "\n";
// 表行开始
fileTableTemplate.ReadString( strDataLine );
strTableRowStart = strDataLine.Mid( 24 , strDataLine.GetLength() - 27 ) ;
// 表行结束
fileTableTemplate.ReadString( strDataLine );
strTableRowEnd = strDataLine.Mid( 24 , strDataLine.GetLength() - 27 ) + "\n";
// 表列开始
fileTableTemplate.ReadString( strDataLine );
strTableColStart = strDataLine.Mid( 24 , strDataLine.GetLength() - 27 ) ;
// 表列结束
fileTableTemplate.ReadString( strDataLine );
strTableColEnd = strDataLine.Mid( 24 , strDataLine.GetLength() - 27 ) + "\n";
//////////////////////////////////////////////////////////////////////////////////
while ( fileTableTemplate.ReadString( strDataLine ) )
{
nFind = 0 ;
if ( strDataLine.IsEmpty() ) continue;
strDataLine = strDataLine + "\n";
fileTableHtml.WriteString( strDataLine );
//////////////////////////////////////////////////////////////////////////////
if ( strDataLine == "<!--BlueSnow:标题-->\n" )
{
strNewDataLine = strTableNameStart + "统计报表" + strTableNameEnd;
fileTableHtml.WriteString(strNewDataLine);
}
//////////////////////////////////////////////////////////////////////////////
if ( strDataLine == "<!--BlueSnow:表头-->\n" )
{
strNewDataLine = strTableTitleStart + m_strScopeName + "不同项目方法,实验室数及所占比例" + strTableTitleEnd;
fileTableHtml.WriteString(strNewDataLine);
}
//////////////////////////////////////////////////////////////////////////////
if ( strDataLine == "<!--BlueSnow:表格-->\n" )
{
//////////////////////////////////////////////////////////////////////////
// 小行字
for ( int i = 0; i < m_strArrayBatchID.GetSize(); i++)
{
strTemp = strTemp + m_strArrayBatchID.GetAt(i) + ";";
}
fileTableHtml.WriteString("批号:" + strTemp );
//////////////////////////////////////////////////////////////////////////
// 表格题头
strNewDataLine = strTableColStart + "项目" + strTableColEnd;
fileTableHtml.WriteString(strNewDataLine);
strNewDataLine = strTableColStart + "批号" + strTableColEnd;
fileTableHtml.WriteString(strNewDataLine);
strNewDataLine = strTableColStart + "方法" + strTableColEnd;
fileTableHtml.WriteString(strNewDataLine);
strNewDataLine = strTableColStart + "实验室数" + strTableColEnd;
fileTableHtml.WriteString(strNewDataLine);
strNewDataLine = strTableColStart + "所占比例(%)" + strTableColEnd;
fileTableHtml.WriteString(strNewDataLine);
//////////////////////////////////////////////////////////////////////////
......略......