2010-04-26 5 views
2
<?php 
    // DB Connection here 
    mysql_connect("localhost","root",""); 
    mysql_select_db("hitnrunf_db"); 

    $select = "SELECT * FROM jos_users "; 
    $export = mysql_query ($select) or die ("Sql error : " . mysql_error()); 
    $fields = mysql_num_fields ($export); 

    for ($i = 0; $i < $fields; $i++) 
    { 
     $header .= mysql_field_name($export , $i) . "\t"; 
    } 

    while($row = mysql_fetch_row($export)) 
    { 
     $line = ''; 
     foreach($row as $value) 
     { 
      if ((!isset($value)) || ($value == "")) 
      { 
       $value = "\t"; 
      } 
      else 
      { 
       $value = str_replace('"' , '""' , $value); 
       $value = '"' . $value . '"' . "\t"; 
      } 
      $line .= $value; 
     } 
     $data .= trim($line) . "\n"; 
    } 
    $data = str_replace("\r" , "" , $data); 

    if ($data == "") 
    { 
     $data = "\n(0) Records Found!\n"; 
    } 

    header("Content-type: application/octet-stream"); 
    header("Content-Disposition: attachment; filename=your_desired_name.xls"); 
    header("Pragma: no-cache"); 
    header("Expires: 0"); 
    print "$header\n$data"; 
?> 

Код выше, используется для генерации таблицы Excel из базы данных MySQL, , но мы получаем следующие ошибки:MySQL для генерации Excel с помощью PHP

The file you are trying to open, 'users.xls', is in a different format than specified by the file extension. Verify that the file is not corrupted and is from a trusted source before opening the file. Do you want to open the file now?

В чем проблема и как мы почини это?

+0

Это работает очень хорошо для меня, ваш код полезен. – justnajm

ответ

1

Проблема заключается в том, что когда Excel видит файл, заканчивающийся на .xls, он ожидает, что файл будет соответствовать его стандарту BIFF. Ваш код не создает BIFF-совместимый файл. Если вы хотите, я могу предоставить вам функции PHP, которые создают файлы, совместимые с BIFF, но слишком долго для публикации здесь.

+0

, пожалуйста, предоставьте код для mysql для excel – pmms

1

Кажется, что вы создаете файл с полями, разделенными табуляцией, и утверждаете в своих заголовках, что это тот же формат, что и таблица бинарных таблиц Excel. Это не формат Excel. И программа загрузки электронной таблицы позволяет вам знать, что вы вводите в заблуждение людей - возможно, только вы сами.

Возможно, вам следует изучить формат экспорта, такой как файл CSV; преобразование из разделителя табуляции в разделенное запятой не будет сложным.

5

Вы действительно не создаете файл Excel. Вы генерируете то, что составляет файл .csv, используя вкладки в качестве разделителя.

Чтобы создать «настоящий» файл Excel, используйте PHPExcel.

+0

Любое подобное для .NET? –

+0

С помощью .NET вы можете просто использовать объект COM Excel и работать с ним напрямую. PHPExcel обычно используется на платформах, отличных от Windows. –

+0

Объект Excel COM не похож на PHPExcel, для его установки на компьютере требуется установка Excel. –

0

Если вы собираетесь создать файл с разделителями табуляции, почему бы не пропустить PHP и позволить MySQL сделать это за вас с SELECT INTO OUTFILE?

PHP может обрабатывать часть загрузки. Установите заголовок Content-type в text/plain. Excel знает, как это открыть.

0

Измените код, чтобы использовать чистый CSV, а затем верните файл в браузер как имя файла, заканчивающееся на .csv и тип содержимого text/csv.

Я видел, как люди пытаются это сделать раньше, и это работает только с определенными версиями Office Excel. Он не работает на других платформах с другими программами для работы с электронными таблицами или с каждой версией Excel. Используйте стандартный формат файла или, по крайней мере, создайте надлежащий файл OLE2 Compound Document, который содержит данные XLS, таким образом, который ожидает Excel, если вы собираетесь отправить файл в браузер в виде этого типа.

0

Попробуйте PEAR (репозиторий PHP и расширения приложений) Spreadsheet_Excel_Writer. Я использую это для генерации файлов Excel в формате BIFF.

0

Ваша программа ищет стандартный документ .xls, который полностью отличается от того, что вы выводите. Ваша программа выводит лист с разделителями табуляции, который является файлом .txt. Попробуйте переключить свою программу с табуляции на запятые как разделители и сохранить как .csv (значение, разделенное запятой).

Смежные вопросы