提问人:Topoti 提问时间:9/12/2023 最后编辑:Topoti 更新时间:9/13/2023 访问量:42
在使用PHP将一些数据从MySQL数据库表传输到可下载的excel文件时,excel文件顶部会出现一些空白行
while transferring some data from MySQL database table to a downloadable excel file using PHP , some blank rows appearing at the top in excel file
问:
我正在使用PHP将一些数据从MySQL数据库表传输到可下载的excel文件。
这是一个简单的代码。但是,在 Excel 文件中,总是有前 2 行,而第 3 行的前 8 个单元格(我从数据库表中检索 8 个字段)显示为空白。
然后出现第一个表记录的实际数据。
从第 4 行开始,数据被完美地显示出来,没有空白单元格。我无法找出我的错误。我请您看一下我的代码,如下所示:
function filterData(&$val,$key){
$val = preg_replace("/\t/", "\\t", $val);
$val = preg_replace("/\r?\n/", "\\n", $val);
if(strstr($val, '"')) $val = '"' . str_replace('"', '""', $val) . '"';
}
$fileName = "transFile.xlsx" ;
$dbObj = new dbConnect($servername,$dbname,$username,$password) ;
$sql = "select srNo,tranDt,chqNo,particulars,dr,cr,bal,sol from transdata " ;
$ret = $dbObj->query($sql) ;
$exportStr = "" ;
if($ret[0]) {
if ($ret[1]->num_rows > 0) {
$flag = true ;
while ($row = $ret[1]->fetch_array(MYSQLI_ASSOC)) {
if ($flag){
$titles = array_keys($row) ;
array_walk($titles, 'filterData');
$exportStr .= implode("\t",array_values($titles)) . "\n" ;
$flag = false ;
}
array_walk($row, 'filterData');
$exportStr .= implode("\t",array_values($row)) . "\n" ;
}
}
else {
$exportStr = "No data found" ;
}
}
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename='" . $fileName . "'");
header("Pragma: no-cache");
header("Expires: 0");
echo $exportStr ;
exit ;
这是代码的结果:
将创建一个 Excel 文件,可以按预期下载。但是,第 3 行中的前 2 行和前 8 个单元格在 excel 文件中显示为空白。
我正在从数据库表中检索 8 个字段。
从第 9 个单元格开始,数据库表数据中的第一条记录将出现在第 3 行中。
从第 4 行开始,数据将正确显示。
我尝试对数据库表的字段名称进行硬编码,而不是从数据库中检索它,但它不起作用。
我在这里列出了一些来自数据库的示例源数据,以便更好地理解该问题。
|------
|专栏|类型|空|违约 |------ |//rowId//|int|否| |srNo|int|是|零 |tranDT|日期|是|零 |chqNo|int|是|零 |详情|varchar(200)|是|零 |dr|decimal(10,3)|是|零 |cr|decimal(10,3)|是|零 |bal|十进制(10,3)|是|零 |sol|decimal(10,3)|是|零 == 转储表转数据
|206|1|2023-01-01|342568759|UPI/P7B/ Kotak nami finserv|600.000|0.000|394617.480|72.000 |207|2|2023-01-01|342568758|UPI/P7B/naf bank/09356|16925.000|0.000|377692.480|2567.000 |208|3|2023-01-01|342568757|0354672900:Int.Pd:01-10-2002 至 31-12-2002|0.000|2305.000|379997.480|72.000 |209|4|2023-02-01|342568756|/NEFT/AXIR456793/HDFC BAN/HDFC BA/credit|61500.000|0.000|318497.480|72.000 |210|5|2023-04-01|342568755|/NEFT/AXIR443266699/PREETI S/IDFC BA/出租|65650.000|0.000|252847.480|72.000
谢谢 托波提
答: 暂无答案
评论
fputcsv
存在(也可用于直接写入输出缓冲区,而不是文件。filterData
I am listing here some sample source data from database
...您正在以 HTML 格式将数据存储在数据库中???如果不是,你为什么要把html放到样本中?我为您提供了一个链接,该链接显示了如何在您的帖子中格式化数据表。它不涉及html