ColdFusion XLS «Экспорт» и кодировка символов - PullRequest
3 голосов
/ 15 июля 2009

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

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

РЕДАКТИРОВАТЬ: В качестве временного решения ошибочные символы можно удалить, сохранив экспортированный файл на диск, открыв его в Блокноте, а затем снова сохранив. Не совсем лучшее решение проблемы.

Что касается странных персонажей:

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

™ становится № 1011 *

становится 1013 *

Ответы [ 6 ]

2 голосов
/ 28 августа 2014

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

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

1 голос
/ 15 июля 2009

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

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

0 голосов
/ 16 июля 2009

Во-первых, в какую версию 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 голосов
/ 15 июля 2009

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

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

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

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

0 голосов
/ 15 июля 2009

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

К вашему сведению: CF9 может экспортировать в .xle (не только CSV, настоящий файл Excel!) С CFSpreadsheet

0 голосов
/ 15 июля 2009

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

"value1","value2"

Вы можете использовать строковый буфер 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...