Skip to content

Instantly share code, notes, and snippets.

@tricknotes
Created January 24, 2011 19:43
Show Gist options
  • Save tricknotes/793810 to your computer and use it in GitHub Desktop.
Save tricknotes/793810 to your computer and use it in GitHub Desktop.
Excelファイルの読み書き用ユーティリティ
/*
* Windows上でExcelを操作するためのシンプルなモジュールです。
* ファイルのオープン・クローズを隠蔽しています。
*/
var excel = (function() {
var exports = {};
// Excel操作
var Operator = function(core) {
this.getCore = function() {
return core;
}
}
// API private
var operateWorkbook = function(workbook, fn) {
try {
fn(workbook);
} finally {
if (workbook) workbook.Close();
}
}
// 簡易APIを提供
var moduleOperator = function(name) {
exports[name] = function() {
var args = arguments;
operate(function(operator) {
operator[name].apply(operator, [].slice.apply(args));
});
}
}
// ファイル作成
Operator.prototype.createFile = function(filename, fn) {
operateWorkbook(this.getCore().Workbooks.Add(), function(workbook){
fn(workbook);
workbook.SaveAs(filename);
});
}
moduleOperator("createFile");
// ファイル更新
Operator.prototype.updateFile = function(filename, fn) {
operateWorkbook(this.getCore().Workbooks.Open(filename), function(workbook){
fn(workbook);
workbook.SaveAs(filename);
});
}
moduleOperator("updateFile");
// ファイル移動(コピーして編集)
Operator.prototype.copyFile = function(originalFilename, newFilename, fn) {
operateWorkbook(this.getCore().Workbooks.Open(originalFilename), function(workbook){
fn && fn(workbook); // fn なしも許容する
workbook.SaveAs(newFilename);
});
}
moduleOperator("copyFile");
// ファイルを開く
Operator.prototype.openFile = function(filename, fn) {
operateWorkbook(this.getCore().Workbooks.Open(filename), function(workbook){
fn(workbook);
});
}
moduleOperator("openFile");
// Excel操作
var operate = exports.operate = function(fn) {
var core = new ActiveXObject("Excel.Application");
core.Visible = false;
core.DisplayAlerts = false;
try {
fn(new Operator(core));
} finally {
core.Quit();
}
};
return exports;
})();
@tricknotes
Copy link
Author

Windows上でExcelを操作するためのシンプルなモジュールです。

ファイルのオープン・クローズを隠蔽しています。

[Usage]

ファイルを新規に作成

excel.createFile("hoge.xls", function(workbook) {
    workbook.WorkSheets(1).Cells(1, 1).value = "tricknotes";
});

既存のExcelファイルを更新

excel.updateFile("hoge.xls", function(workbook) {
    workbook.WorkSheets(1).Cells(2, 1).value = "updated by JScript";
});

既存のExcelファイルをコピーして更新

excel.copyFile("hoge.xls", "foo.xls", function(workbook) {
    workbook.WorkSheets(1).Cells(3, 1).value = "copeid from hoge.xls";
});

Excelファイルを読み込む

excel.openFile("foo.xls", function(workbook) {
    WScript.Echo(workbook.WorkSheets(1).Cells(1, 1).value);
});

複数のファイル操作を行う場合はoperateメソッドを利用するとCPUにやさしいです

excel.operate(function(operator) {
    operator.updateFile("foo.xls", function(foo) {
        var worksheet = foo.WorkSheets(1);
        worksheet.Cells(3, 3).value = "xxxxxxxxxxxxxxxx";
        var message = worksheet.Cells(1, 1).value;

        // ネストしたファイル操作も可能
        operator.createFile("bar.xls", function(bar) {
            bar.WorkSheets(1).Cells(5, 5).value = message;
        });
    });
});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment