输出HTML格式的报表
最近要开发项目,客户要求要使用报表,这个报表不需要很复杂,只要能够显示所要求的数据就行了!而且要控制成本。。。想了这么几天,觉得如果用免费的报表生成器又不方便于是想到了以前用DreamMail时的“宏”,它可以把一个特定的字符转为需要的字符,比如:%收件人%,可转为邮件的收件人地址………………再考虑到成本问题,就决定使用HTML文件来输出报表!
首先准备好一个HTML文件模板:(按下面三种不同的颜色分成三段,每一段一行,以便将其保存到一个变量中去)用文本编辑器的查找与替换功能将 " 替换成 \"
<style type="text/css">
<!--
.Table {font-family: "宋体";font-size: 12px;color: #000000; border: 1px solid #000000;}
.Title {font-family: "宋体"; font-size: 16px;font-weight: normal; color: #000000;text-decoration: none;}
body,td,th {font-family: 宋体;font-size: 12px;color: #000000;}-->
</style
<table width="690" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="690" align="center" class="Title">各寝室月水电详细报表</td>
</tr>
<tr>
<td align="right">[%=LOUDONG%] [%=YEAR%]年[%=MONTH%]月 </td>
</tr>
</table>
<table width="690" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#000000" class="Table">
<tr>
<td width="66" align="center">寝室号</td>
<td colspan="2" align="center">本月起始度数</td>
<td colspan="2" align="center">本月底数</td>
<td colspan="2" align="center">补助总数</td>
<td colspan="2" align="center">金额</td>
<td align="center">合计</td>
</tr>
<tr>
<td width="66" align="center" bgcolor="#CCCCCC"> </td>
<td align="center" bgcolor="#CCCCCC">水</td>
<td align="center" bgcolor="#CCCCCC">电</td>
<td align="center" bgcolor="#CCCCCC">水</td>
<td align="center" bgcolor="#CCCCCC">电</td>
<td align="center" bgcolor="#CCCCCC">水</td>
<td align="center" bgcolor="#CCCCCC">电</td>
<td align="center" bgcolor="#CCCCCC">水</td>
<td align="center" bgcolor="#CCCCCC">电</td>
<td align="center" bgcolor="#CCCCCC"> </td>
</tr>
<tr>
<td width="66" align="center">[%=寝室号%]</td>
<td width="64" align="center">[%=起始水度%]</td>
<td width="66" align="center">[%=起始电度%]</td>
<td width="66" align="center">[%=结束水度%]</td>
<td width="66" align="center">[%=结束电度%]</td>
<td width="66" align="center">[%=补助水度%]</td>
<td width="66" align="center">[%=补助电度%]</td>
<td width="66" align="center">[%=应交水费%]</td>
<td width="66" align="center">[%=应交电费%]</td>
<td width="76" align="center">[%=总金额%]</td>
</tr>
</table>
public void fun_GetMonthWEValue(int v_int_month, string v_string_loudong,
int v_int_startroom, int v_int_endroom, string v_string_filename)
{
string v_string_str1 = "<style type=\"text/css\"><!--.Table {font-family: \"宋体\";font-size: 12px;color: #000000; border: 1px solid #000000;}.Title {font-family: \"宋体\"; font-size: 16px;font-weight: normal; color: #000000;text-decoration: none;}body,td,th {font-family: 宋体;font-size: 12px;color: #000000;}--></style></head><body><table width=\"690\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\"> <tr><td width=\"690\" align=\"center\" class=\"Title\">各寝室月水电详细报表</td></tr><tr><td align=\"right\">[%=LOUDONG%] [%=YEAR%]年[%=MONTH%]月 </td></tr></table><table width=\"690\" border=\"1\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" bordercolor=\"#000000\" class=\"Table\"><tr><td width=\"66\" align=\"center\">寝室号</td><td colspan=\"2\" align=\"center\">本月起始度数</td><td colspan=\"2\" align=\"center\">本月底数</td><td colspan=\"2\" align=\"center\">补助总数</td><td colspan=\"2\" align=\"center\">金额</td><td align=\"center\">合计</td></tr><tr><td width=\"66\" align=\"center\" bgcolor=\"#CCCCCC\"> </td><td align=\"center\" bgcolor=\"#CCCCCC\">水</td><td align=\"center\" bgcolor=\"#CCCCCC\">电</td><td align=\"center\" bgcolor=\"#CCCCCC\">水</td><td align=\"center\" bgcolor=\"#CCCCCC\">电</td><td align=\"center\" bgcolor=\"#CCCCCC\">水</td><td align=\"center\" bgcolor=\"#CCCCCC\">电</td><td align=\"center\" bgcolor=\"#CCCCCC\">水</td><td align=\"center\" bgcolor=\"#CCCCCC\">电</td><td align=\"center\" bgcolor=\"#CCCCCC\"> </td></tr>\n";
string v_string_str2 = "<tr><td width=\"66\" align=\"center\">[%=寝室号%]</td><td width=\"64\" align=\"center\">[%=起始水度%]</td><td width=\"66\" align=\"center\">[%=起始电度%]</td><td width=\"66\" align=\"center\">[%=结束水度%]</td><td width=\"66\" align=\"center\">[%=结束电度%]</td><td width=\"66\" align=\"center\">[%=补助水度%]</td><td width=\"66\" align=\"center\">[%=补助电度%]</td><td width=\"66\" align=\"center\">[%=应交水费%]</td><td width=\"66\" align=\"center\">[%=应交电费%]</td><td width=\"76\" align=\"center\">[%=总金额%]</td></tr>\n";
string v_string_str3 = "</table>";
string v_string_strcontents = "";
v_string_str1 = v_string_str1.Replace("[%=LOUDONG%]",v_string_loudong);
v_string_str1 = v_string_str1.Replace("[%=YEAR%]",DateTime.Now.Year.ToString());
v_string_str1 = v_string_str1.Replace("[%=MONTH%]",v_int_month.ToString());
v_string_strcontents = v_string_str1;
string v_qingshihao = "";
string v_qishishuidu = "";
string v_qishidiandu = "";
string v_jieshushuidu = "";
string v_jieshudiandu = "";
string v_buzushuidu = "";
string v_buzudiandu = "";
double v_yinjiaoshuifei = 0.00;
double v_yinjiaodianfei = 0.00;
double v_zongjinge = 0.00;
string v_string_tmp = "";
int v_int_tmp = 0;
double v_double_tmp = 0.00;
// 进入循环之前先读取水和电的单价
double v_shuidanjia = 0.00;
double v_diandanjia = 0.00;
SqlConnection conn11 = new SqlConnection(v_string_connstring);
SqlDataAdapter sda11 = new SqlDataAdapter("SELECT * FROM 水电单价",conn11);
DataSet ds_danjia = new DataSet();
try
{
conn11.Open();
sda11.Fill(ds_danjia);
v_shuidanjia = Convert.ToDouble(ds_danjia.Tables[0].Rows[0]["水单价"]);
v_diandanjia = Convert.ToDouble(ds_danjia.Tables[0].Rows[0]["电单价"]);
ds_danjia.Clear();
ds_danjia.Dispose();
}
catch(SqlException exc)
{
Console.Out.Write(exc.ToString());
}
finally
{
conn11.Close();
sda11.Dispose();
}
string str = " 楼幢='" + v_string_loudong +
"' AND 寝室>=" + v_int_startroom +
" AND 寝室<=" + v_int_endroom;
DataSet ds = new DataSet();
ds = fun_readData("寝室",str);
for(int i=0;i<ds.Tables[0].Rows.Count;i++)
{
// *********************************************************
// 寝室号
v_qingshihao = ds.Tables[0].Rows[i]["寝室"].ToString();
// *********************************************************
// 起始水度
if(v_int_month>1)
{
v_int_tmp = v_int_tmp - 1;
v_string_tmp = "第" + v_int_tmp + "月水量";
}
else
{
v_string_tmp = "水表底度";
}
v_double_tmp = Convert.ToDouble(ds.Tables[0].Rows[i][v_string_tmp]);
if(v_double_tmp > 0)
v_qishishuidu = v_double_tmp.ToString();
else
v_qishishuidu = "0.00";
// *********************************************************
// 起始电度
if(v_int_month>1)
{
v_int_tmp = v_int_tmp - 1;
v_string_tmp = "第" + v_int_tmp + "月电量";
}
else
{
v_string_tmp = "电表底度";
}
v_double_tmp = Convert.ToDouble(ds.Tables[0].Rows[i][v_string_tmp]);
if(v_double_tmp > 0)
v_qishidiandu = v_double_tmp.ToString();
else
v_qishidiandu = "0.00";
/*
v_string_tmp = "第" + v_int_tmp + "月电量";
v_double_tmp = Convert.ToDouble(ds.Tables[0].Rows[i][v_string_tmp]);
if(v_double_tmp > 0)
v_qishidiandu = v_double_tmp.ToString();
else
v_qishidiandu = "0.00";
*/
// *********************************************************
// 结束水度
v_string_tmp = "第" + v_int_month + "月水量";
v_double_tmp = Convert.ToDouble(ds.Tables[0].Rows[i][v_string_tmp]);
if(v_double_tmp > 0)
v_jieshushuidu = v_double_tmp.ToString();
else
v_jieshushuidu = "0.00";
// *********************************************************
// 结束电度
v_string_tmp = "第" + v_int_month + "月电量";
v_double_tmp = Convert.ToDouble(ds.Tables[0].Rows[i][v_string_tmp]);
if(v_double_tmp > 0)
v_jieshudiandu = v_double_tmp.ToString();
else
v_jieshudiandu = "0.00";
// *********************************************************
// 补助水度
// 先得到该寝室有多少人.然后人数*补助水量得到补助水度
int ncount = 0;
string strSQL = "SELECT * FROM 学生 WHERE 楼幢='" + v_string_loudong + "' AND 寝室>=" + v_int_startroom + " AND 寝室<=" + v_int_endroom;
SqlConnection conn = new SqlConnection(v_string_connstring);
SqlDataAdapter sda = new SqlDataAdapter(strSQL,conn);
DataSet ds1 = new DataSet();
try
{
conn.Open();
sda.Fill(ds1);
ncount = ds1.Tables[0].Rows.Count;
}
catch(SqlException ex1)
{
Console.Out.Write(ex1.ToString());
ncount = 0;
}
finally
{
conn.Close();
sda.Dispose();
}
v_double_tmp = Convert.ToDouble(ds.Tables[0].Rows[i]["补助水量"]) * ncount;
if(v_double_tmp > 0)
v_buzushuidu = v_double_tmp.ToString();
else
v_buzushuidu = "0.00";
// *********************************************************
// 补助电度
// 先得到该寝室有多少人.然后人数*补助电量得到补助电度
// 通过上面的代码块,已得到寝室的人数,所以不再读取已住人数,而直接使用ncount
v_double_tmp = Convert.ToDouble(ds.Tables[0].Rows[i]["补助电量"]) * ncount;
if(v_double_tmp > 0)
v_buzudiandu = v_double_tmp.ToString();
else
v_buzudiandu = "0.00";
// *********************************************************
// 应交水费
// "水单价"*(用水量-补助水量)
v_yinjiaoshuifei = v_shuidanjia * ((Convert.ToDouble(v_jieshushuidu) - Convert.ToDouble(v_qishishuidu)) - Convert.ToDouble(v_buzushuidu));
// *********************************************************
// 应交电费
// "电单价"*(用电量-补助电量)
v_yinjiaodianfei = v_diandanjia * ((Convert.ToDouble(v_jieshudiandu) - Convert.ToDouble(v_qishidiandu)) - Convert.ToDouble(v_buzudiandu));
// *********************************************************
// 总金额
v_zongjinge = v_yinjiaodianfei + v_yinjiaoshuifei;
v_string_tmp = v_string_str2;
v_string_tmp = v_string_tmp.Replace("[%=寝室号%]",v_qingshihao);
v_string_tmp = v_string_tmp.Replace("[%=起始水度%]",v_qishishuidu);
v_string_tmp = v_string_tmp.Replace("[%=起始电度%]",v_qishidiandu);
v_string_tmp = v_string_tmp.Replace("[%=结束水度%]",v_jieshushuidu);
v_string_tmp = v_string_tmp.Replace("[%=结束电度%]",v_jieshudiandu);
v_string_tmp = v_string_tmp.Replace("[%=补助水度%]",v_buzushuidu);
v_string_tmp = v_string_tmp.Replace("[%=补助电度%]",v_buzudiandu);
v_string_tmp = v_string_tmp.Replace("[%=应交水费%]",v_yinjiaoshuifei.ToString());
v_string_tmp = v_string_tmp.Replace("[%=应交电费%]",v_yinjiaodianfei.ToString());
v_string_tmp = v_string_tmp.Replace("[%=总金额%]",v_zongjinge.ToString());
v_string_strcontents += v_string_tmp;
}
// 最终内容
v_string_strcontents += v_string_str3;
if(File.Exists(v_string_filename)) File.Delete(v_string_filename);
FileStream fs = File.Open(v_string_filename,FileMode.OpenOrCreate,FileAccess.Write);
byte[] array = UnicodeEncoding.GetEncoding("GB2312").GetBytes(v_string_strcontents);
fs.Write(array,0,array.Length);
fs.Close();
}
posted on 2006-02-07 17:59 samuel's blog 阅读(717) 评论(0) 收藏 举报
浙公网安备 33010602011771号