Экспорт PHP в Excel приводит к неправильному формату и нежелательным знакам

Я пытаюсь экспортировать данные из своей базы данных Microsoft SQL Server 2008 в электронную таблицу Excel.

Я использую этот учебник: http://www.appservnetwork.com/modules.php?name=News&file=article&sid=8

Мой заголовок выглядит так:

header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download");; header("Content-Disposition: attachment;filename=$filename.xls "); header("Content-Transfer-Encoding: binary "); 

XLS Data Cell выглядит следующим образом:

 xlsBOF(); xlsWriteString(0,0,"$lng_report_age_title"); xlsWriteString(0,4,"$lng_report_sex_title"); xlsWriteString(0,6,"$lng_report_referredfrom_title"); xlsWriteString(0,8,"$lng_report_selfreferred_title"); xlsWriteString(1,0,"$lng_report_age04"); xlsWriteString(1,1,"$lng_report_age514"); xlsWriteString(1,2,"$lng_report_age1549"); xlsWriteString(1,3,"$lng_report_age50"); xlsWriteString(1,4,"$lng_report_sexm"); xlsWriteString(1,5,"$lng_report_sexf"); xlsWriteString(1,6,"$lng_report_referredfrom_indistrict"); xlsWriteString(1,7,"$lng_report_referredfrom_outdistrict"); xlsWriteString(1,8,"$lng_report_selfreferred_indistrict"); xlsWriteString(1,10,"$lng_report_selfreferred_outdistrict"); xlsWriteString(2,6,"$lng_report_referredfrom_new"); xlsWriteString(2,7,"$lng_report_referredfrom_new"); xlsWriteString(2,8,"$lng_report_selfreferred_new"); xlsWriteString(2,9,"$lng_report_selfreferred_old"); xlsWriteString(2,10,"$lng_report_selfreferred_new"); xlsWriteString(2,11,"$lng_report_selfreferred_old"); xlsWriteNumber(3,0,"$searchresultsage04"); xlsWriteNumber(3,1,"$searchresultsage514"); xlsWriteNumber(3,2,"$searchresultsage1549"); xlsWriteNumber(3,3,"$searchresultsage50"); xlsWriteNumber(3,4,"$searchresultssexm"); xlsWriteNumber(3,5,"$searchresultssexf"); xlsWriteNumber(3,6,"$searchresultsreferredfrom01"); xlsWriteNumber(3,7,"$searchresultsreferredfrom02"); xlsWriteNumber(3,8,"$searchresultsselfreferred03"); xlsWriteNumber(3,9,"$searchresultsselfreferred04"); xlsWriteNumber(3,10,"$searchresultsselfreferred05"); xlsWriteNumber(3,11,"$searchresultsselfreferred06"); xlsEOF(); exit(); 

И создавать функции XLS выглядят следующим образом:

 function xlsBOF() { echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0); return; } function xlsEOF() { echo pack("ss", 0x0A, 0x00); return; } function xlsWriteNumber($Row, $Col, $Value) { echo pack("sssss", 0x203, 14, $Row, $Col, 0x0); echo pack("d", $Value); return; } function xlsWriteString( $Row , $Col , $Value ) { $L = strlen( $Value ); echo pack( "sssss" , 0x204 , 8 + $L , $Row , $Col , 0x0 , $L ); echo $Value; return; } 

Проблема №. 1: В листе Excel будет несколько нежелательных специальных символов вокруг текста, который я хочу отобразить (возможно, потому что я использую UTF-8? (Сначала попытался выполнить utf8_decode строку, не помогло) Возможно, потому что я используя Excel 2007?)

Проблема №. 2: Значения не записываются в строку / столбец, я хочу, чтобы они были.

Результат выглядит следующим образом (специальные символы автоматически удаляются редактором stackoverflow, поэтому я заменяю их на Xs):

XXXXXXXAgeXXXXXSexXXXX
Отправлено FromXXXX
Self ReferredXXX 0-4 YearsXXX
5-14 YearsXXXX 15-49 YearsXXX X
= 50 годXXX XXMaleXXX XXFemaleXXXX XXIn районXXX XXOut районXXXX XXIn районXXX
XOut DistrictXXXXXXNewXXXXXXNewXXXXXXNewXXXXXOldXXXX
XNewXXXXXXOldXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXX

Все эти данные находятся в столбце A и в строках 1-8.

Еще один момент, который я хотел бы знать, как только он работает, заключается в следующем: как я могу форматировать ячейки (границы, шрифты и т. Д.)?

Заранее спасибо.

Как косвенное решение вашего вопроса, я бы рекомендовал классы по адресу http://phpexcel.codeplex.com/ .

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

У меня такая же проблема.

 ob_end_clean(); $objWriter->save('php://output'); 

Это приведет к удалению нежелательных символов из excel.