{ system("cls"); # Read command line arguments my ($materialmapping_file, $data_folder) = @ARGV; print "OPTIONS\nmaterialmapping_file: $materialmapping_file\n" . "data_folder: $data_folder\n"; if (length $materialmapping_file && length $data_folder) { opendir(my $dir, $data_folder) or die "Error in opening dir $data_folder\n"; my $materialmapping_table_xml = XML::LibXML->createDocument('1.0', 'UTF-8'); my $materialmapping_table_xml_root = $materialmapping_table_xml->createElement('masterdata'); $materialmapping_table_xml_root-> setAttribute('version', getSQLTimeStamp()); $materialmapping_table_xml-> setDocumentElement($materialmapping_table_xml_root); print "Parsing files...\n"; while (my $filename = readdir($dir)) { if ($filename =~ / \. xls $ /ix) { parse_xls_file($data_folder, $filename, $materialmapping_table_xml, $materialmapping_table_xml_root); } } $materialmapping_table_xml->toFile($materialmapping_file, 2); } } #### sub parse_xls_file { my ($data_folder, $filename, $materialmapping_table_xml, $materialmapping_table_xml_root) = @_; if (my $oBook = Spreadsheet::ParseExcel-> new()->parse($data_folder . $filename)) { for (0 .. $oBook->{SheetCount} - 1) { process_sheet($oBook, $_, $materialmapping_table_xml, $materialmapping_table_xml_root) } } print "Parsed $filename\n"; } #### sub process_sheet { my ($oBook, $iSheet, $materialmapping_table_xml, $materialmapping_table_xml_root) = @_; my $oWkS = $oBook->{Worksheet}[$iSheet]; ... } #### my $oBook = $parser->parse($data_folder.$filename); #### >perl script.pl output.xml Excel\ #### if($map_Cmin >= 0 and $map_Cmin >= 0 and $title_row >= 0){ for(my $iR = $title_row +1; defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++){ $internal_cell = $oWkS->{Cells}[$iR][$map_Cmin]; $active_cell = $oWkS->{Cells}[$iR][$active_col]; $family_cell = $oWkS->{Cells}[$iR][$family_col]; if(defined $internal_cell and defined $active_cell and defined $family_cell and length(decode('cp1252',$internal_cell->{Val})) gt 0 and !(length(decode('cp1252',$active_cell->{Val})) gt 0) and length(decode('cp1252',$family_cell->{Val})) gt 0) #### | A | B | C | D | E | ===+========+==========+===========+=========+=========+ 1 | | Configurator mapping | ---+--------+----------+-----------+---------+---------+ 2 | active | internal | pr_family | pr1 | pr2 | ---+--------+----------+-----------+---------+---------+ 3 | yes | item 1 | 1,2 | value 1 | value 2 | ---+--------+----------+-----------+---------+---------+ 4 | yes | item 2 | 1,2 | value 3 | value 3 | ---+--------+----------+-----------+---------+---------+ 5 | yes | item 3 | 1,2 | value 5 | value 4 | ---+--------+----------+-----------+---------+---------+ ####