VSTO SaveCopyAs方法在Excel 2007下必须注意的一个问题

http://www.haogongju.net/art/273841

SaveCopyAs是与Excel当前的默认保存设置格式相关的,它不会根据文件名后缀来自动调整保存的格式,也就是说,如果你设置默认存储格式为Excel 97-2003 Workbook(.xls)格式,而SaveCopyAs参数里的文件名是.xlsx的话,其实真正的格式仍然是.xls的,在这种情况下,你用Excel 2007去打开这个.xlsx文件,Excel程序就无法识别文件,从而弹出这样的警告

Excel 无法打开文件“xxxxx.xlsx”,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。
Excel cannot open the file 'xxxxx.xlsx' because the file format or file extension is not valid. Verify that the file has not been corrupted and that the file extension matches the format of the file.

因此,我们在调用SaveCopyAs之前最好探测一下当前的默认保存格式设置,本设置在如下注册表项中:

HKCU:Software\Microsoft\Office\12.0\Excel\Options\DefaultFormat(DWord)

若不存在本注册项,说明默认为OpenXML格式.xlsx,若存在,则0x38(56)是97-2003工作簿.xls格式,0x33(51)为.xlsx。

另外,用VSTO生成文档后,一般建议将其中的Customization关联代码去掉,否则外部用户打开文档时会出现令人讨厌的对话框。




defaultExtension  =   " .xlsx " ;
excel2007Options 
=  Registry.CurrentUser.OpenSubKey( " Software\\Microsoft\\Office\\12.0\\Excel\\Options " );
if  (excel2007Options  !=   null )
{
   
int  s  =  ( int )excel2007Options.GetValue( " DefaultFormat " );
   
if  (s  ==   56 ) defaultExtension  =   " .xls " ;
}
string  filename  =   " workbookName "   +  defaultExtension;
if  (System.IO.File.Exists(filename)) System.IO.File.Delete(filename);
this .SaveCopyAs(filename);
if  (ServerDocument.GetCustomizationVersion(filename)  ==   3 ) ServerDocument.RemoveCustomization(filename);

Please also check the excel default save option:







defaultExtension  =   " .xlsx " ;
excel2007Options 
=  Registry.CurrentUser.OpenSubKey( " Software\\Microsoft\\Office\\12.0\\Excel\\Options " );
if  (excel2007Options  !=   null )
{
   
int  s  =  ( int )excel2007Options.GetValue( " DefaultFormat " );
   
if  (s  ==   56 ) defaultExtension  =   " .xls " ;
}
string  filename  =   " workbookName "   +  defaultExtension;
if  (System.IO.File.Exists(filename)) System.IO.File.Delete(filename);
this .SaveCopyAs(filename);
if  (ServerDocument.GetCustomizationVersion(filename)  ==   3 ) ServerDocument.RemoveCustomization(filename);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值