使用PHP将数据导出到CSV文件未正确显示记录

时间:2018-10-24 07:33:16

标签: php

将数据导出到csv文件中可以正常工作,但是尝试打开csv文件时却显示每条记录之间有行距的问题。

添加此行是因为较早的时候,如果我在记事本中打开文件,它将在一行中显示所有数据,因此在此行之后添加了该行,使其在记事本中工作正常,但遇到了CSV格式的问题,在每次记录前都出现了行距。

fwrite($output,"\r\n"); 


$txtstartdate=$_POST['txtstartdate'];
    $txtenddate=$_POST['txtenddate'];   

    header('Content-Type:text/csv;charset=utf-8');
    header('Content-Disposition:attachment;filename=appointmentlist.csv');
    $output = fopen('php://output','w');
    fputcsv($output,array('Appointment Id','First name','Last Name','Email','Gender','Department','Phone Number','Appointment Date','Address','Status'));
    $query = "select * from appointment  WHERE date BETWEEN '$txtstartdate' AND  '$txtenddate' ORDER BY date DESC";
    $result = mysqli_query($conn,$query);
    while($row = mysqli_fetch_assoc($result))
    {
        fwrite($output,"\r\n"); 
        fputcsv($output,$row);
    }
    fclose($output);

如果我在记事本中打开,它将显示如下

请注意:

"Appointment Id","First name","Last Name",Email,Gender,Department,"Phone Number","Appointment Date",Address,Status

2,aaa,bbbb,ccc@gmail.com,male,physician,9606567652,2018-10-04,"ctc,odisha",0

3,nas,maha,shu@gmail.com,male,physician,9207644052,2018-10-04,"ctc,odisha",0

在CSV中,每条记录后均显示一行间隙。因此,我不想在CSV文件中的每条记录后显示间隙。

1 个答案:

答案 0 :(得分:1)

您正在由于以下原因而出现差距

const empIds = [1, 3];

// object values in array are dynamic
const emps = [{
    id: 1,
    name: 'test1',
    selected: false
  },
  {
    id: 2,
    name: 'test2',
    selected: false
  },
  {
    id: 3,
    name: 'test3',
    selected: false
  }
];

emps.forEach(e => e.selected = empIds.includes(e.id));

console.log(emps);

行。 fwrite($output,"\r\n"); 将自动在行尾添加新的行字符,因此无需添加其他字符。根据{{​​3}}:

  

fputcsv()将一行(作为字段数组传递)格式化为CSV并将其 (由换行符终止) 写入指定的文件句柄。

(强调是我的)

更新fputcsv始终使用“ \ n”作为行尾。除了Windows 10之前的记事本,几乎所有Windows应用程序都能正确理解它。Windows10版本现在可以正确呈现它。如果您绝对希望使用fputcsv作为行尾,则需要其他技巧-请查看fputcsv documentation以获取更多信息。