Умлаутс в данных Excel - PullRequest
2 голосов
/ 04 мая 2020

Я читаю Данные из Excel, и если текст в ячейке содержит умляуты (äöü), они не будут правильно видны моим Perl сценарием. Символ заменяется символом подстановки.

Что мне нужно сделать, чтобы правильно читать специальные символы из Excel?

# get reference to Excel, Active Window, Active Sheet
my $excel           = Win32::OLE->GetActiveObject('Excel.Application');
my $book            = $excel -> ActiveWindow;
my $sheet           = $book -> ActiveSheet();

my $text = $sheet->Cells(1, 2)->{Value};

1 Ответ

2 голосов
/ 04 мая 2020

У меня работает (Windows 10, Strawberry Perl 5.30) при печати содержимого в окне командной строки Windows и использовании кодировки STDOUT cp437:

use feature qw(say);
use strict;
use warnings;
use Win32::OLE;
use open ':std', ':encoding(cp437)';

# get reference to Excel, Active Window, Active Sheet
my $excel           = Win32::OLE->GetActiveObject('Excel.Application');
my $book            = $excel -> ActiveWindow;
my $sheet           = $book -> ActiveSheet();
my $text = $sheet->Cells(1, 1)->{Value};
say $text;

Вывод :

äöü

Редактировать :

Как отмечает @ikegami, вы должны определять кодовую страницу вывода консоли программно (вместо жесткого кодирования значение cp437 как я) вроде этого:

use Win32;
my $coe = "cp" . Win32::GetConsoleOutputCP();
binmode STDOUT, "encoding($coe)";

См. также этот пост для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...