Excelには.xls
(旧フォーマット)と.xlsx
(新フォーマット)が存在し、業務上で処理する際に両方のファイルを取り扱う場合があります。
各プログラム言語のExcel
を操作するライブラリでは、.xlsx
のみ対応しているケースが多い為、ファイル形式を変換して扱うようにしてみようと思います
COM参照の追加
COMオブジェクトを扱うため、以下の参照を追加しました。
※PCにExcelがインストールされている必要があります
- Microsoft Excel 16.0 Object Libraly
- Microsoft Office 16.0 Object Libraly
変換処理
とりあえず、やりたいことだけ実行するように処理を記述。
using Excel = Microsoft.Office.Interop.Excel;
class Program
{
static void Main(string[] args)
{
// コマンドライン引数からファイルパスを取得
// ExcelConverter.exe "C:\path\to\your\inputFile.xls" "C:\path\to\your\outputFile.xlsx"
if (args.Length < 2)
{
Console.WriteLine("Usage: ExcelConverter <input file> <output file>");
return;
}
string inputFile = args[0];
string outputFile = args[1];
var excelApp = new Excel.Application();
Excel.Workbook workbook = null;
try
{
// .xlsファイルを開く
workbook = excelApp.Workbooks.Open(inputFile);
// .xlsx形式で保存
workbook.SaveAs(outputFile, Excel.XlFileFormat.xlOpenXMLWorkbook);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
if (workbook != null)
{
workbook.Close(false);
excelApp.Quit();
}
// COMオブジェクトの解放
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
}
}
}
ビルドして実行
コマンドプロンプトから実行して、ファイルが変換できることを確認。
ExcelConverter.exe "C:\path\to\your\inputFile.xls" "C:\path\to\your\outputFile.xlsx"
とりあえず、変換処理はできたので次はこれを別のプログラムから呼び出してみたいと思います。