Why use Spreadsheet::WriteExcel and Spreadsheet::ParseExcel when you do not use them?
To generate reliable CSV data, use Text::CSV_XS or Text::CSV
As was suggested to you in the ChatterBox already was to use Spreadsheet::Read's xlscat for this task.
$ xlscat -S 1 -C 9-11,21 -c sample.xlsx >file1.csv
$ xlscat -S 1 -C 12-19,21 -c sample.xlsx >file2.csv
$ xlscat -S 2 -C 10-12,14 -c sample.xlsx >file3.csv
Enjoy, Have FUN! H.Merijn