преобразование .xlsx в xml в Perl

Я пытаюсь преобразовать файл .xlsx в .xml-файл. Первая строка (заголовок) файла .xlsx станет тегом xml-файла.

Я написал ниже код, который работает нормально,

open(XML, ">temp.csv") or die "not able to open $!"; use Spreadsheet::XLSX; my $excel = Spreadsheet::XLSX -> new ('test.xlsx'); foreach my $sheet (@{$excel -> {Worksheet}}) { $sheet -> {MaxRow} ||= $sheet -> {MinRow}; foreach my $row ($sheet -> {MinRow} .. $sheet -> {MaxRow}) { $sheet -> {MaxCol} ||= $sheet -> {MinCol}; foreach my $col ($sheet -> {MinCol} .. $sheet -> {MaxCol}) { my $cell = $sheet -> {Cells} [$row] [$col]; if ($cell) { print XML $cell -> {Val}; } unless($col == $sheet -> {MaxCol}) {print XML ",";} } unless( $row == $sheet -> {MaxRow}){print XML "\n";} } } close(XML); use XML::CSV; my $csv_obj = XML::CSV->new(); $csv_obj->parse_doc("temp.csv", {headings => 1}); $csv_obj->print_xml("out.xml"); 

Может ли кто-нибудь предложить лучший код (Module), поскольку мне приходится обрабатывать большие файлы .xlsx.

Заранее спасибо.

мужчина

Если ваш код работает, зачем вам что-то лучше? Если это только для скорости, вам нужно найти способ избежать записи временного CSV-файла. Файл IO медленный, и вы пишете, а затем перечитываете и переписываете. Не можете ли вы прочитать данные в хэш-файле, а затем выгрузить его в XML-файл, используя что-то вроде XML::Simple или любого другого модуля XML в CPAN? Снова писать CSV, перечитывать, перерисовывать и писать XML будет медленно!

У вас есть доступ к окну Windows с Excel 2007 или выше? Тогда вы можете сделать что-то вроде:

 my $excel = Win32::OLE->new( 'Excel.Application' ) or die "Could Not Start Excel.\n"; $excel->{ 'Visible' } = 0; $excel->{ DisplayAlerts } = 0; my $workbook = $excel->Workbooks->Open( 'test.xlsx' ); #save as Spreadsheet XML (46) # 51 = xlsx, more mappings here: http://www.datapigtechnologies.com/downloads/Excel_Enumerations.txt $workbook->SaveAs( $output_file, 46 ); $workbook->Close(); $excel->Quit(); 

Существует проект githup для разработки легкого XLSX-считывателя . В настоящее время он находится в каком-то альфа-состоянии, но он работает. Вы можете попробовать, если хотите.

  • Как игнорировать пространство имен XML
  • Как создать лист excel из xml-файла с помощью vb.net
  • Excel 2013 - привязка XML VBA при перезагрузке
  • Создание пользовательской XML-карты
  • Запись Excel 2003 с помощью C #
  • Отсутствует ссылка Microsoft XML на macOS Sierra 10.12.1, Office Mac 2011 14.6.1
  • конвертировать xml в xls
  • Разбор файлов Excel использует Objective C
  • Rails 4, заменив «\ n» на «& # 10;» для использования в XML-таблицах Excel в excel
  • Как преобразовать атрибуты в теги с помощью XSLT и избежать дубликатов?
  • Пустой Excel показывает числовое значение при просмотре XML. Заставляет XMLReader работать неправильно
  • Давайте будем гением компьютера.