【问题标题】:ClosedXML save workbook to prompt for readonly openClosedXML 保存工作簿以提示只读打开
【发布时间】:2018-10-30 13:14:58
【问题描述】:

在 .Net Core 2.0 上使用 ClosedXML (v0.93.1),尝试保存工作簿,以便在打开时提示用户以“只读”方式打开或输入受保护的密码。 (请参阅下面的链接问题)。

我见过IXLWorksheet.Protect()XLWorkbook.Protect() - 它们正确地保护了工作簿,但仍然默认用户以 R/W 访问权限打开。这是一个问题,因为它写入锁定了文件,并且我的进程在用户关闭 excel 之前无法覆盖它。

This question 表示 OpenXML(ClosedXML 的底层 API)可以在保存工作簿时进行设置,但 ClosedXML XLWorkbook.SaveAs(SaveOptions) 不包含此功能。也许我找不到关于这个选项的 closedxml 文档,但我相信这是我需要的选项。

根据this answer 和附加的 github/MSDN 链接,OpenXML 不支持密码保护,但除了第一个链接的问题说它应该是可能的之外,我没有看到任何关于只读打开的信息。

代码示例:

XLWorkbook wb = new XLWorkbook();
var ws = wb.AddWorksheet("My Sheet");

// ... add to worksheet

ws.Protect("my-worksheet-password");
wb.SaveAs("C:\\my-workbook.xlsx", new SaveOptions { /* In OpenXML the option would exist during this save step. */ });

【问题讨论】:

标签: c# excel .net-core openxml closedxml


【解决方案1】:

ClosedXML 尚不支持此功能,但您可以直接使用 OpenXml 来设置 require 属性。参考https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.filesharing.readonlyrecommended?view=openxml-2.8.1

    private void GeneratePartContent(WorkbookPart part)
    {
        FileSharing fileSharing1 = new FileSharing(){ ReadOnlyRecommended = true };
        workbook1.Append(fileSharing1);
        part.Workbook = workbook1;
    }

【讨论】:

  • 谢谢。在您的示例中,workbook1 的类型是什么?我正在尝试将我的 XLWorkbook 保存到内存流中,然后以 SpreadsheetDocument 的身份打开以遵循您的建议。
  • 能够使用SpreadsheetDocument.WorkbookPart.Workbook.FileSharing = new FileSharing { ... };实现这一目标
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多