搜尋

首頁  >  問答  >  主體

java如何复制几百万行的Excel数据?自动拆成多个表?

数据表如图1,2,3行所示,把第2行复制3次(d次),第3行复制4次(d次)
然后只粘贴abc列的数据(6,7,8有d行相同的数据,但是不包括d列的数据)
根据上面的数据,把复制之后的数据写入新的表,用java如何操作呀?
有40多个表,每个表中都有200多条数据,数据量很大,所有要用程序写,
还有一个问题就是一个表中复制之后的数据量可能超过Excel20007的最大行数(1048576行),如何自动拆成多个表呢?比如前50个数据在一个表,51-100在第二个表,101-200在第三个表......

注意!!!
复制之后的数据是写到Excel表中,并不是数据库中,java初学。。不太会

PHP中文网PHP中文网2828 天前422

全部回覆(2)我來回復

  • ringa_lee

    ringa_lee2017-04-18 09:29:23

    好吧,我先理順一下問題,方便閱讀……
    excel表總共有a,b,c,d四列,其中a,b,c列是存儲的數據,d列是表示該行數據要複製的次數,第一行是表頭。

    還有,你說的表是資料庫的表還是excel?


    更新

    可以看一下Apache POI這個工具庫,專門操作office文件用的。

    如果只是一次性使用的話,那就不用考慮那麼多了,用POI讀取excel文檔到內存,然後在程式裡實現資料複製,再把複製後的資料分區後寫入excel表。

    如果你會一點js的話,我建議你用node-xlsx(依賴nodejs)去實現這個需求,比寫java快。程式碼行數應該在50行以內。

    更新2

    我只能寫一段nodejs程式碼給你,因為java的實在不想寫…

    'use strict'
    
    const fs = require('fs');
    const xlsx = require('node-xlsx');
    const sheet1 = xlsx.parse(process.argv[2])[0].data;
    const savedFile = process.argv[3];
    
    let result = [];
    for(let i = 1, length = sheet1.length;i < length;i++) {
      let row = sheet1[i];
      let loopTimes = row.splice(3);// 将d列数据取出并移除
      for(let j = 0;j < loopTimes;j++) {
        result.push(row);
      }
    }
    
    let file = xlsx.build([{name:'sheet1', data:result}]);
    
    fs.writeFileSync(savedFile, file, 'binary');

    使用方法

    1. 安裝nodejs;

    2. 打開cmd窗口,運行npm --registry https://registry.npm.taobao.org install -g nrm;

    3. 運行nrm use taobao;

    4. 將以上程式碼儲存為process.js,並將該檔案和你的excel來源檔案放在同一目錄下;

    5. 在cmd視窗裡進入該目錄,運行npm i node-xlsx;

    6. 運行node process.js source.xlsx dest.xlsx(其中第2個參數是你的excel原始檔名稱,第三個參數是你要保存的excel檔名稱);

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:29:23

    工具:Java POI 操作Excel ,每行每列的掃描,按照你的業務規則,既然一個sheet放不下,就放多個存放,每行數據複製後就放在Excel 的新建的sheet 中了,這樣就不會溢出了

    回覆
    0
  • 取消回覆