38172


**・エクスポートについて**

xssfworkbookで生成したxlsxファイルを出力しています↓

[code]

    HttpServletResponse.getOutputStreamにXSSFWorkbook.writeを実行し、ブラウザからダウンロード
    
[/code]

xssfworkbookでxlsxを生成する際は、テンプレートとなるxlsxファイル(ファイルには2行分の記載がある)を取得し、そのファイルに対し編集を行い、上記流れで出力します。

**・インポートについて**

生成されたファイルをインポートする際は、Javascriptで上記でエクスポートされたxlsxファイルを読み込みます。  
使用Jqueryは以下になります。  
・Sheet.js(xlsx.full.min.js)  
・shim.js  
・jszip.js

**・今回の問題について**

今回の問題は、エクスポートされたxlsxファイルが一度も編集されていない状態でインポートされる際に、エクスポートのテンプレートとなるxlsxファイル時に記載されていた範囲(2行)までしかインポートされず、xssfworkbookで追記した3行目以降が読み込まれません。

また、エクスポートされたxlsxファイルに対し一度編集を行うと正常に全行が読み込まれます。

原因や解決方法の分かる方がいましたら、ご教授お願い致します。


CC BY-SA 3.0
2017-09-21T05:35:48.780
38087
2017-09-25T08:03:11.600
2017-09-22T00:08:37.430
7626
7626
question
javascript excel apache-poi
xssfworkbookで生成し出力したxlsxを、Javascriptでインポートする際に出力後一度も編集してないと正しくインポートできない


・エクスポートについて  
テンプレートファイルに対し、Apache POIで編集した場合、最終セル位置設定は編集前のままになっています。  
(xlsxファイルプロパティ:dimensionの値)

・インポートについて  
Sheet.js(xlsx.full.min.js)でxlsxファイルを読み込む場合の読み込み範囲は、「0行目0列目のセル～dimensionの値」となっておりますが、  
Sheet.jsでのデータ読み込み時点では上記条件を無視した全データが読み込まれており、その後上記条件でデータが切り取られてしまっています。

\--解決方法として--  
まず、読み込み範囲終了位置に、dimensionの値は使用しません。  
Sheet.jsの読み込みデータには、dimensionの値を無視した全てのセルデータおよびセルの位置データが格納されているので、最終セルの位置データを読み込み範囲終了位置とします。  
→「0行目0列目のセル～最終セルの位置」となる

Sheet.jsソース上では、  
var Jg = function dk()
内の、最後でA.rに格納されている値が最終セル位置になるので、それをl["!ref"]に上書きすることで対応出来ます。


CC BY-SA 3.0
2017-09-25T08:03:11.600
38172
2017-09-25T08:03:11.600
7626
38087
answer