Имам електронна таблица на Excel 2010 с XML карта, дефинирана в нея. С помощта на Perl искам да запазя работния лист като XML данни. Не е необходимо да експортирам файла с XML карта. От Excel мога да избера „Файл > Запиши като > Запиши като тип: XML данни”. Това е изходът, който искам да създам, но от моя Perl скрипт.
Мога да изведа работния лист във формат CSV, като използвам командата SaveAs
с enum 6. Мога също така да изведа електронната таблица в XML формат, използвайки SaveAs
с enum 46, но това не е, което искам. Искам само XML данните..
Изглежда, че има функция SaveAsXMLData
, но не мога да я накарам да работи. Всяка помощ се оценява.
use strict;
use warnings;
use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Excel';
use Win32::OLE::Variant;
use Win32::OLE::NLS qw(:LOCALE :DATE);
$Win32::OLE::Warn = 3; # Die on Errors.
my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
|| Win32::OLE->new('Excel.Application', 'Quit');
$Excel->{DisplayAlerts}=0;
my $excel_file = 'c:\\temp\\master.xlsx';
my $csv_file = 'c:\\temp\\master.csv';
my $xml_file = 'c:\\temp\\master.xml';
my $workbook = $Excel->Workbooks->Open($excel_file);
# Alt+F11 in Excel to start VBA and after that F2 to start Object browser.
# 6 is CSV format
# 46 is XML spreadsheet
$workbook->SaveAs( $csv_file, 6 );
# Now just the XML Data
# The map is called MDBAC_Map
my $objMapToExport = $Excel->Workbooks->XmlMaps("MDBAC_Map");
$workbook->SaveAsXMLData( $xml_file, $objMapToExport );
$workbook->Close();
$Excel->Quit();