2015-08-19 2 views
0

Привет Я пытаюсь экспортировать динамическую таблицу в виде файла csv. Я столкнулся с двумя проблемамиЭкспорт в CSV-версию

  1. Только первая страница таблицы отображается в экспортированном файле. Поскольку это динамически заполненная таблица, может быть несколько страниц. Я разрешаю 10 пунктов на странице.
  2. Файл, который экспортируется, не находится в формате csv. Он находится в некотором формате файла по умолчанию.

Если кто-то может помочь. Дайте мне знать, если вам нужны какие-либо другие детали:

Код:

function exportTableToCSV() { 
    var tab = $('#searchObjectTableTabs').tabs('getSelected');// selecting the table 
    var tabIndex = $('#searchObjectTableTabs').tabs('getTabIndex', tab); 
    var data; 
    var rows; 
    if (tabIndex == '0') // first index of the tab under which the table will be displayed 
    { 
     data = $('#dg').first(); //Only one table 
     rows = $('#dg').datagrid('getRows'); 
    } else if (tabIndex == '1') // second index 
    { 
     data = $('#doc').first(); //Only one table 
     rows = $('#doc').datagrid('getRows'); 
    } 

    var csvData = []; 
    var tmpArr = []; 
    var tmpStr = ''; 
    data.find("tr").each(function() { 
     if ($(this).find("th").length) { 
      $(this).find("th").each(function() { 
       tmpStr = $(this).text().replace(/"/g, '""'); 
       tmpArr.push('"' + tmpStr + '"'); 
      }); 


      csvData.push(tmpArr); 
     } 
     tmpArr = []; 
     $.each(exportArray, function (index, value) { 
      csvData.push(exportArray[index].ID + "," + exportArray[index].itemrev + "," + exportArray[index].type + "," + exportArray[index].status + "," + exportArray[index].desc + "," + exportArray[index].owner + "," + exportArray[index].ogrp); 

     }); 
     csvData.push(tmpArr.join('\n')); 
     // printObject(tmpArr); 
    }); 

    var output = csvData.join('\n'); 
    var uri = 'data:application/csv;charset=UTF-8,' + encodeURIComponent(output); 
    window.open(uri); 
} 

ответ

0

Пожалуйста, попробуйте это:

$(document).ready(function() { 

    function exportTableToCSV($table, filename) { 

     var $rows = $table.find('tr:has(td)'), 

      // Temporary delimiter characters unlikely to be typed by keyboard 
      // This is to avoid accidentally splitting the actual contents 
      tmpColDelim = String.fromCharCode(11), // vertical tab character 
      tmpRowDelim = String.fromCharCode(0), // null character 

      // actual delimiter characters for CSV format 
      colDelim = '","', 
      rowDelim = '"\r\n"', 

      // Grab text from table into CSV formatted string 
      csv = '"' + $rows.map(function (i, row) { 
       var $row = $(row), 
        $cols = $row.find('td'); 

       return $cols.map(function (j, col) { 
        var $col = $(col), 
         text = $col.text(); 

        return text.replace(/"/g, '""'); // escape double quotes 

       }).get().join(tmpColDelim); 

      }).get().join(tmpRowDelim) 
       .split(tmpRowDelim).join(rowDelim) 
       .split(tmpColDelim).join(colDelim) + '"', 

      // Data URI 
      csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csv); 

     $(this) 
      .attr({ 
      'download': filename, 
       'href': csvData, 
       'target': '_blank' 
     }); 
    } 

    // This must be a hyperlink 
    $(".export").on('click', function (event) { 
     // CSV 
     exportTableToCSV.apply(this, [$('#dvData>table'), 'export.csv']); 

     // IF CSV, don't do event.preventDefault() or return false 
     // We actually need this to be a typical hyperlink 
    }); 
}); 

Demo

+0

Привет Raj, Спасибо за ответ. Я сделал некоторое редактирование, и теперь я могу получить файл csv. Однако я получаю только значения для первой страницы. Например: если у меня есть 20 страниц в моей сетке таблицы. экспорт происходит только для первой страницы –

0

Спасибо за ответ. Я сделал некоторое редактирование, и теперь я могу получить файл csv. Однако я получаю только значения для первой страницы. Например: если у меня есть 20 страниц в моей сетке таблицы. экспорт происходит только на первой странице

Является ли это из-за этой части кода: Можем ли мы иметь различный синтаксис

 { 
      data = $('#dg').first(); //Only one table 
      rows = $('#dg').datagrid('getRows'); 
     } 

Полный код:

 function exportTableToCSV(filename) { 
     var tab = $('#searchObjectTableTabs').tabs('getSelected');// selecting the table 
     var tabIndex = $('#searchObjectTableTabs').tabs('getTabIndex', tab); 
     var data; 
     var rows; 
     alert('inside'); 
     if (tabIndex == '0') // first index of the tab under which the table will be displayed 
     { 
      data = $('#dg').first(); //Only one table 
      rows = $('#dg').datagrid('getRows'); 
     } else if (tabIndex == '1') // second index 
     { 
      data = $('#doc').first(); //Only one table 
      rows = $('#doc').datagrid('getRows'); 
     } 

     var csvData = []; 
     var tmpArr = []; 
     var tmpStr = ''; 
     data.find("tr").each(function() 
     { 
      if ($(this).find("th").length) { 
       $(this).find("th").each(function() { 
        tmpStr = $(this).text().replace(/"/g, '""'); 
        tmpArr.push('"' + tmpStr + '"'); 
       });     


       csvData.push(tmpArr); 
      } 
      tmpArr = []; 
      $.each(exportArray, function (index, value) 
      { 

      csvData.push(exportArray[index].type + "," + exportArray[index].status + "," + exportArray[index].ID + "," + exportArray[index].itemrev + "," + exportArray[index].desc + "," + exportArray[index].owner + "," + exportArray[index].ogrp); 
      }); 
      csvData.push(tmpArr.join('\n')); 
      // printObject(tmpArr); 
     }); 
     alert('before this'); 
      var output = csvData.join('\n'); 
     csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(output); 

    $(this) 
     .attr({ 
     'download': filename, 
      'href': csvData, 
      'target': '_blank' 
    }); 

    alert('done'); 
} 


$(".export").on('click', function (event) { 
    // CSV 
    exportTableToCSV.apply(this,['export.csv']); 
    });