Javascript 将数据从HTML表导出到excel时排除特定列
我使用这个脚本将数据从HTML表导出到ExcelJavascript 将数据从HTML表导出到excel时排除特定列,javascript,php,html,excel,export-to-excel,Javascript,Php,Html,Excel,Export To Excel,我使用这个脚本将数据从HTML表导出到Excel <script> var tableToExcel = (function() { var uri = 'data:application/vnd.ms-excel;base64,' , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:ex
<script>
var tableToExcel = (function() {
var uri = 'data:application/vnd.ms-excel;base64,'
, template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>'
, base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) }
, format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }) }
return function(table, name) {
if (!table.nodeType) table = document.getElementById(table)
var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}
window.location.href = uri + base64(format(template, ctx))
}
})()
</script>
var tableToExcel=(函数(){
var uri='data:application/vnd.ms excel;base64,'
,模板=“{table}”
,base64=函数{return window.btoa(unescape(encodeURIComponent))}
,format=函数(s,c){返回s.replace(/{(\w+)}/g,函数(m,p){返回c[p];})}
返回函数(表、名称){
如果(!table.nodeType)table=document.getElementById(table)
var ctx={工作表:名称| |'工作表',表:table.innerHTML}
window.location.href=uri+base64(格式(模板,ctx))
}
})()
我找到了这个
但当我导出这些数据时,它会像预期的那样包含HTML表中的所有列。但我的最后一行包含一些我不想导出到excel的图标
<div class="row" style="margin-left:20px;">
<div class="grid_4">
<div class="da-panel collapsible">
<input type="button" class="btn btn-success" onclick="tableToExcel('testTable', 'W3C Example Table')" value="Export to Excel" style="float:right">
<div class="da-panel-content">
<div class="da-panel-title" style="border-top:1px solid #ccc;border-bottom:1px solid #ccc">
<h3 style="padding-left:10px;font-weight:bold;">Staff Training Information</h3></div>
<table class="da-table da-ex-datatable-numberpaging" id="testTable" width="100%">
<thead width="100%">
<tr>
<th width="10%">Staff ID</th>
<th width="10%">Name</th>
<th width="10%">Location</th>
<th width="10%">POCT Test</th>
<th width="10%">Initial Training Date</th>
<th width="10%">Annual Competency Date</th>
<th width="10%">Competency Type</th>
<th width="1%">Next Competency Date</th>
<th width="39%">Action</th>
</tr>
</thead>
<tbody width="100%">
<?php
include_once('database.php');
$pdo = Database::connect();
$sql = 'SELECT * FROM competency';
foreach ($pdo->query($sql) as $row) {
$id = $row['staff_id'];
echo '<tr>';
echo '<td width="10%">'. $row['staff_id'] . '</td>';
$sql1 = "SELECT *FROM staff WHERE StaffID='$id'";
foreach($pdo->query($sql1) as $res)
{
echo '<td width="10%">'. $res['StaffName'] . '</td>';
}
echo '<td width="10%">'. $row['location'] . '</td>';
?>
<td width="10%">
<?php
$s = $row['poct_test'];
$val = explode(" ",$s);
for ($i=0; $i<sizeof($val); $i++)
{
$v = $val[$i];
echo $v."<br/>";
}
?>
</td>
<?php
echo '<td width="10%">'. $row['date_of_initial_training'] . '</td>';
echo '<td width="10%">'. $row['annual_competency'] . '</td>';
echo '<td width="10%">'. $row['type_of_competency'] . '</td>';
echo '<td width="1%">'. $row['next_competency'] . '</td>';
echo '<td width="39%">';
echo '<a href="viewtrainingdetails.php?id='.$row['id'].'"><img src="images/ic_zoom.png" height="16" width="16" /></a>';
echo ' ';
echo '<a href="updatetraining.php?id='.$row['id'].'"><img src="images/icn_edit.png"/></a>';
echo ' ';
?>
<a href="javascript:DeleteRecord('<?php echo $row['id'];?>')"><img src="images/icn_logout.png"/></a>
<?php
echo '</td>';
echo '</tr>';
}
Database::disconnect();
?>
</tbody>
</table>
</div>
</div>
</div>
</div>
员工培训信息
员工身份证
名称
地方
POCT试验
初始培训日期
年度能力日期
能力类型
下一个合格日期
行动
如代码所示,最后3个echo包含更新/删除图标。我只想在excel中导出表内容时排除操作列。
任何帮助都将不胜感激 在桌子下面做一个隐藏的div
<div class="exportData"> </div>
复制export.php上的for循环并删除这两个col。在表下创建一个隐藏的div
<div class="exportData"> </div>
复制export.php上的for循环并删除这两个col。我认为您可以先克隆表,删除action列,然后“tableToExcel”克隆表 为了更容易删除列,请将类“action_th”添加到action th,并将类“action_td”添加到action td 然后就是这样,
var exTable = $('#testTable').clone();
//remove the action th/td
exTable.find('.action_th, .action_td').remove();
//then tableToExcel(exTable, ..
我认为您可以先克隆表,删除action列,然后“tableToExcel”克隆表 为了更容易删除列,请将类“action_th”添加到action th,并将类“action_td”添加到action td 然后就是这样,
var exTable = $('#testTable').clone();
//remove the action th/td
exTable.find('.action_th, .action_td').remove();
//then tableToExcel(exTable, ..
您可以使用jQuery中的选择器,在内存中克隆表,然后使用适当的选择器删除不需要的元素
var $table = $('#testTable').clone();
$table = filterNthColumn($table, 9); //remove Action column
function filterNthColumn($table, n){
return $table.find('td:nth-child('+n+'), th:nth-child('+n+')').remove();
}
您可以使用jQuery中的选择器,在内存中克隆表,然后使用适当的选择器删除不需要的元素
var $table = $('#testTable').clone();
$table = filterNthColumn($table, 9); //remove Action column
function filterNthColumn($table, n){
return $table.find('td:nth-child('+n+'), th:nth-child('+n+')').remove();
}
这对我有用-
$('#divTableContainer').clone().find('table tr th:nth-child(7),table tr td:nth-child(7)).remove().end().prop('outerHTML')
这对我有用-
$('#divTableContainer').clone().find('table tr th:nth-child(7),table tr td:nth-child(7)).remove().end().prop('outerHTML')
您需要循环遍历表中的行和单元格,并构造一个不包括最后两列的字符串,你可以用它来代替你找到的脚本中的
table.innerHTML
。@TimWilliams你能用一些示例代码来回答它吗?有很多现有的代码-这里是一个开始:我认为对你来说,使用“Content\u Type”头方法会更容易。请尝试在本页中查看“方法1-使用HTTP标头”。您需要循环遍历表中的行和单元格,并构造一个不包括最后两列的字符串,你可以用它来代替你找到的脚本中的table.innerHTML
。@TimWilliams你能用一些示例代码来回答它吗?有很多现有的代码-这里是一个开始:我认为对你来说,使用“Content\u Type”头方法会更容易。试着在本页中看一看“方法1-使用HTTP头”。这就像创建克隆,但你也操纵DOM,这在某种程度上是繁重的操作是的,我想在大多数情况下,简单的实现是首选。这就像创建克隆,但你也操纵DOM,这在某种程度上是繁重的操作是的,我认为在大多数情况下,易于实现是首选。