在我打开excel文件时使用php导出xls后,它将消息显示为“不同的格式”

时间:2014-01-03 12:54:52

标签: php excel export-to-excel

我使用php导出excel(.xls)文件。导出特定文件后,

当我打开文件意味着它说“

**您要打开的文件,

'file.xls',格式与文件扩展名指定的格式不同。

验证文件是否已损坏且来自受信任的来源

打开文件前

**

”。

这是我的代码。

  $data = array(
    array("firstname" => "Mary", "lastname" => "Johnson", "age" => 25),
    array("firstname" => "Amanda", "lastname" => "Miller", "age" => 18),
  );   


  function cleanData(&$str)
      {
        $str = preg_replace("/\t/", "\\t", $str);
        $str = preg_replace("/\r?\n/", "\\n", $str);
        if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
      } 

      // filename for download
      $filename = $formname."_".$form_id."_". date('Ymd') . ".xls";

      header("Content-Disposition: attachment; filename=\"$filename\"");
      header("Content-Type: application/vnd.ms-excel");

      $flag = false;
      foreach($data as $row) {
        if(!$flag) {
          // display field/column names as first row
          //echo implode("\t", array_keys($row)) . "\r\n";
          $flag = true;
        }
        array_walk($row, 'cleanData');
        echo implode("\t", array_values($row)) . "\r\n";
      }
      exit;

2 个答案:

答案 0 :(得分:1)

您是否正在创建Excel 2007文件?

若是,请尝试使用mimetype application / vnd.openxmlformats-officedocument.spreadsheetml.sheet和文件扩展名.xslx

答案 1 :(得分:1)

您没有创建XLS文件,而是创建制表符分隔的文本文件。这就是为什么Excel抱怨文件结尾与文件内容不对应的原因。

要创建真正的XLS文件,您需要一个能够编写这些文件的库(有些库可以编写旧的Excel XLS格式,Excel XML(2003)格式和新的Excel XLSX格式)。