5

我正在使用 Workbook.SaveAs 方法保存在 C# 中创建的工作表。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

4

1 回答 1

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

于 2012-11-12T04:11:06.190 回答