VintaSoft Imaging .NET SDK 15.1: Документация для .NET разработчика
В этом разделе
Кодеки: Как работать с защищенным XLSX-файлом?
В этом разделе
VintaSoft Imaging .NET SDK позволяет открывать и просматривать защищенный XLSX-документ. Открытый защищенный XLSX-документ нельзя редактировать, но его можно сохранить в новый не защищенный XLSX-документ.


Вот C#/VB.NET код, который демонстрирует, как преобразовать защищенный XLSX-файл в многостраничный TIFF-файл:
/// <summary>
/// Converts encrypted XLSX document to a TIFF file using ImageCollection and TiffEncoder classes.
/// XLSX document is rendered with specified resolution.
/// </summary>
public static void ConvertEncryptedXlsxToTiff(string xlsxFileName, string password, string tiffFileName, float dpi)
{
    System.IO.Stream xlsxFileStream = System.IO.File.OpenRead(xlsxFileName);

    // if document is encrypted
    if (Vintasoft.Imaging.Office.OfficeDocumentCryptography.IsSecuredOfficeDocument(xlsxFileStream))
    {
        // create memory stream
        System.IO.MemoryStream xlsxDectyptedFileStream = new System.IO.MemoryStream();
        // try to decrypt DOCX document and save not encrypted DOCX document to a stream
        bool result = Vintasoft.Imaging.Office.OfficeDocumentCryptography.TryDecryptOfficeDocument(xlsxFileStream, password, xlsxDectyptedFileStream);
        // if XLSX document password is not correct
        if (!result)
            throw new System.Exception("Invalid password.");

        xlsxFileStream.Dispose();
        xlsxFileStream = xlsxDectyptedFileStream;
    }

    using (xlsxFileStream)
    // create image collection
    using (Vintasoft.Imaging.ImageCollection imageCollection = new Vintasoft.Imaging.ImageCollection())
    {
        // add XLSX document to image collection
        imageCollection.Add(xlsxFileStream);

        // set rendering settings
        imageCollection.SetRenderingSettings(new Vintasoft.Imaging.Codecs.Decoders.RenderingSettings(dpi, dpi));

        // create TiffEncoder
        using (Vintasoft.Imaging.Codecs.Encoders.TiffEncoder tiffEncoder =
            new Vintasoft.Imaging.Codecs.Encoders.TiffEncoder(true))
        {
            // set TIFF compression to Zip
            tiffEncoder.Settings.Compression =
                Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffCompression.Zip;

            // save images (rendered XLSX pages) of image collection to TIFF file using TiffEncoder
            imageCollection.SaveSync(tiffFileName, tiffEncoder);
        }

        // dispose images
        imageCollection.ClearAndDisposeItems();
    }
}
''' <summary>
''' Converts encrypted XLSX document to a TIFF file using ImageCollection and TiffEncoder classes.
''' XLSX document is rendered with specified resolution.
''' </summary>
Public Shared Sub ConvertEncryptedXlsxToTiff(xlsxFileName As String, password As String, tiffFileName As String, dpi As Single)
    Dim xlsxFileStream As System.IO.Stream = System.IO.File.OpenRead(xlsxFileName)

    ' if document is encrypted
    If Vintasoft.Imaging.Office.OfficeDocumentCryptography.IsSecuredOfficeDocument(xlsxFileStream) Then
        ' create memory stream
        Dim xlsxDectyptedFileStream As New System.IO.MemoryStream()
        ' try to decrypt DOCX document and save not encrypted DOCX document to a stream
        Dim result As Boolean = Vintasoft.Imaging.Office.OfficeDocumentCryptography.TryDecryptOfficeDocument(xlsxFileStream, password, xlsxDectyptedFileStream)
        ' if XLSX document password is not correct
        If Not result Then
            Throw New System.Exception("Invalid password.")
        End If

        xlsxFileStream.Dispose()
        xlsxFileStream = xlsxDectyptedFileStream
    End If

    Using xlsxFileStream
        ' create image collection
        Using imageCollection As New Vintasoft.Imaging.ImageCollection()
            ' add XLSX document to image collection
            imageCollection.Add(xlsxFileStream)

            ' set rendering settings
            imageCollection.SetRenderingSettings(New Vintasoft.Imaging.Codecs.Decoders.RenderingSettings(dpi, dpi))

            ' create TiffEncoder
            Using tiffEncoder As New Vintasoft.Imaging.Codecs.Encoders.TiffEncoder(True)
                ' set TIFF compression to Zip
                tiffEncoder.Settings.Compression = Vintasoft.Imaging.Codecs.ImageFiles.Tiff.TiffCompression.Zip

                ' save images (rendered XLSX pages) of image collection to TIFF file using TiffEncoder
                imageCollection.SaveSync(tiffFileName, tiffEncoder)
            End Using

            ' dispose images
            imageCollection.ClearAndDisposeItems()
        End Using
    End Using
End Sub


Вот C#/VB.NET код, который демонстрирует, как открыть защищенный XLSX-файл и сохранить его в незащищенный XLSX-файл:
/// <summary>
/// Converts encrypted XLSX document to not encrypted XLSX document.
/// </summary>
public static void ConvertEncryptedXlsxToXlsx(string xlsxFileName, string password, string resultXlsxFileName)
{
    // if document is encrypted
    if (Vintasoft.Imaging.Office.OfficeDocumentCryptography.IsSecuredOfficeDocument(xlsxFileName))
    {
        // try to decrypt XLSX document and save not encrypted XLSX document to a new file
        bool result = Vintasoft.Imaging.Office.OfficeDocumentCryptography.TryDecryptOfficeDocument(xlsxFileName, password, resultXlsxFileName);
        // if XLSX document password is not correct
        if (!result)
            throw new System.Exception("Invalid password.");
    }
    // if document is not encrypted
    else
    {
        System.IO.File.Copy(xlsxFileName, resultXlsxFileName, true);
    }
}
''' <summary>
''' Converts encrypted XLSX document to not encrypted XLSX document.
''' </summary>
Public Shared Sub ConvertEncryptedXlsxToXlsx(xlsxFileName As String, password As String, resultXlsxFileName As String)
    ' if document is encrypted
    If Vintasoft.Imaging.Office.OfficeDocumentCryptography.IsSecuredOfficeDocument(xlsxFileName) Then
        ' try to decrypt XLSX document and save not encrypted XLSX document to a new file
        Dim result As Boolean = Vintasoft.Imaging.Office.OfficeDocumentCryptography.TryDecryptOfficeDocument(xlsxFileName, password, resultXlsxFileName)
        ' if XLSX document password is not correct
        If Not result Then
            Throw New System.Exception("Invalid password.")
        End If
    Else
        ' if document is not encrypted
        System.IO.File.Copy(xlsxFileName, resultXlsxFileName, True)
    End If
End Sub