やりたいこと
インターネットにつながらない環境(Windows)でExcelを操作したい!
でもエクセルマクロは使いたくない!
結果
できたけど注意点あり。
環境
- インターネットにはつながってない
- .NetFrameworkがインストールされている
- Officeがインストールされている
やりかた
.NetFrameworkがインストールされていれば一緒に入っているC#のコンパイラを使います。
c:\Windows\Microsoft.NET
の下に入っています。
次にエクセルを利用するライブラリ(Microsoft.Office.Interop.Excel)を探します。
> dir /S /B C:\Windows\ | findstr Interop.Excel.dll
C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Excel\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll
....
C#のソースを書きます。(とりあえずシート一覧を表示するだけのサンプル)
参考:C#: Excelファイルを読み書きする (COM)
excel.cs
using System.IO;
using System;
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Excel;
namespace excel_app
{
class Program
{
static int Main( string[] args )
{
if (args.Length < 1)
{
Console.WriteLine("Excelファイルを指定してください");
return 1;
}
var path = args[0];
// Excelのオブジェクトはすべて変数に入れて、使用し終わったら解放を忘れないようにしてください。
// また、excel.Workbooks.Open() などのようにドットを2回以上続けないでください。
// (解放漏れが発生して、Excelのプロセスが残り続けるため)
Microsoft.Office.Interop.Excel.Application excel = null;
Microsoft.Office.Interop.Excel.Workbooks books = null;
Microsoft.Office.Interop.Excel.Workbook book = null;
Microsoft.Office.Interop.Excel.Sheets sheets = null;
Microsoft.Office.Interop.Excel.Worksheet sheet = null;
try
{
excel = new Microsoft.Office.Interop.Excel.Application();
excel.DisplayAlerts = false;
books = excel.Workbooks;
book = books.Open(path);
sheets = book.Worksheets;
for(int i=1 ; i<=sheets.Count;i++)
{
sheet = (Worksheet)sheets[i];
Console.WriteLine(sheet.Name);
}
book.Close(SaveChanges: false);
excel.Quit();
}
catch (Exception)
{
if (book != null) book.Close(SaveChanges: false);
if (excel != null) excel.Quit();
}
finally
{
FinalReleaseComObject(sheet);
FinalReleaseComObject(sheets);
FinalReleaseComObject(book);
FinalReleaseComObject(books);
FinalReleaseComObject(excel);
}
return 0;
}
static private void FinalReleaseComObject(object o)
{
if (o != null) Marshal.FinalReleaseComObject(o);
}
}
}
さっき探したMicrosoft.Office.Interop.Excel.dllをソースと同じフォルダにコピーしてビルドする。
> C:\Windows\Microsoft.NET\Framework64\v4.0.xxxx\csc.exe /nologo /reference:Microsoft.Office.Interop.Excel.dll excel.cs
exeができるので実行する!
問題発生
アンチウイルスソフトがexeを検知して消されてしまう。
運用部門から連絡があって注意されました。
検知される理由はわかりませんし、これ以上試すわけにもいかない。
せっかく作ったのに残念。。。