C#
でエクセルファイル (ワークブック) を扱うライブラリは幾つかありますが、EPPlusであれば、パスワード付きで保存ができるようです。
EPPlus
は有料のようなので、ライセンスに関しては確認してみてください。
こちらも参考に。
ClosedXMLのような無料 (オープンソース) のライブラリもありますが、パスワード付きで保存することは難しいようです。
エクセルがインストールされて入れば、C#
からCOM
でエクセルを操作して、パスワード付きで保存するとが比較的簡単です。以下のサンプルプログラムを試してみて下さい。
C#
1using System;
2using System.Runtime.InteropServices;
3using System.Threading;
4
5using Excel = Microsoft.Office.Interop.Excel;
6
7class prog
8{
9 static void Main(String[] args)
10 {
11 //アプリケーションのインスタンス作成
12 var excel = new Excel.Application()
13 {
14 Visible = true
15 };
16
17 try
18 {
19 //Excel ワークブック ファイル名
20 string file_path = @"Book1.xlsx";
21
22 //ファイルを開く
23 var books = excel.Workbooks;
24 var workbook = books.Open(file_path);
25
26 Thread.Sleep(2 * 1000);
27 excel.WindowState = Excel.XlWindowState.xlMinimized; //エクセルを最小化
28
29 Console.Write("ワークブックをオープン:");
30 string buff1 = Console.ReadLine();
31
32 //ブック保存
33 //workbook.Saved = true; //保存するときに警告が出ないように
34 workbook.SaveAs( //ワークブックを保存
35 "Book1a.xlsx", //ファイル名
36 Type.Missing,
37 "abcd"); //パスワード付きで保存
38 workbook.Close(); //閉じる
39
40 Marshal.ReleaseComObject(workbook); //COMオブジェクトを解放
41 Marshal.ReleaseComObject(books); //COMオブジェクトを解放
42
43 // アプリケーションのオブジェクトの解放
44 excel.Quit();
45 }
46 catch (Exception e)
47 {
48 Console.WriteLine("メッセージ {0}", e.Message);
49 Console.WriteLine("ソース {0}", e.Source);
50 }
51 finally
52 {
53 Marshal.ReleaseComObject(excel); //COMオブジェクトを解放
54
55 excel = null;
56 }
57
58 Console.Write("プログラムを終了:");
59 string buff3 = Console.ReadLine();
60 }
61}
Microsoft.Office.Interop.Excel
を使用しますので、参照にタイプライブラリのMicrosoft Excel xx.x Object Library
を追加しておいて下さい。(xx.x はバージョン)
確認のためにエクセルを表示していますが、必要無ければ非表示のほうがいいです。
C#
からCOM
を使う場合、workbook
などの COM Object は確実に解放しないと、メモリーリークしたり、エクセルが終了しなかったりと、ちょっと厄介なことがあります。
こちら も参考になります。