【发布时间】:2021-04-11 15:12:16
【问题描述】:
导出的 CSV 文件中的百分比格式存在问题。
这是抓取数据并将其发送回 JQuery 以进行导出的过程:
<?php
include('include/sessions.php');
$date_begin = date("Y-m-d", strtotime($_POST['date_begin']));
$date_end = date("Y-m-d", strtotime($_POST['date_end']));
$sql = "SELECT table1.services, table1.port
sum(case when TIMESTAMPDIFF(HOUR,table2.berth,table1.performance) <= -12 then 0 else 1 end) ON_TIME,
count(table1.port) TTL_CALLS,
round((sum(case when TIMESTAMPDIFF(HOUR,table2.berth,table1.performance) <= -12 then 0 else 1 end)/count(table1.port))*100,1) as ON_TIME_PCT
FROM
table1
Left Outer Join table2 ON table1.voyage = table2.voyage AND table1.port = table2.port
WHERE
date( table1.performance ) >= '$date_begin' AND
date( table1.performance ) <= '$date_end'";
$query = mysqli_query($dbc, $sql) or die(mysqli_error($dbc));
$out = array();
while($row = $query->fetch_assoc()){
$out[] = $row;
}
echo json_encode($out);
?>
我指的字段是 ON_TIME_PCT。
使用上述方法,在 dB 本身中运行查询时,对引用字段的查询结果可以在 100.0 或 50.0 之间变化。
导出数据时,单元格最初看起来像 100 或 50。
在 Excel 中更改格式以显示完整百分比时,数字看起来像 10000% 或 5000%。
我不知道为什么会这样。
这是我用来导出到 CSV 的代码:
$('#byPortService').on('click', function(){
var date_begin = $('#date_begin').val();
var date_end = $('#date_end').val();
$.post('api/byPortService.php', {date_begin:date_begin,date_end:date_end}, function(data){
JSONToCSVConvertor(data, "BY PORT SERVICE REPORT - DATE RANGE: "+date_begin+" - "+date_end+"", true);
});
});
这里是 JSONToCSVConvertor 函数:
function JSONToCSVConvertor(JSONData, ReportTitle, ShowLabel){
var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;
var CSV = '';
CSV += ReportTitle + '\r\n\n';
if (ShowLabel) {
var row = "";
for (var index in arrData[0]) {
row += index + ',';
}
row = row.slice(0, -1);
CSV += row + '\r\n';
}
for (var i = 0; i < arrData.length; i++) {
var row = "";
for (var index in arrData[i]) {
row += '"' + arrData[i][index] + '",';
}
row.slice(0, row.length - 1);
CSV += row + '\r\n';
}
if (CSV == '') {
alert("Invalid data");
retirn;
}
var fileName = ReportTitle.replace(/ /g,"_");
var uri = 'data:text/csv;charset=utf-8,' + escape(CSV);
var link = document.createElement("a");
link.href = uri;
link.style = "visibility:hidden";
link.download = fileName + ".csv";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
有什么方法可以导出百分比以保留小数点吗?
我不希望用户必须在 Excel 端手动执行此操作。
【问题讨论】:
-
您需要将这些值除以 100。Excel 将其转换为百分比,
1是100%,.5是50%。 -
@AbraCadaver - 你指的是这部分吗:count(table1.port))*100,1)
-
1在 Excel 中是100%。0.5是50%等 -
我没有把所有的代码都看一遍,但是你需要把结果分开。
-
在代码中使用
die(mysqli_error($conn));是一个非常糟糕的主意,因为它可能会泄露敏感信息。更多解释见这篇文章:mysqli or die, does it have to die?
标签: javascript php jquery formatting export