Пишу небольшую программку на Perl для объединения xlsx-файлов. Открываю объединённый файл и вижу что текст исчез остались только цифры. Возможно дело в неправильной кодировке, но не могу понять из какой в какую нужно переводить.
sub processButton_Click {
my $target_file_name = Win32::GUI::GetSaveFileName(
-title => 'Сохранить файл',
-filter => ["Excel (*.xslx)" => "*.xlsx"]
);
return unless $target_file_name;
$mainWindow->statusLabel->Text('');
$mainWindow->addButton->Enable(0);
$mainWindow->removeButton->Enable(0);
$mainWindow->processButton->Enable(0);
my $target_workbook = Excel::Writer::XLSX->new("$target_file_name.xlsx");
my $warns = '';
my $converter = Text::Iconv->new("utf-8", "windows-1251");
my @source_files = ();
my $n = $mainWindow->fileList->GetCount();
foreach my $idx (0 .. $n-1) {
push(@source_files, $mainWindow->fileList->GetText($idx));
}
my $thread = threads->create(sub {
foreach my $i (keys @source_files) {
$mainWindow->statusLabel->Text("Обработка " . ($i + 1) . " из $n ...");
my $source_file = $source_files[$i];
my $reader = Excel::Reader::XLSX->new();
my $source_workbook = $reader->read_file($source_file);
if (!defined $source_workbook) {
$warns .= "Невозможно прочитать $source_file\n";
next;
}
$source_file =~ m/^.*(?:\\|\/)(.*?).[a-zA-Z0-9]+$/;
my $target_worksheet_name = decode('windows-1251', $1);
my $target_worksheet = $target_workbook->add_worksheet($target_worksheet_name);
my ($source_worksheet) = $source_workbook->worksheets();
while (my $row = $source_worksheet->next_row()) {
while (my $cell = $row->next_cell()) {
my $value = $cell->value();
$target_worksheet->write($cell->row(), $cell->col(), $value);
}
}
}
$mainWindow->statusLabel->Text('Выполнено');
$mainWindow->addButton->Enable(1);
$mainWindow->removeButton->Enable(1);
$mainWindow->processButton->Enable(1);
Win32::GUI::MessageBox(0, $warns, '', MB_ICONWARNING()) if $warns;
$target_workbook->close();
});
}