in reply to XLSX to CSV with high ASCII characters
Hi, I found a little more time to look at your problem. I was recently dealing with a related issue.
There's a well-known bug in MS Excel's handling of character encodings in CSV files. You can read all about in on StackOverflow and elsewhere. The short answer is that you need to encode your CSV file not as UTF-8 but as UTF-16LE in order for Excel to recognize it properly.
Here is a cleaned-up version of your script. For input I used an .xlsx file containing the data you showed below. This creates a CSV file encoded in UTF-16, so you won't be able to read it as a text file in your terminal if the terminal is set to UTF-8. But Excel will read the file and display the contents correctly.
use strict; use warnings; use autodie; use Spreadsheet::Read qw/ ReadData rows /; use Text::CSV; my $outputFile = '1198074.csv'; my $inputFile = '1198074.xlsx'; my $book = ReadData( $inputFile ); my @writeRows; for my $row ( rows( $book->[1] ) ) { my ( $id, $last, $first, $pref ) = @{ $row }; push @writeRows, [ $pref || $first, $last, 'Static', 'Text' ]; } open my $fh, '>:encoding(UTF-16LE)', $outputFile; my $csv = Text::CSV->new( { binary => 1, eol => "\n", auto_diag => 1 } + ); $csv->print( $fh, $_ ) for @writeRows; close $fh; __END__
Hope this helps!
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: XLSX to CSV with high ASCII characters
by apu (Sexton) on Aug 27, 2017 at 21:22 UTC | |
by Anonymous Monk on Aug 27, 2017 at 21:49 UTC | |
by apu (Sexton) on Aug 27, 2017 at 22:18 UTC | |
by Anonymous Monk on Aug 27, 2017 at 23:38 UTC | |
by 1nickt (Canon) on Aug 27, 2017 at 22:30 UTC | |
by apu (Sexton) on Aug 27, 2017 at 23:21 UTC |