-1

我有以下方法调用返回 JSON 的 Web API:-

public ActionResult CompletedProcessList(int start = 0, int rows = 50)
        {
            using (var client = new WebClient())
            {            

                try
                {
                    var query = HttpUtility.ParseQueryString(string.Empty);
                    var url = new UriBuilder("http://localhost:8080/jw/web/json/monitoring/running/process/list");                    url.Query = query.ToString();
                    string json = client.DownloadString(url.ToString());
                    Thread.Sleep(500);
                    return Content(json, "application/json");
                }
                catch (System.Net.WebException)
                {

                    return Content("error", "application/json");
                }   }        }

然后使用 javaScript 我在 table 上显示返回 JSON,javaScript 代码是:-

function getprocesslist(result) {

    $('#tablelist tbody, #tablelist thead').empty();


    var str = 'Total Number Of Processes:- ' + result.total.toString();
        $('#total').text(str.toString());

        var str1 = '<tr><th>NO.</th><th>' + 'Process Name' + '</th><th>' + 'Process Requestor ID' + '</th><th>' + 'Process State' + ' </th><th>' + 'Process Start Date' + ' </th><th>' + 'Process Due Date' + ' </th></tr>';
        $('#tablelist thead').append(str1);
        $.each(result.data, function (key, val) {
            var number = key +1 ;
        var str2 = '<tr><td>' + number  + '</td><td>' + val.name + '</td><td>' + val.requesterId + '</td><td>' + val.state + '</td><td>' + val.startedTime + '</td><td>' + val.due + '</td></tr>';

        $('#tablelist tbody').append(str2);

    });
}

以上工作正常,但我需要实现一个新功能,我需要添加以下内容:-

  1. “流程名称”和“流程到期日期”列中有两个复选框,因此用户可以选择两个复选框中的任何一个

  2. 一个按钮,用于将返回的 JSON 提取到 Excel 工作表,其中系统应根据用户选择在 Excel 工作表中包含“流程名称”或“流程截止日期”或两者。

此致

4

2 回答 2

1
  1. 对于第一部分,我不明白你到底在问什么 - 让它更具体并问另一个问题
  2. 对于第二部分:我不知道如何直接导出到 Excel 工作表(因为 xls 是专有格式),但您可以将数据导出为 CSV(逗号分隔值)文档,Excel 可以理解。google为 Json2CSV 提供了一些解决方案——选择你喜欢的那个。在我们的例子中,我们使用组合的 Javascript/PHP 解决方案:

javascript - 将 CSV 内容创建为文本:

function DownloadJSON2CSV(objArray, documentToExportTitle) {
    var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
    var cols = array.cols;
    var rows = array.rows;

    //convert the cols 2 csv
    var str = '';
    var line = '';
    for (var i = 0; i < cols.length; i++) {

        line += cols[i].label + ',';

        // Here is an example where you would wrap the values in double quotes
        // for (var index in array[i]) {
        //    line += '"' + array[i][index] + '",';
        // }

        line.slice(0, line.Length - 1);                
    }
    str += line + '\r\n';

    //convert the rows 2 csv
    for (var i = 0; i < rows.length; i++) {
        line = '';
        for (var j = 0; j < rows[i].c.length; j++) {
            line += rows[i].c[j].v + ',';            
        }

        line.slice(0, line.length - 1);
        str += line + '\r\n';
    }

   //Call the php which will force downloading and saving in .csv format (which is excel ready)
    $("#reportContent").append('<form id="exportform" action="addressOfPhp" method="post" target="_blank"><input type="hidden" id="exportdata" name="exportdata" /><input type="hidden" id="docTitle" name="docTitle" /></form>');
    $("#exportdata").val(str);
    $("#docTitle").val(documentToExportTitle.replace(/ /g, "_"));
    $("#exportform").submit().remove();    
}

php - 在用户的 PC 上强制下载为 CSV 文件提示:

 <?php

        header('Content-Type: application/force-download');
        header('Content-disposition: attachment; filename='.$_POST['docTitle'].'.csv');

        print $_POST['exportdata'];

    ?>

希望能帮助到你。

于 2012-12-03T08:46:11.733 回答
1

这是一个使用 ActiveX 的解决方案,你必须使用 IE 所以......

function CreateExcelSheet()
        {
            //var x = myTable.rows
            var x = json.length;
            var xls = new ActiveXObject("Excel.Application")
            xls.visible = true
            xls.Workbooks.Add

            var i = 1;
            var j = 0;

            $.each(json, function(index, item) {
                $.each(item, function(key, value) {
                    xls.Cells(i + 1, j + 1).Value = value;
                    j++;
                });
                i++;
            });

        }
于 2013-05-30T16:31:36.630 回答