在Excel 2010工作表上使用Perl来保存数据

我有一个Excel 2010电子表格,里面定义了XML地图。 使用Perl我想将工作表保存为XML数据。 我不需要导出XML映射文件。 在Excel中,我可以select“文件>另存为>另存为types:XML数据”。 这是我想创build的输出,但是从我的Perl脚本。

我可以使用带有枚举6的SaveAs命令以CSV格式输出工作表。我也可以使用带有枚举46的SaveAs以XML格式输出电子表格,但这不是我想要的。 我只想要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(); 

修正了这个问题(我在那里99%!)。 使用Excel中的macroslogging器确认所需的函数调用如下:

 ChDir "C:\temp" ActiveWorkbook.SaveAsXMLData Filename:="C:\temp\master.xml", Map:= _ ActiveWorkbook.XmlMaps("MDBAC_Map") 

导出XML映射的代码行是错误的。 更改上面的代码如下,脚本工作正常:

 my $objMapToExport = $workbook->XmlMaps("MDBAC_Map");