javascript - 使用 php/js 将生成的数据导出到 excel
问题描述
我有 2 个用户可以选择的日期输入字段(开始日期、结束日期)。选择后,数据将显示在用户提供的两个日期之间以表格格式注册。如何在没有第三方插件的情况下通过单击按钮将表格中显示的数据导出到 Excel 中?
我使用的代码:
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
startdate: <input type="date" name="from_date">
enddate: <input type="date" name="to_date">
<input type="submit" name="date" id="date">
</form>
<!--<div>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<button type="submit" name="excel" value="excel" id='excel'> Export to excel</button>
</form>
</div> --->
<?php
require('settings.php');
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
if (isset($_POST["date"])) {
$startDate = date("Y-m-d", strtotime($_POST['from_date'])); // Y-m-d
$endDate = date("Y-m-d", strtotime($_POST['to_date'])); // something weird is happening with the dates random dates slip between date ranges
$sql = "SELECT distinct latestv.* from(
select distinct Werkomschrijving_nr from POH_GL4 where versie Between ? and ? ) changedw
left join
(select distinct Werkomschrijving_nr, max(versie) AS maxdate, omschrijving from POH_GL4
group by Werkomschrijving_nr,omschrijving) latestv on latestv.Werkomschrijving_nr = changedw.Werkomschrijving_nr";
$stmt = $db->prepare($sql);
$stmt->execute([$startDate, $endDate]);
$result = $stmt->fetchAll();
echo "<table>";
echo "<tr><th>nr werkomschrijving</th><th>Last change date </th><th>Omschrijving</th></tr>";
foreach ($result as $key => $row) {
echo "<tr>";
echo "<td>" . $row['Werkomschrijving_nr'] . "</td>";
echo "<td>" . $row['maxdate'] . "</td>";
echo "<td>" . $row['omschrijving'] . "</td>";
echo "</tr>";
}}
解决方案
exportTableToExcel() 函数将 HTML 表格数据转换为 excel 并下载为 XLS 文件 (.xls)。
=> tableID – 必需。指定要从中导出数据的 HTML 表 ID。
=> 文件名——可选。指定下载excel数据的文件名。
js代码:-
function exportTableToExcel(tableID, filename = ''){
var downloadLink;
var dataType = 'application/vnd.ms-excel';
var tableSelect = document.getElementById(tableID);
var tableHTML = tableSelect.outerHTML.replace(/ /g, '%20');
// Specify file name
filename = filename?filename+'.xls':'excel_data.xls';
// Create download link element
downloadLink = document.createElement("a");
document.body.appendChild(downloadLink);
if(navigator.msSaveOrOpenBlob){
var blob = new Blob(['\ufeff', tableHTML], {
type: dataType
});
navigator.msSaveOrOpenBlob( blob, filename);
}else{
// Create a link to the file
downloadLink.href = 'data:' + dataType + ', ' + tableHTML;
// Setting the file name
downloadLink.download = filename;
//triggering the function
downloadLink.click();
}
}
Html 表:HTML 表包含一些用户数据和一些基本字段,在您的情况下,您有日期,在下面的代码中您可以看到姓名、电子邮件等...
<table id="tblData">
<tr>
<th>Name</th>
<th>Email</th>
<th>Country</th>
</tr>
<tr>
<td>John Doe</td>
<td>john@gmail.com</td>
<td>USA</td>
</tr>
<tr>
<td>Michael Addison</td>
<td>michael@gmail.com</td>
<td>UK</td>
</tr>
<tr>
<td>Sam Farmer</td>
<td>sam@gmail.com</td>
<td>France</td>
</tr>
</table>
该按钮触发 exportTableToExcel() 函数以使用 JavaScript 导出 HTML 表格数据。
<button onclick="exportTableToExcel('tblData')">Export Table Data To Excel File</button>
如果要使用自定义文件名导出数据,请在 exportTableToExcel() 函数中传递所需的文件名。
<button onclick="exportTableToExcel('tblData', 'members-data')">Export Table Data To Excel File</button>
此代码可帮助您在表格数据中添加导出功能,而无需任何第三方 jQuery 插件或服务器端脚本。您可以使用最少的 JavaScript 代码轻松导出表数据。此外,示例代码的功能可以根据您的需要进行扩展。
推荐阅读
- entity-framework - 在 .NET Core 3.1 中使用 AutoMapper、WebApplicationFactory、Entity Framework 和 DTO 进行集成测试
- javascript - 如何使用 Jest 测试不同的屏幕宽度
- database - 如何使用 vb.net 创建 AutoBackup SQL 数据库?
- python - 如何检查我的子进程是否仍在正常运行?
- reactjs - 如何使用 react-jsonschema-form 禁用附加属性的标签?
- java - 包 sun.net.www.protocol.https 在模块 java.base 中声明,它不会导出它
- javascript - 将模型导入 TensorflowJs
- python - 如何将黑盒测试与标准输入/标准输出与 python 结合使用
- javascript - 显示活跃班级
- amazon-web-services - 使用 Shopify 商店设置时,Route53 DNS 无法解析