設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 8145|回復(fù): 3
打印 上一主題 下一主題

VSTO SaveCopyAs方法在Excel 2007下必須注意的一個問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2014-3-25 22:40:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
SaveCopyAs是與Excel當(dāng)前的默認保存設(shè)置格式相關(guān)的,它不會根據(jù)文件名后綴來自動調(diào)整保存的格式,也就是說,如果你設(shè)置默認存儲格式為Excel 97-2003 Workbook(.xls)格式,而SaveCopyAs參數(shù)里的文件名是.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.
因此,我們在調(diào)用SaveCopyAs之前最好探測一下當(dāng)前的默認保存格式設(shè)置,本設(shè)置在如下注冊表項中:
HKCU:Software\Microsoft\Office\12.0\Excel\Options\DefaultFormat(DWord)
若不存在本注冊項,說明默認為OpenXML格式.xlsx,若存在,則0x38(56)是97-2003工作簿.xls格式,0x33(51)為.xlsx。
另外,用VSTO生成文檔后,一般建議將其中的Customization關(guān)聯(lián)代碼去掉,否則外部用戶打開文檔時會出現(xiàn)令人討厭的對話框。

  1. defaultExtension = ".xlsx";
  2. excel2007Options = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Office\\12.0\\Excel\\Options");
  3. if (excel2007Options != null)
  4. {
  5.    int s = (int)excel2007Options.GetValue("DefaultFormat");
  6.    if (s == 56) defaultExtension = ".xls";
  7. }
  8. string filename = "workbookName" + defaultExtension;
  9. if (System.IO.File.Exists(filename)) System.IO.File.Delete(filename);
  10. this.SaveCopyAs(filename);
  11. if (ServerDocument.GetCustomizationVersion(filename) == 3) ServerDocument.RemoveCustomization(filename);
復(fù)制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享分享 分享淘帖 訂閱訂閱
2#
 樓主| 發(fā)表于 2014-3-25 22:42:32 | 只看該作者
Please also check the excel default save option:




  1. defaultExtension = ".xlsx";
  2. excel2007Options = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Office\\12.0\\Excel\\Options");
  3. if (excel2007Options != null)
  4. {
  5.    int s = (int)excel2007Options.GetValue("DefaultFormat");
  6.    if (s == 56) defaultExtension = ".xls";
  7. }
  8. string filename = "workbookName" + defaultExtension;
  9. if (System.IO.File.Exists(filename)) System.IO.File.Delete(filename);
  10. this.SaveCopyAs(filename);
  11. if (ServerDocument.GetCustomizationVersion(filename) == 3) ServerDocument.RemoveCustomization(filename);
復(fù)制代碼



本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊

x

點擊這里給我發(fā)消息

3#
發(fā)表于 2014-7-13 07:13:51 來自手機 | 只看該作者
不錯!感覺有點難!

點擊這里給我發(fā)消息

4#
發(fā)表于 2014-7-13 07:15:30 來自手機 | 只看該作者
不錯!!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2025-7-13 08:04 , Processed in 0.084327 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表