excel - 使用 Perl 在 Excel 2010 工作表上保存 AsXMLData

标签 excel perl save-as

我有一个 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/

相关文章:

excel - 如何让 Excel 工作表忘记它是从 TFS 生成的?

vba - 宏 : If find specific string in Column B, 然后用新字符串替换 A 列

regex - 在Perl中,如何从字符串中删除连续的字符对?

perl - 在 Perl 中比较字符串时如何忽略重音符号?

Django 模型形式 : How to override or check for "save_as"

excel - 从 Excel 公式中提取参数或字符串 - Excel 2003

vba - # 在超链接中防止复制完整的超链接

perl - 从/向同一文件逐行读取和写入

vb.NET SaveAs 不保存所有 Excel 数据