输出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%]&nbsp;&nbsp;[%=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">&nbsp;</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">&nbsp;</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%]&nbsp;&nbsp;[%=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\">&nbsp;</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\">&nbsp;</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)    收藏  举报

导航