保存excel工作表在共享不受保护的只读模式从C#

我正在使用Workbook.SaveAs方法保存在C#中创build的工作表。 XlSaveAsAccessMode参数给我的问题。

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

首先使用密码修改文件保存文件 – 您可以在保存文件时在“ 另存为”对话框(位于对话框底部的“ 工具”下拉菜单下)中执行此操作。 同时检查只读build议checkbox强制文件上的只读模式。

当用户打开该文件时,Excel将要求input写入密码,但没有该密码的用户将被强制进入只读模式。 在只读mdoe中,用户可以对文件进行任何更改,但不能保存原始文件(不pipe文件系统中的只读属性如何) – 它们只能将文件的新副本保存在新名称(或不同文件夹中的相同名称)。

要以这些属性以编程方式保存工作簿,可以执行如下操作:

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几乎是不可能的),用户将能够复制你的文件,但是上面的设置至less强制他们保存新的副本,而原件完好无损。 这是否解决您的问题?