Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re^4: Spreadsheet::ParseXLSX filename non Latin Tk getOpenFile

by IB2017 (Pilgrim)
on Nov 21, 2018 at 10:56 UTC ( [id://1226117]=note: print w/replies, xml ) Need Help??


in reply to Re^3: Spreadsheet::ParseXLSX filename non Latin Tk getOpenFile
in thread Spreadsheet::ParseXLSX filename non Latin Tk getOpenFile

Thank you for your idea. It works!?! Even for the path the module does not return a shortpath! How is this possible? I updated the script. It first tries to open it with the filehandle (on my test system it seems to work fine), it then tries to open it passing the shortpath. When no shortpath is returned by the module, the opration fails.

use strict; use warnings; use Tk; use Win32::LongPath; use Spreadsheet::ParseXLSX; my $mw = Tk::MainWindow->new(); my $path; my $button = $mw->Button( -text => "Select a file", -command => \&show_file_dialog, )->pack(-side => 'left',); my $label = $mw->Entry( -text => 'No file yet', -width => 100, )->pack(-side => 'left',); $mw->MainLoop(); sub show_file_dialog { my @ext = ( ["Excel", ['xlsx']], ["All files", ['*']], ); $path = $mw->getOpenFile( -filetypes => \@ext, ); my $ShortPath = shortpathL ($path); $label->configure(-text => "$path - $ShortPath"); print "Trying to open file with Win32::LongPath::openL ... "; my $fh; Win32::LongPath::openL (\$fh, '<', $path) or die "Unable to open $path"; my $parser = Spreadsheet::ParseXLSX->new(); my $workbook = $parser->parse($fh); print "OK\n"; print "Trying to open file with shortpathL path ... "; my $parser = Spreadsheet::ParseXLSX->new(); my $workbook = $parser->parse($ShortPath); print "OK\n"; }

Replies are listed 'Best First'.
Re^5: Spreadsheet::ParseXLSX filename non Latin Tk getOpenFile
by swl (Parson) on Nov 21, 2018 at 20:58 UTC

    Good to hear it works.

    openL is written to handle paths like the ones you are getting from the system. Spreadsheet::ParseXLSX just uses a plain open call when passed a file name, and this cannot handle some of the paths that are being passed (assuming your short paths retain some of the unicode characters).

    You probably should not even need to convert the paths to short paths if you use openL to generate the file handle. That would simplify your code (if that's an issue).

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1226117]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (4)
As of 2024-04-24 18:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found