ClosedXML сохранить рабочую книгу, чтобы открыть ее только для чтения - PullRequest
0 голосов
/ 30 октября 2018

Использование ClosedXML (v0.93.1) в .Net Core 2.0, попытка сохранить рабочую книгу, чтобы при открытии она предлагала пользователю открыть «Только для чтения» или ввести защищенный пароль. (См. Связанный вопрос ниже).

Я видел IXLWorksheet.Protect() и XLWorkbook.Protect() - они правильно защищают рабочую книгу, но по умолчанию пользователь открывает с правами доступа R / W. Это проблема, потому что при записи блокируется файл, и мой процесс не может перезаписать его, пока пользователь не закроет Excel.

Этот вопрос указывает, что OpenXML (базовый API для ClosedXML) может установить это при сохранении рабочей книги, однако ClosedXML XLWorkbook.SaveAs(SaveOptions) не включает это. Возможно, я не могу найти документацию closedxml по этому варианту, но я считаю, что этот вариант мне нужен.

Согласно этому ответу и прикрепленным ссылкам 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. */ });

1 Ответ

0 голосов
/ 30 октября 2018

Эта функция пока не поддерживается 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;
    }
...