NodeJS 使用 officegen 生成 Excel, PowerPoint, 和Word文檔

NodeJS 使用 officegen 生成 Excel(.xlsx),PowerPoint(.pptx)和Word(.docx)文檔

officegen 模塊能夠爲Microsoft Office 2007及更高版本生成Office Open XML文件。此模塊不依賴於任何框架,您不須要安裝Microsoft Office,所以您能夠將它用於任何類型的JavaScript應用程序。輸出也是流而不是文件,不依賴於任何輸出工具。此模塊應適用於支持Node.js 0.10或更高版本的任何環境,包括Linux,OSX和Windows。git

此模塊生成Excel(.xlsx),PowerPoint(.pptx)和Word(.docx)文檔。 Officegen還支持帶有嵌入數據的PowerPoint本機圖表對象。github

項目地址: https://github.com/Ziv-Barber/officegen

安裝

git clone git://github.com/Ziv-Barber/officegen.gitnpm

npm install officegenpromise

npm install Ziv-Barber/officegen#masterapp

依賴模塊

  1. archiver
  2. setimmediate
  3. fast-image-size
  4. xmlbuilder
  5. lodash

API

建立一個文檔對象:

var officegen = require('officegen');框架

var myDoc = officegen ( '<type>' );async

type 能夠是 pptx, docx, xlsx工具

var myDoc = officegen ({
  'type': '<type of document to create>', // 類型
  {} // options 配置項
});

監聽文檔完成或者錯誤

// 監聽文檔完成
myDoc.on ( 'finalize', function ( written ) {
    console.log ( written );
});
// 監聽文檔錯誤
myDoc.on ( 'error', function ( err ) {
    console.log ( err );
});
// 一樣能夠在實例化的時候指定
var pptx = officegen ({
    'type': 'pptx', // or 'xlsx', etc
    'onend': function ( written ) {
       console.log(written);
    },
    'onerr': function ( err ) {
        console.log ( err );
    }
});
// 通樣能夠在生成文件的時候指定
var myDoc = officegen('pptx');
var out = fs.createWriteStream ( 'out.pptx' ); // 建立文件

myDoc.generate ( out, {
  'finalize': function ( written ) {
    console.log ( written );
  },
  'error': function ( err ) {
    console.log ( err );
  }
});

基於 http 流建立文件

var http = require("http");
var officegen = require('officegen');

http.createServer ( function ( request, response ) {
  response.writeHead ( 200, {
    "Content-Type": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
    'Content-disposition': 'attachment; filename=surprise.pptx'
    });

  var pptx = officegen ( 'pptx' );

  pptx.on ( 'finalize', function ( written ) {
      // ...
      });

  pptx.on ( 'error', function ( err ) {
      // ...
      });

  // ... (fill pptx with data)

  pptx.generate ( response );
}).listen ( 3000 );

將數據放在文檔對象中:

更改文檔標題(pptx,ppsx,docx):

var pptx = officegen ({
    'type': 'pptx',
	'title': '<title>'
});

// or

pptx.setDocTitle ( '<title>' );

如下只有在 word 中使用:ui

var docx = officegen ({
    'type': 'docx',
	'subject': '...',
	'keywords': '...',
	'description': '...'
});

// or

docx.setDocSubject ( '...' );
docx.setDocKeywords ( '...' );
docx.setDescription ( '...' );

生成 ppt https://github.com/Ziv-Barber/officegen#powerpoint 參考

生成 word https://github.com/Ziv-Barber/officegen#word 參考

生成 excel https://github.com/Ziv-Barber/officegen#excel 參考

實例: https://github.com/Ziv-Barber/officegen#examples

使用 promise

官網中沒有 promise 的例子, 咱們須要本身改造excel

async function generate(){
    return new Promise((resolve, reject) => {
        var myDoc = officegen('pptx');

        dosoming ...

        var out = fs.createWriteStream ( 'out.pptx' ); // 建立文件

        myDoc.generate ( out, {
        'finalize': function(data){
            console.log(data);
        },
        'error': reject,
        });

        out.on('finish', function(){
            resolve(true);
        });
    });
}
// 調用
let resuslt = await generate();
相關文章
相關標籤/搜索