2012-11-12 49 views
5

我正在使用Workbook.SaveAs方法保存在C#中創建的工作表。 XlSaveAsAccessMode參數給我提出了一些問題。將Excel工作表保存在共享不受保護的只讀模式下從C#

xlShared將工作表保存在保護模式下,因此用戶無法玩弄圖表並仔細檢查它們。它基本上顯示爲無法參考數據的死圖。

xlExclusive允許用戶保存圖書不受保護的訪問權限,但不允許其他人訪問。其他用戶仍然看到一張死圖。

我需要將工作表保存在允許所有人查看和檢查它的模式下,並且能夠使用圖表進行遊戲,將數據點與數據點等連接在一起。但是同時,他們不應該能夠保存其更改以覆蓋文件。如何使用C#COM Excel API實現此目的?

參考 -

http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.saveas(v=vs.80).aspx

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.xlsaveasaccessmode.aspx

回答

5

首先使用針對修改密碼保存文件 - 你可以做到這一點的另存爲對話框(下工具下拉上當你保存你的文件時,對話框的底部)。同時檢查只讀建議複選框強制文件上的只讀模式。

當用戶打開該文件時,Excel將要求輸入寫入密碼,但沒有該密碼的用戶將被強制進入只讀模式。在只讀mdoe中,用戶可以對文件進行任何更改,但不能保存原始文件(不管文件系統中的只讀屬性) - 它們只能將文件的新副本保存在新名稱(或不同文件夾中的相同名稱)。

以編程方式保存工作簿具有這些特性,你可以這樣做:

oWorkbook.SaveAs (oWorkbook.Path + @"\Workbook.xls", 
    Excel.XlFileFormat.xlWorkbookDefault, 
    missing, 
    "WritePassword", // password against modification 
    true,    // read-only recommended 
    false, 
    Excel.XlSaveAsAccessMode.xlNoChange, 
    missing, 
    missing, 
    missing, 
    missing, 
    missing); 

您也可以處理WorkBookBeforeSave事件,並跟蹤信息,以確定您的原始工作簿的副本更新的工作簿。這將有助於將原始文件名下的副本保存在不同的文件夾中。 (我對這個特殊事件並不熟悉,但在處理時甚至可以取消保存操作。)

除非您完全控制文件(僅使用Excel幾乎不可能),否則用戶將能夠複製你的文件,但上述設置至少強制他們保存新的副本,而原件是完好無損的。這是否能解決您的問題?

+0

感謝您的信息。你可以舉一個WorkBook.SaveAs實例的例子,你可以實現這些目標 - 這是允許每個人只讀但不受保護的訪問文件?因爲這是日常報告過程的一部分,所以我需要做這個程序化的盟友。我不設置XlSaveAsAccessMode爲其他人啓用不受保護的訪問的價值。似乎XlSaveAsAccessMode的所有值都鎖定了除我以外的其他用戶的工作表。 – user236215

+0

@ user236215我用一個示例更新了我的答案 - 這應該使用正確的設置保存您的工作簿。在實現此功能之前,請在您剛剛在Excel中創建的正常工作簿(不是以編程方式)嘗試它,看看它如何爲用戶工作。我認爲這是你需要的。 – xxbbcc

+0

謝謝。我非常感謝你的幫助。我明天早上要試試這個,並且會告訴你它是如何發生的。我還有一個相關的問題。我正在從模板文件創建我的文件。目前該模板具有寫入權限。我使用該模板打開一個新文件。進行更改並保存爲我的報告。現在,如果我將模板設置爲只讀,是否會以任何方式影響我的流程?我將在明天進行測試。基本上,我想讓模板只讀,保護和鎖定,所以除了我之外,沒有人可以修改它。 – user236215