Home > Blockchain >  ExportTableToCSV every "defined time" automatically
ExportTableToCSV every "defined time" automatically

Time:01-16

I am modifying the following script from here

I am now able to export this table :

 <div class='container'>
      <div id="dvData">
        <table>
          <tr>
            <th>Column One</th>
            <th>Column Two</th>
            <th>Column Three</th>
          </tr>
          <tr>
            <td>Row 1 Col 1</td>
            <td>Row 1 Col 2</td>
            <td>Row 1 Col 3 </td>
          </tr>
          <tr>
            <td>Row 2 Col 1</td>
            <td>Row 2 Col 2</td>
            <td>Row 2 Col 3</td>
          </tr>
          <tr>
            <td>Row 3 Col 1</td>
            <td>Row 3 Col 2</td>
            <td>Row 3 Col 3</td>
          </tr>
        </table>
      </div>

by clicking this button :

      <div class='button'>
        <a href="#" id="export" role='button'>Click On This Here Link To Export The Table Data into a CSV File
        </a>
      </div>

If above button is clicked, it will run this script:


          $("#export").click(function(event) {
            var outputFile = '0-test.txt';
            exportTableToCSV.apply(this, [$('#dvData>table'), outputFile]);
          });
        });

And it worked.

Now the aim is to have this table exported and saved/downloaded (without dialog box) every certain defined time/period. In the following script I define every 5 second.

  function save() {
          $('#export').trigger('click');
        }
        setInterval(save, 5000);

However the

$('#export').trigger('click'); 

has no response. Please advise.

complete code

CodePudding user response:

This should work. Instead of triggering the JQuery's click method, you can just use Javascript's click selecting the DOM element using [0].

(see also: How to trigger click event on href element)

$(document).ready(function() {
  function exportTableToCSV($table, filename) {
    var $headers = $table.find('tr:has(th)'),
      $rows = $table.find('tr:has(td)'),
      tmpColDelim = String.fromCharCode(11), // vertical tab character
      tmpRowDelim = String.fromCharCode(0), // null character
      colDelim = ';',
      rowDelim = '\r\n';
    var csv = '';
    //csv  = formatRows($headers.map(grabRow));
    csv  = formatRows($rows.map(grabRow))   '';
    csv  = rowDelim;

    var csvData = 'data:application/csv;charset=utf-8,'   encodeURIComponent(csv);
    $(this)
      .attr({
        'download': filename,
        'href': csvData
        //,'target' : '_blank' //if you want it to open in a new window
      });
    //------------------------------------------------------------
    // Helper Functions 
    //------------------------------------------------------------
    // Format the output so it has the appropriate delimiters
    function formatRows(rows) {
      return rows.get().join(tmpRowDelim)
        .split(tmpRowDelim).join(rowDelim)
        .split(tmpColDelim).join(colDelim);
    }
    // Grab and format a row from the table
    function grabRow(i, row) {
      var $row = $(row);
      //for some reason $cols = $row.find('td') || $row.find('th') won't work...
      var $cols = $row.find('td');
      if (!$cols.length) $cols = $row.find('th');
      return $cols.map(grabCol)
        .get().join(tmpColDelim);
    }
    // Grab and format a column from the table 
    function grabCol(j, col) {
      var $col = $(col),
        $text = $col.text();
      return $text.replace('"', '""'); // escape double quotes
    }
  }


  $("#export").click(function(event) {
    var outputFile = '0-test.txt';
    console.log("clicked");
    exportTableToCSV.apply(this, [$('#dvData>table'), outputFile]);
  });
});

function save() {
  $('#export')[0].click();
}

setInterval(save, 5000);
body {
  font-family: sans-serif;
  font-weight: 300;
  padding-top: 30px;
  color: #666;
}

.container {
  text-align: center;
}

a {
  color: #1C2045;
  font-weight: 350;
}

table {
  font-weight: 300;
  margin: 0px auto;
  border: 1px solid #1C2045;
  padding: 5px;
  color: #666;
}

th,
td {
  border-bottom: 1px solid #dddddd;
  text-align: center;
  margin: 10px;
  padding: 0 10px;
}

hr {
  border: 0;
  border-top: 1px solid #E7C254;
  margin: 20px auto;
  width: 50%;
}

.button {
  background-color: #1C2045;
  color: #E7C254;
  padding: 5px 20px;
  max-width: 300px;
  line-height: 1.5em;
  text-align: center;
  margin: 5px auto;
}

.button a {
  color: #E7C254;
}

.refs {
  display: block;
  margin: auto;
  text-align: left;
  max-width: 500px;
}

.refs .label {
  font-size: 1.4em;
}

.refs>ul {
  margin-top: 10px;
  line-height: 1.5em;
}
<script src="https://github.com/caike/jQuery-Simple-Timer/blob/master/jquery.simple.timer.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="jquery-script-menu">
  <div >
    <div  data-minutes-left="0.1"></div>
  </div>
</div>

<div class='container'>
  <div id="dvData">
    <table>
      <tr>
        <th>Column One</th>
        <th>Column Two</th>
        <th>Column Three</th>
      </tr>
      <tr>
        <td>Row 1 Col 1</td>
        <td>Row 1 Col 2</td>
        <td>Row 1 Col 3 </td>
      </tr>
      <tr>
        <td>Row 2 Col 1</td>
        <td>Row 2 Col 2</td>
        <td>Row 2 Col 3</td>
      </tr>
      <tr>
        <td>Row 3 Col 1</td>
        <td>Row 3 Col 2</td>
        <td>Row 3 Col 3</td>
      </tr>
    </table>
  </div>
  <br />
  <div class='button'>
    <a href="#" id="export" role='button'>Click On This Here Link To Export The Table Data into a CSV File
        </a>
  </div>



</div>

  • Related