2013-05-03 2 views
3

У меня есть Json, расшифровать его, записать его в CSV-файл с PHP, преобразовать CSV в .xls с помощью PHPExcelКодирование правильно CSV файлов для PHPExcel

Цель состоит в том, чтобы экспортировать из JSON в файл excel правильно. У меня возникли проблемы с кодированием и в основном с Excel для Mac 2011, который не поддерживает файлы CSV UTF-8: link Если я просмотрю его (пробел) на моем mac, он выглядит хорошо закодированным. Проблема в том, что это превосходное.

Сначала код CSV:

$file_csv = fopen('files/file.csv', 'w'); 

затем JSON:

$response_data = json_decode($connection->response['response'], true); 
foreach ($response_data as $value) 
    { 
    //take the data I have 10 strings here in reality 
    $text_lang = $value['lang']; 
    $date = $value['date']; 
    //insert into the csv 
    $details = array($text_lang, $date); 
    fputcsv($file_csv, $details); 
}; 
fclose($file_csv); 

Теперь, если я импортировать CSV с Excel У меня есть проблемы с UTF-8. Если я конвертирую его в текстовый редактор, например. Textmate в UTF-16LE, а затем импортировать его в Excel все гладко.

И код PHPExcel создать .xls from here:

$objReader = PHPExcel_IOFactory::createReader('CSV'); 
$objPHPExcel = $objReader->load('files/file.csv'); 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
$objWriter->save('files/summary.xls'); 

summary.xls разбивается на UTF-8, и при открытии он требует, чтобы отремонтировать.


Моя первая попытка была преобразовать выше file.csv в UTF-16LE в PHP, чтобы увидеть, если это будет нормально с первенствует. я iconv перед тем fputcsv и первенствовать показали китайские слова ...

Теперь я хочу, чтобы зашифровать файл CSV в UTF-16LE и загрузить его хорошо PHPExcel. Я использовал следующие строки и не работал. Вероятно, потому что CSV, который я создал с incov, был частично (?) UTF-8 и UTF-16LE.

$objReader->setInputEncoding('UTF-16LE'); 
$objPHPExcel = $objReader->load('file.csv'); 

Цель состоит в том, чтобы сделать данные из JSON в .xls (или .xlxs) документ без проблем, кодирующих на Excel.

+1

Вы правы в том, что микширование кодировок вызовет проблемы: CSV Reader всегда будет выполнять попытку конвертировать из входной кодировки в UTF-8, прежде чем вводить значение в объект ячейки PHPExcel ..., если значением CSV является UTF- 16LE, тогда это должно работать корректно, но преобразование значения UTF-8 в UTF-8, как если бы это был UTF16-LE, вызовет проблемы ... файл csv должен быть внутренне согласован в нем. Sencoding –

+0

@MarkBaker Спасибо за комментарий и благодарность за ваше обязательство на PHPExcel. Я не уверен, но я думаю, что есть некоторые проблемы со специальным символом вроде: или ♑ (читается на сафари/не в хроме). Когда excel обнаруживает эти символы, он ломается и нуждается в ремонте, в то время как данные теряются. Теоретически «Apple Color Emoji» не должно быть проблемой, так как они читаются в формате unicode или UTF-8. Я ищу больше сейчас – Diolor

+0

@MarkBaker Да. Мне пришлось санировать струны из эможи. Я добавил эту функцию: http://stackoverflow.com/a/12824140/1447885 – Diolor

ответ

2
$objReader->setInputEncoding(''); 

$objPHPExcel = $objReader->load('file.csv'); 

это хорошо сработало для меня.

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