0.0.3 • Public • Published


node-win32ole - Windows COM bindings for node.js

win32ole makes accessibility from node.js to Excel, Word, Access, Outlook, InternetExplorer, WSH ( ActiveXObject / COM ) and so on. It does not need TypeLibrary.


Install with npm install win32ole.

It works as... (version 0.1.x)

  var win32ole = require('win32ole');
  // var xl = new ActiveXObject('Excel.Application'); // You may write it as:
  var xl = win32ole.client.Dispatch('Excel.Application');
  xl.Visible = true;
  var book = xl.Workbooks.Add();
  var sheet = book.Worksheets(1);
    sheet.Name = 'sheetnameA utf8';
    sheet.Cells(1, 2).Value = 'test utf8';
    var rg = sheet.Range(sheet.Cells(2, 2), sheet.Cells(4, 4));
    rg.RowHeight = 5.18;
    rg.ColumnWidth = 0.58;
    rg.Interior.ColorIndex = 6; // Yellow
    var result = book.SaveAs('testfileutf8.xls');
    console.log('(exception cached)\n' + e);
  xl.ScreenUpdating = true;
  console.log('*** exception cached ***\n' + e);

There are 3 ways to make force Garbage Collection for node.js / v8 .

    1. use huge memory to run GC automatically ( causes abnormal termination )
    1. win32ole.force_gc_extension(1);
    1. win32ole.force_gc_internal(1);

see also examples/ole_args_test_client.js

Tutorial and Examples

Other built in functions

  • win32ole.version(void) // returns version string
  • win32ole.printACP(utf8string) // Utf8 to .ACP
  • win32ole.print(utf8string) // ASCII
  • win32ole.gettimeofday(struct timeval &tv, null) // now arg2 is not used
  • win32ole.sleep(long milliseconds, bool withmessage=false, bool with\n=false)
  • win32ole.force_gc_extension(long flag) // now flag is dummy
  • win32ole.force_gc_internal(long flag, string) // now flag is dummy


  • fix BUG: date
  • BUG: A few samples in win32ole@0.1.0 needs '._' ideom.
  • When you use unary operator '!' at the place that needs boolean CONDITION (for example 'while(!obj.status){...}') , you must write 'while(!obj.status._){...}' to complete v8::Object::ToBoolean() conversion. (NamedPropertyHandler will not be called because v8::Object::ToBoolean() is called directly for unary operator '!' instead of v8::Object::valueOf() in ParseUnaryExpression() v8/src/parser.cc .) Do you know how to fake it?
  • V8Variant::OLEGetAttr returns a copy of object, so it uses much memory. I want to fix it.
  • Now '._' ideom is obsoleted.
  • Remove 'node-proxy' from dependencies list.
  • Change default branch to dev0.1.0 .
  • BUG: Some samples in between win32ole@0.0.25 and win32ole@0.0.28 ( examples/maze_creator.js examples/maze_solver.js ) uses huge memory and many disposers will run by v8 GC when maze size is 20*30. I think that each encapsulated V8Variant (by node-proxy) may be big object. So I will try to use v8 accessor handlers ( SetCallAsFunctionHandler / SetNamedPropertyHandler / SetIndexedPropertyHandler ) instead of ( 'noSuchMethod' / 'noSuchGetter' / 'noSuchSetter' ) by node-proxy.
  • So much implements. (can not handle some COM VARIANT types, array etc.)
  • Bug fix. (throws exception when failed to Invoke(), and many test message.)
  • Implement accessors getter, setter and caller. (version 0.1.x) (Some V8Variants were advanced to 0.1.x .)


See the API documentation in the wiki.


This project uses VC++ 2008 Express (or later) and Python 2.6 (or later) . (When using Python 2.5, it needs multiprocessing 2.5 back port .) It needs neither ATL nor MFC.

Bulding also requires node-gyp to be installed. You can do this with npm:

npm install -g node-gyp

To obtain and build the bindings:

git clone git://github.com/idobatter/node-win32ole.git
cd node-win32ole
node-gyp configure
node-gyp build

You can also use npm to download and install them:

npm install win32ole


mocha is required to run unit tests.

npm install -g mocha
nmake /a test



Inspired Win32OLE


node-win32ole is BSD licensed.

Package Sidebar


npm i @ctsy/win32ole

Weekly Downloads






Unpacked Size

123 kB

Total Files


Last publish


  • ida_xyt
  • yanpengquan