Password Protecting an Excel file in C#

37,257

Solution 1

If you want an Excel password all you need is something like this:

using Microsoft.Office.Interop.Excel

//create your spreadsheet here...

WorkbookObject.Password = password;
WorkbookObject.SaveAs("spreadsheet.xls")

This requires Excel to be installed.

That's nothing to do with System.IO.Packaging of course, so you might need to restate your question...

Solution 2

It's not possible using System.IO.Packaging. You will have to use Microsoft.Office.Interop.Excel using the Worksheet.SaveAs method. This requires Excel being installed on your target system.

Solution 3

You will have to use the SaveAs method on the Worksheet. It has a parameter to set a password. Here is an example in VB which can be converted to C#

http://www.codeproject.com/KB/office/Excel_Security.aspx

Solution 4

using System.IO;
using Excel=Microsoft.Office.Interop.Excel;

class ExcelUtil
{
    public  string Filename;

    private  Excel.Application oexcel;

    private Excel.Workbook obook;

    private  Excel.Worksheet osheet;
    public void createPwdExcel()
    {
        try
        {
            // File name and path, here i used abc file to be 
            // stored in Bin directory in the sloution directory
            //Filename = (AppDomain.CurrentDomain.BaseDirectory + "abc.xls");
            if (File.Exists(Filename))
            {
                File.Delete(Filename);
            }

            if (!File.Exists(Filename))
            {
                // create new excel application
                Excel.Application oexcel = new Excel.Application();
                oexcel.Application.DisplayAlerts = false;
                obook = oexcel.Application.Workbooks.Add(Type.Missing);
                oexcel.Visible = true;
                Console.WriteLine("Generating Auto Report");
                osheet = (Excel.Worksheet)obook.Sheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                osheet.Name = "Test Sheet";
                osheet.get_Range("A1:G1").Merge();
                osheet.get_Range("A1").Value = @"Implementing Password Security on Excel Workbook Using Studio.Net";

                osheet.get_Range("A1").Interior.ColorIndex = 5;
                osheet.get_Range("A1").Font.Bold = true;
                string password = "abc";
                obook.WritePassword = password;
                obook.SaveAs("Chandra.xlsx");
                // otherwise use the folowing one
                // TODO: Labeled Arguments not supported. Argument: 2 := 'password'
                // end application object and session
                osheet = null;
                obook.Close();
                obook = null;
                oexcel.Quit();
                oexcel = null;
            }

        }
        catch (Exception ex)
        {

        }

    }
}
Share:
37,257
yeahumok
Author by

yeahumok

Updated on July 09, 2022

Comments

  • yeahumok
    yeahumok almost 2 years

    Does anyone know the syntax for this? I've been looking everywhere and all I can find is C++ code for this. I'm trying to password protect an excel file programatically using the System.IO.Packaging namespace.

    Any ideas?

    Additional notes:

    I'm NOT using the Excel interop--but instead the System.IO.Packaging namespace to encrypt and password protect the excel file.

  • Dirk Vollmar
    Dirk Vollmar about 15 years
    Although Excel (and COM automation in general) is way easier in VB than in C# (3.0).
  • MikeTeeVee
    MikeTeeVee over 9 years
    Here's a link explaining this for those interested: social.msdn.microsoft.com/Forums/en-US/…
  • Chandrasekhar Telkapalli
    Chandrasekhar Telkapalli almost 7 years
    using Excell Interop, but however keypoint here is Workbook.WritePassword="somepassword", this is the way we need to assign.
  • Subodh S
    Subodh S over 5 years
    This solution worked. But this will require to install Microsoft office in servers wherever this code will be running. As there are many servers in my case, customer is not ready pay for Microsoft office in each server. Is there any other way to set password in Excel file without having to install Microsoft office?