PHP распечатать таблицу и скачать файл xls таблицы не работает - PullRequest
0 голосов
/ 19 ноября 2011

У меня есть страница .php с таблицей HTML, похожей на эту: -

<table border="1">
    <tr bgcolor="DCDCDC">
      <th><div align="center"><b>Data1</b></div></th>
      <th><div align="center"><b>Data2</b></div></th>
      <th><div align="center"><b>Data3</b></div></th>
    </tr>

таблица затем имеет некоторые данные, показанные под ней. Я разрешаю передать переменную в URL, если пользователь хочет загрузить файл .xls таблицы на свой ПК. Код загрузки файла похож на этот: -

function savexls(){
   $data = array( array("Data1" => "Mary", "Data2" => "Johnson", "Data3" => 25), 
         array("Data1" => "Amanda", "Data2" => "Miller", "Data3" => 18), 
         array("Data1" => "James", "Data2" => "Brown", "Data3" => 31), 
         array("Data1" => "Patricia", "Data2" => "Williams", "Data3" => 7), 
         array("Data1" => "Michael", "Data2" => "Davis", "Data3" => 43), 
         array("Data1" => "Sarah", "Data2" => "Miller", "Data3" => 24), 
         array("Data1" => "Patrick", "Data2" => "Miller", "Data3" => 27) ); 

   # filename for download 
   $filename = "Dividend Data " . date("F j, Y") . ".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"; 
   }
}

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

Я вызываю функцию savexls () в коде php, используя следующую строку кода после извлечения переменной, если она есть в URL: -

if ($xls=="y") {
   savexls();
}

Проблема, с которой я столкнулся, заключается в том, что если я объявлю в URL-адресе? Xls = y, данные таблицы html не будут выведены на экран, хотя файл xls ДОЛЖЕН быть загружен на ПК.

Если я не объявлю это? Xls = y, тогда файл .XLS НЕ будет загружен, и таблица HTML будет напечатана на экране нормально.

Почему сам процесс записи файла .xls останавливает вывод другой HTML-таблицы на экран? Для меня они выглядят совершенно отдельными функциями, но сохранение файла, похоже, останавливает первый код печати HTML, перестающий выполнять свою работу.

Я застрял в том, в чем проблема, кроме смутного ощущения, что, возможно, мне следует печатать таблицу и сохранять файл xls в разных файлах PHP, и это может решить мою проблему, но я ' Я не уверен, как это сделать.

Во-первых, я хотел бы знать, почему возникает проблема с этим, а во-вторых, есть ли хороший способ решить эту проблему?

1 Ответ

0 голосов
/ 19 ноября 2011

Обратите внимание, что функция savexls() отправляет заголовки таблицы исключений

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

в ответе.Это заставляет браузер полагать, что возвращаемый ответ - это содержимое файла xls.

Я считаю, что то, что вы делаете сейчас, - лучший способ сделать это.Вы можете оставить php-код таким, какой он есть, но добавить ссылку на скачивание в ваш html, который будет ссылаться на ту же страницу (но с xls=y в URL).Это позволит людям, которые хотят только просматривать файл, просматривать его, а люди, которые хотят скачать xls, смогут загрузить его после того, как увидят xls.

...