2009-07-14 4 views
3

Я «экспортирую» данные со страницы в Excel с помощью таблицы HTML. Таблица выглядит отлично в браузере, но специальные символы Excel, такие как апострофы, символы торговых марок и т. Д., Неправильно закодированы. Если я открою экспортированный файл в блокноте и сохраню его в кодировке ANSII, а затем откройте его в Excel, все будет выглядеть отлично.ColdFusion XLS «Экспорт» и кодировка символов

Я попытался установить кодировку страницы в ColdFusion, используя cfcontent, setencoding и cfpagedirective, пока не повезло. Какие-либо предложения?

EDIT: В качестве временной работы ошибочные символы можно удалить, сохранив экспортированный файл на диск, открыв его в «Блокноте», а затем снова сохраните. Не совсем лучшее решение проблемы.

Что касается странных символов:

® становится A®

™ становится «¢

» становится € ™

ответ

-1

Это вопрос программирования, связанные?

По крайней мере, вы могли бы сделать как программист и предоставить некоторую отладочную информацию. Забудьте о апострофе, есть несколько разных персонажей, которые вы могли бы означать; что должно выглядеть символом товарного знака в Excel: вы получаете 0, 1 или 2 символа? Если отличное от нуля, какой символ (ы) отображается/отображается? Возможно ли использовать функцию CODE() в формуле, чтобы сообщить нам внутренний код символа (ов), который вы видите?

Обновление Благодарим за информацию о том, какие забавные персонажи на самом деле появляются на экране. Исходя из этого, и о том, как вам удалось обходить его с помощью Notepad, кажется, что сохраненная страница была закодирована в UTF-8, но Excel отображает ее так, как если бы она была закодирована на кодовой странице ANSI. cp1252 в местах с использованием западноевропейского языка.

Следующие вопросы: как вы создаете таблицу HTML? Рядом с началом HTML должно быть что-то вроде charset=UTF-8 - что вы видите? Сохранен ли файл HTML с расширением .htm, .html или что-то еще? Как вы импортируете его в Excel? Какой Excel: 2007, 2003, другой?

+0

Я не думаю, что есть метатег для кодировки. Я попробую и посмотрю, работает ли это. Прямо сейчас HTML-таблица просто создается как простой HTML в ColdFusion, а затем отправляется с: \t . Офис использует Excel 2007 для его просмотра. – illvm

+0

Добавлен метатег, и теперь все выглядит правильно. Спасибо за помощь. – illvm

+0

добавлен метатег? – Henry

0

Вместо экспорта с использованием таблицы HTML, может вам не экспортировать в CSV и «вокруг каждого элемента»:

"value1","value2" 

Вы можете использовать StringBuffer Java и создать функцию queryToCSV так:

<cffunction name="queryToCSV" returntype="string" access="public" output="false"> 
    <cfargument name="query" type="query" required="true"> 

    <cfscript> 
     var csv = createobject('java', 'java.lang.StringBuffer'); 
     var i = 1; 
     var j = 1; 
     var cols = ""; 
     var headers = ""; 
     var endOfLine = chr(13) & chr(10); 
     if (arraylen(arguments) gte 2) headers = arguments[2]; 
     if (arraylen(arguments) gte 3) cols = arguments[3]; 
     if (not len(trim(cols))) cols = query.columnlist; 
     if (not len(trim(headers))) headers = cols; 
     headers = listtoarray(headers); 
     cols = listtoarray(cols); 

     for (i = 1; i lte arraylen(headers); i = i + 1) 
      csv.append('"' & headers[i] & '",'); 
     csv.append(endOfLine); 

     for (i = 1; i lte query.recordcount; i= i + 1){ 
      for (j = 1; j lte arraylen(cols); j=j + 1){ 
       if (isNumeric(query[cols[j]][i])) 
        csv.append(query[cols[j]][i] & ','); 
       else 
        csv.append('"' & query[cols[j]][i] & '",'); 

      } 
      csv.append(endOfLine); 
     } 
     return csv.toString(); 
    </cfscript> 
</cffunction> 
+0

Хотя я, конечно, мог, что, похоже, ничего не делает для конечного результата. То есть, специальные символы все еще не отображаются правильно. – illvm

+0

Не уверен, что это сработает, но может ли использовать charsetEncode() help? – Ian

0

вы пробовали charset="utf-8" в CFFile? Если он все еще не работает, попробуйте charset="windows-1252"?

FYI: CF9 может экспортировать в .xle (не только CSV, реальный первенствует файл!) С CFSpreadsheet

+0

Я на самом деле не пишу его в файл, прежде чем отправить его, но я дам ему вихрь и посмотрю, что получится. – illvm

1

Вы изучали создание таблицы с использованием XML? Это делает файл немного более раздутым и, похоже, имеет некоторые проблемы, когда у вас есть 10 000 + записей. Однако для наборов данных от малого до среднего он работает очень хорошо и обеспечивает функциональность форматирования, которую я верю, которую вы ищете.

http://www.bennadel.com/blog/917-Creating-Excel-Files-With-ColdFusion-XML-And-POI.htm

0

Во-первых, какая версия Excel вы пытаетесь экспортировать? Все, что ниже 2007 (или, возможно, 2003), как известно, плохо справляется с чем-либо, кроме набора символов по умолчанию (cp1252, я верю, но я не уверен на этом на 100%).

Как и другие предполагают, что вы, вероятно, использовать неправильный набор символов cfcontent - попробовать что-то вроде:

<cfcontent type="application/vnd.ms-excel; charset=windows-1252"> 

Если это не правильный набор символов, вы можете попробовать некоторые другие, например, iso-8859-1 или us-ascii. Для получения полного списка см. http://livedocs.adobe.com/coldfusion/7/htmldocs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=ColdFusion_Documentation&file=00000232.htm.

Также вы можете проверить cfreport, когда можете генерировать файлы excel.

+0

Изменение кодировки в заголовках HTTP не сработало. Однако добавление метатега. – illvm

1

Я столкнулся с той же проблемой со странным символом «Â», появляющимся в моей электронной таблице Excel, когда ее не было на моей HTML-странице, откуда она появилась.

Простое изменение cfcontent от: <cfcontent type="application/vnd.ms-excel> к: <cfcontent type="application/vnd.ms-excel; charset=windows-1252"> исправили проблему для меня.

+0

Это сработало для меня. Как ни странно. Спасибо! – pk1557

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