我想問一下。我們知道將html表格導出為excel表格,但我必須下載它,然后上傳到我的Laravel應用程序的存儲中。當我點擊導出時,文件會直接下載到網絡存儲器而不是我的電腦上嗎?
請給我一個這樣做的方法。
我嘗試過直接自動導出到網絡存儲,但是失敗了。我需要一種方法,我可以直接上傳文件到網絡存儲,而不是下載和上傳。
我正在使用onclick按鈕js函數導出為excel
<script type="text/javascript">
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><ExcelWorkbook><ExcelWorksheets><ExcelWorksheet><Name>{worksheet}</Name><WorksheetOptions><DisplayGridlines/></WorksheetOptions></ExcelWorksheet></ExcelWorksheets></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>
是的,可以將Excel文件直接下載到web存儲器,而不是下載到用戶的PC上,然后再上傳到web存儲器。實現這一點的一種方法是使用AJAX將Excel數據發送到服務器,然后使用PHP將其保存到web存儲器。
這里有一個例子:
修改tableToExcel函數,使用AJAX將Excel數據發送到服務器,而不是使用window.location.href下載數據:
var tableToExcel = function(table, name) {
if (!table.nodeType) table = document.getElementById(table)
var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}
$.ajax({
type: "POST",
url: "/export-excel",
data: {excel_data: format(template, ctx)},
success: function(response) {
alert('Excel file saved to web storage!');
}
});
};
在您的Laravel應用程序中創建一個新的路由來處理AJAX請求,并將Excel數據保存到web存儲中。在處理路由的控制器方法中,您可以使用存儲外觀將Excel數據保存到所需位置的文件中:
use Illuminate\Support\Facades\Storage;
public function exportExcel(Request $request)
{
$excelData = $request->input('excel_data');
$filename = 'example.xlsx';
Storage::put($filename, $excelData);
return response()->json(['success' => true]);
}
最后,更新您的HTML代碼,以便在用戶單擊導出按鈕時調用tableToExcel函數:
<button onclick="tableToExcel('myTable', 'My Table')">Export to Excel</button>
請注意,您需要在HTML文件中包含jQuery庫,這樣AJAX請求才能工作:
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
通過這些更改,當用戶單擊export按鈕時,Excel數據將使用AJAX發送到服務器,服務器將使用Storage facade將其保存到web存儲中。一旦文件被保存,將向用戶顯示一個警告,指示文件已被保存到web存儲器。