Экспорт в Excel и юникод

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Экспорт в Excel и юникод

Сообщение Keeper » 06.07.2012 23:10:36

Доброго времени суток! Нужно сделать отчёт в Excel. Данные для отчёта лежат в Firebird базе данных в кодировке UTF-8. Для доступа к базе используется TIBConnection, в свойствах указана кодировка unicode_fss. Для работы с Excel пользуюсь COM. Excel по-умолчанию не понимает юникод, поэтому строки приходится переводить в Win1251 кодировку. Для строковых констант русские буквы отображаются нормально, а для строк из базы - закорючками. Код, выполняющий экспорт:

Код: Выделить всё
   
   while not Query.EOF do
   begin
     book.WorkSheets[1].Cells[row, 1] := WideString(Utf8ToAnsi(Query.FieldValues['TESTDATE']));
     book.WorkSheets[1].Cells[row, 2] := WideString(Utf8ToAnsi(Query.FieldValues['TESTTIME']));
     book.WorkSheets[1].Cells[row, 3] := WideString(Utf8ToAnsi(Query.FieldValues['TESTTYPE']));
     book.WorkSheets[1].Cells[row, 4] := WideString(Utf8ToAnsi(Query.FieldValues['DETHEIGHT']));
     book.WorkSheets[1].Cells[row, 5] := WideString(Utf8ToAnsi(Query.FieldValues['OSNHEIGHT']));
     err := UTF8ToAnsi(Query.FieldValues['ERROR']);
     if err = 'none' then
        book.WorkSheets[1].Cells[row, 6] := WideString(Utf8ToAnsi(Query.FieldValues['RESULT']))
     else
     begin
       book.WorkSheets[1].Cells[row, 6] := WideString(err);
       book.WorkSheets[1].Cells[row, 6].Interior.Color := 255;
       book.WorkSheets[1].Cells[row, 6].Font.ThemeColor := 1;
     end;
     inc(row);
     Query.Next;
   end;                       

Помогите, пожалуйста, заставить буквы отображаться нормально. Может есть возможность при создании книги принудительно указать кодировку UTF8, чтобы не мучиться с перекодировкой?
Keeper
новенький
 
Сообщения: 22
Зарегистрирован: 05.08.2009 13:11:06
Откуда: Ярославль

Re: Экспорт в Excel и юникод

Сообщение Ism » 07.07.2012 00:34:01

TIBConnection.Charset:=Utf8;
Возвратит из базы строки в Utf8
А дальше правильно перекодировать.
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Экспорт в Excel и юникод

Сообщение Keeper » 07.07.2012 01:13:07

Ism писал(а):TIBConnection.Charset:=Utf8;
Возвратит из базы строки в Utf8
А дальше правильно перекодировать.


Кодировка Utf8 в подключении уже выставлена, в DBGrid русские символы отображаются нормально, значит база отдаёт строки в юникоде. Я перекодирую строки функцией Utf8ToAnsi и привожу их к WideString, потому что OLE понимает только виндовые "широкие" строки - вроде бы всё правильно.
Keeper
новенький
 
Сообщения: 22
Зарегистрирован: 05.08.2009 13:11:06
Откуда: Ярославль

Re: Экспорт в Excel и юникод

Сообщение Kitayets » 07.07.2012 01:30:48

Возможно что Utf8ToAnsi делает не то что Вам нужно. Ведь чтобы перевести из многобайтовой кодировки в однобайтную нужно знать кодовую страницу. Попробуйте Utf8ToSys он использует системную кодировку, которая на русифицированной венде - cp1251.
Kitayets
постоялец
 
Сообщения: 171
Зарегистрирован: 05.05.2010 21:15:24

Re: Экспорт в Excel и юникод

Сообщение Sergei I. Gorelkin » 07.07.2012 08:42:49

Перевод из utf-8 в utf-16 производится функцией UTF8Decode.

UTF8ToSys, UTF8ToAnsi и прочие приводят к потере символов вне текущей ansi-кодировки.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Экспорт в Excel и юникод

Сообщение mkazakov » 02.08.2012 13:37:08

А как применить Utf8ToSys ? можно простой пример
mkazakov
новенький
 
Сообщения: 52
Зарегистрирован: 24.02.2012 14:04:14
Откуда: Балаково

Re: Экспорт в Excel и юникод

Сообщение Vadim » 02.08.2012 13:46:03

mkazakov писал(а):А как применить Utf8ToSys ? можно простой пример

Простой пример:
Код: Выделить всё
WriteLn(UTF8ToSys('Какая-то Ваша строка...'));
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Экспорт в Excel и юникод

Сообщение mkazakov » 02.08.2012 15:11:45

Спасибо подпихнул в масив UTF8ToSys(.....)
mkazakov
новенький
 
Сообщения: 52
Зарегистрирован: 24.02.2012 14:04:14
Откуда: Балаково


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 233

Рейтинг@Mail.ru