2017-03-23 28 views
1

ランダムな列を含むExcel(xlsx)ファイルがあります。これらの列の中には、いくつかのセルの合計にマップされた数式を持つものがあります。私は、次の3つの列持って私の場合はNode - exceljs:ファイル内のファイル分割式に書き込む

=J8+F9-H9 

:例えば

F: number 
H: number 
J: =sum of previous row's F and H cell's values. 

を私は、外部データを取得し、このブックのセルによって彼らにセルを保管することを目指しています。このため私はノードモジュールを使用していますexceljs.

これまでのコードですが、これまでのところ私は値をharcodingしています(後で別のファイルから取得します)。

var workbook = new Excel.Workbook(); 
var filename = 'Bank Synoptic Journal.xlsx' 
workbook 
.xlsx 
.readFile(filename) 
.then(function() { 
    var worksheet = workbook.getWorksheet('Bank Synoptic'); 

    var row = null; 
    row = worksheet.getRow(8); 
    row.getCell('J').value = Math.random(); 
    row.commit(); 

    for(var i=9; i<=305;i++) { //row 
     row = worksheet.getRow(i); 
     row.getCell('F').value = Math.random(); 
     row.getCell('H').value = Math.random(); 
     row.commit(); 
    } 
}) 
.then(function() { 
    return workbook.xlsx.writeFile(filename + '_modified.xlsx'); 
}) 
.then(function() { 
    console.log('Done!'); 
}); 

出力を新しいExcelファイルに出力します。私が直面している問題は、数式を含むセル「J」のためです。これらの細胞は、無consitencyで破壊されています

  • いくつかの細胞は、数式を維持し、
  • その他の計算はこれ以上の式も行われた計算を持っていないん
  • 再計算が自動的に行われていません(代わりに式の「0」を持っています)この射出機構を使用して

(スナップショット)

snapshot

with formula

no formula

私は、このエラーにつながっていること見つからないか、間違っているのですか?

+0

'F'と' H'列にランダム値を設定する 'for'ループでは、前の行/列' J'式の式を明示的に設定しません。 9〜305行目にロードしたワークブックに式があらかじめ設定されていることを期待していましたか?最初に確認してください。 –

+0

@RobinMackenzie私がすでに行を埋めているワークブックには数式が設定されています。それはうまくいかないのですか? – shadesco

+0

トラブルシューティングからその可能性を排除すると便利だと思った... –

答えて

0

いくつかの試行錯誤の末、私はApache POIに移動し、Javaを使用してスクリプトを構築しました。

私は私のプロジェクトでは、以下のJARをダウンロードし、含ま:

jars-used

それは、行/列を操作し、そのまま数式を保持します。修正されたExcelファイルを開くと、リフレッシュ(Windowsの場合:Ctrl + Alt + F9)するだけで、再計算されます。

+0

実行時にExcelでセルを保護したい。これをnode.js @Shadescoで行うことは可能ですか? – Vinoth

関連する問題