0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#でExcelファイル印刷を自動化してみる

Posted at

1. はじめに

  • Excelファイルの印刷を自動で実行したい
  • タスクスケジューラーから定時起動したい

2. 開発環境

  • Visual Stduio 2022
  • .NET 8
  • Windows 11
  • Excel 2021

3. 自動処理の内容

  • コンソールアプリとして作成する
  • ファイル名、プリンタ名は一旦固定とする
  • Excelファイルが複数シートある場合、シート分印刷する
  • タスクスケジューラから起動できるようにする

4. 事前準備

4.1. Visual Stduioの設定

  • 「Microsoft Excel 16.0 Object Library」の参照設定を追加する

image.png

4.2. コンポーネントサービスの設定 (Excel)

  • 設定を変更しない場合、タスクスケジューラから起動できない。

1. マイ コンピューター > DCOM構成 > Microsoft Excel Applicationを右クリックして、プロパティを選択する

image.png

2. IDタブを開いて、対話ユーザーに変更する

image.png

5. ソースコード

Program.cs
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {

            Excel.Application? app = null;

             try
            {
                // Excelオブジェクトを生成する
                app = new Excel.Application();

                Excel.Workbook? wb = null;

                try
                {
                    // 印刷ファイルを開く
                    wb = app.Workbooks.Open(@"D:\Book1.xlsx");

                    // 全シートを印刷する
                    foreach (Excel.Worksheet sh in wb.Sheets)
                    {
                        try
                        {
                            // 固定のプリンタへ印刷する
                            sh.PrintOutEx(ActivePrinter: "Microsoft Print to PDF");
                        }
                        catch (Exception ex)
                        {
                            throw new ApplicationException(sh.Name, ex);
                        }
                    }
                }
                finally
                {
                    if (wb != null)
                    {
                        // Excelファイルを閉じる
                        wb.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                // エラーメッセージを出力
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                if (app != null)
                {
                    // Excelオブジェクトを終了する
                    GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect();
                    app.Quit();
                    Marshal.ReleaseComObject(app); app = null;
                    GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect();
                }
            }
        }

   }
}

6. 注意事項

6.1. Excelオブジェクトの開放

  • 単純にExcelオブジェクトをQuitしただけだとプロセスが残るため、後処理が必要になる。

6.2. タスクスケジューラの利用可能ユーザ

  • タスクスケジューラのユーザーではプリンタへの印刷ができないため、DCOMの設定変更をしておく必要がある。

6.3. Office のオートメーションをサーバーサイドで使用する際の問題

  • Windows Server上で実行する場合、複雑な問題があるので利用しないほうがよい。

7. 参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?