使用JSON格式的coldfusion生成excel或html

时间:2013-01-29 18:44:09

标签: jquery json excel coldfusion coldfusion-8

我需要生成一个包含JSON格式数据的报告。 这是接收参数并显示带有数据或excel的html表的操作文件。我需要帮助解析JSON数据我进入所需的格式(html或excel)。 我知道如何使用excel格式化,我只需要帮助解析JSON数据并输出它。

<cfajaxproxy cfc="components.acct.accttrx">
<script src="../jQuery/js/jquery-1.7.2.min.js"></script>

<cfparam name="prD" default="0_0">
<cfparam name="sM" default="1">
<cfparam name="sY" default="2013">
<cfparam name="status" default="0">
<cfparam name="FORM.fileformat" default="html">

<script type="text/javascript">
  jQuery(document).ready(function(){        
    var myURL = '../components/acct/accttrx.cfc';

  function populateReport(){            
  $.ajax({
  url: myURL + "?method=GetTranactions",
  type: 'POST',
  data: { 
    prID: '<cfoutput>#prD#</cfoutput>',
    mn: '<cfoutput>#sM#</cfoutput>',
    yr: '<cfoutput>#sY#</cfoutput>',
    st: '<cfoutput>#status#</cfoutput>',
    ea_adm:'1',
    slist:'',
    lang: '1'
  },
  dataType: "json",
  success: 
    function(data){
    $.each(data, function(index, item) {
      //(item.description,item.balance,item.accttrx_status);
      // I need help from this point to pass 
      // data to cfml part of my code
      });
    },
  error: 
    function(){
      alert("An error has occurred while fetching records");
    }
});
populateReport();
});
</script>
</HEAD>
<body>
<cfif FORM.fileformat Eq 'excel'>
    <cfset VARIABLES.vcFilename = "thisreport_" & DateFormat(Now(), "yyyymmdd") & "-" &  TimeFormat(Now(), "HHmmss") & ".xls">
    <cfsetting enablecfoutputonly="Yes">
    <cfcontent type="application/vnd.ms-excel">
    <cfheader name="Content-Disposition" value="inline;filename=""#VARIABLES.vcFilename#""">

     <cfoutput>
      <!--- here display data from JSON object --->
     </cfoutput>
  <cfsetting enablecfoutputonly="No">
  <cfelse>
    <div id="reportcontents" />  <!--- display row html --->
</cfif>

以下是来自Response的数据:

  

{ “ROWS”:[      {      “平衡”: - 642.04000,      “描述”:“ABC公司”,      “ee_name”:“Jon,Doe”,      “plan_id的数据类型”:0,      “借记”:25000.22000,      “accttrx_year”:2013年,      “sponsor_id”:5,      “division_id”:0,      “accttrx_month”:1,      “信用”:26591.25000,      “trx_employee_id”:1,      “cheque_amt”:25000.00000,      “cheque_no”: “”,      “accttrx_status”: “B”,      “accttrx_id”:15     },     {      “平衡”: - 642.04000,      “描述”:“ABC公司”,      “ee_name”:“詹姆斯,完成”,      “plan_id的数据类型”:0,      “借记”:32233.07000,      “accttrx_year”:2013年,      “sponsor_id”:5,      “division_id”:0,      “accttrx_month”:1,      “信用”:30000.00000,      “trx_employee_id”:1,      “cheque_amt”:32233.07000,      “cheque_no”: “”,      “accttrx_status”: “P”,      “accttrx_id”:14     }     ]     “PAGE”:1,     “记录”:2,     “TOTAL”:1.0   }

2 个答案:

答案 0 :(得分:1)

如果您使用的是ColdFusion 8或更高版本,则可以使用DeserializeJSON()将JSON转换为结构。然后,您可以使用cfloop遍历此结构,并将结构的内容转换为查询(在循环内使用QueryNew(),QueryAddRow()和QuerySetCell())。从那里,您可以使用cfspreadsheet标记将该查询转换为Excel文件(或csv文件),如果您使用的是ColdFusion 9,或者您可以使用任何版本的ColdFusion输出普通的旧HTML并设置标题以欺骗浏览器认为这是一个Excel文件,如下所示:

<cfcontent type="application/msexcel">

答案 1 :(得分:0)

  1. 不要使用AJAX。只需创建一个JS函数即可将报告参数推送到您的处理代码中。有关示例,请参阅this post。基本上:

     window.location="process.cfm?param1=&param2=";
    
  2. 在'../components/acct/accttrx.cfc'文件中使用deserializeJSON()将发布的JSON解析为CF结构。

  3. 使用以下CF让浏览器识别文件下载:

     <cfheader name="Content-Disposition" value="attachment;filename=XXXX">
     <cfcontent type="application/vnd.ms-excel" reset="false">