C#中如何将Excel工作表保存为共享且非受保护的只读模式?

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

1个回答

5

首先,在保存文件时使用密码来防止修改——您可以在“另存为”对话框中(位于对话框底部的“工具”下拉菜单下)执行此操作。同时,勾选“建议只读”复选框以强制将文件设置为只读模式。

当用户打开文件时,Excel会要求输入写入密码,但没有该密码的用户将被强制进入只读模式。在只读模式下,用户可以对文件进行任何更改,但他们无法覆盖原始文件进行保存(无论文件系统中的只读属性如何)——他们只能将文件另存为一个新名称的副本(或在不同文件夹中使用相同的名称)。

要通过编程方式使用这些属性保存工作簿,您可以执行以下操作:

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

谢谢提供的信息。您能否给出一个WorkBook.SaveAs调用的示例,以实现这些目标 - 即允许每个人只读但无保护地访问文件?由于这是日常报告过程的一部分,我需要以编程方式完成此操作。我不知道要为XlSaveAsAccessMode设置什么值,以便为其他人启用无保护的访问权限。似乎XlSaveAsAccessMode的所有值都会锁定工作表,使其他用户无法使用。 - user236215
@user236215 我更新了我的答案,并提供了一个示例 - 这应该可以使用正确的设置保存您的工作簿。在实施之前,请先在Excel中创建一个普通的工作簿(而不是通过编程方式),以查看它如何为用户工作。我认为这可以满足您的需求。 - xxbbcc
谢谢。我非常感激你的帮助。我明天早上会尝试这个方法,并告诉你结果。我还有一个相关的问题。我正在从模板文件创建我的文件。目前,该模板具有写入权限。我使用模板打开新文件,进行更改并另存为我的报告。现在,如果我将模板设置为只读,是否会影响我的工作流程?我明天也要测试一下。基本上,我想将模板设置为只读、受保护和锁定,以便除了我之外的任何人都无法修改它。 - user236215
@user236215 不要将你的模板设置为只读 - 只需打开它,生成报告,然后使用上述的 SaveAs 调用将其保存为只读即可。我假设你的用户无法访问你使用的模板(或者如果他们可以访问也没有用),所以没有必要将其设置为只读。 - xxbbcc
是的,用户看不到它。但我不希望我的团队成员无意中更改它,因为那会搞乱报告。理想情况下,只要我对模板有读取权限,它应该允许我使用模板创建新的报告,对吗? - user236215
@user236215 是的,只要你能打开文件,就应该没问题。你还可以在Excel中使用写密码保存你的模板 - 当你以编程方式打开它时,你需要提供密码,然后就可以开始工作了。 - xxbbcc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接