我有一个 Excel 2010 电子表格,其中定义了一个 XML 映射。使用 Perl 我想将工作表保存为 XML 数据。我不需要导出 XML 映射文件。在 Excel 中,我可以选择“文件 > 另存为 > 另存为类型:XML 数据”。这是我要创建的输出,但来自我的 Perl 脚本。
我可以使用 SaveAs
以 CSV 格式输出工作表带有枚举 6 的命令。我还可以使用 SaveAs
以 XML 格式输出电子表格使用枚举 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();
最佳答案
我自己解决了这个问题(我 99% 都在那里!)。使用 Excel 中的宏记录器确认所需的函数调用如下:
ChDir "C:\temp"
ActiveWorkbook.SaveAsXMLData Filename:="C:\temp\master.xml", Map:= _
ActiveWorkbook.XmlMaps("MDBAC_Map")
导出 XML 映射的代码行错误。将上面的代码更改如下,脚本工作正常:
my $objMapToExport = $workbook->XmlMaps("MDBAC_Map");
关于excel - 使用 Perl 在 Excel 2010 工作表上保存 AsXMLData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14560381/