• POI在指定excel插入行java


    我想在第三行插入数据库的数据,这里假如数据库有10条,并且继承第二行的格式

     数据库数据

    {"clark",25},我写个json对象,10条这个

    造数据代码

    1. JSONArray jsonArray = new JSONArray();
    2. for (int i = 0; i < 10; i++) {
    3. JSONObject jsonObject = new JSONObject();
    4. jsonObject.put("name","clark");
    5. jsonObject.put("age",i+10);
    6. jsonArray.add(jsonObject);
    7. }

    poi依赖

    xls,xlsx,io流,fastJson

    
    
        org.apache.poi
        poi
        5.2.2
    
    
    
        org.apache.poi
        poi-ooxml
        5.2.2
    

           
                commons-io
                commons-io
                1.4
           

    
        com.alibaba
        fastjson
        1.2.83
    

    模板文件(测试.xlsx)

    代码逻辑,读模板,插行,同时继承第二行样式,填数据

    整体,可直接复制

    1. public static void main(String[] args) {
    2. JSONArray jsonArray = new JSONArray();
    3. for (int i = 0; i < 10; i++) {
    4. JSONObject jsonObject = new JSONObject();
    5. jsonObject.put("name","clark");
    6. jsonObject.put("age",i+10);
    7. jsonArray.add(jsonObject);
    8. }
    9. //读取模板
    10. try {
    11. FileInputStream inputStream =new FileInputStream("C:\\Users\\shiao\\Desktop\\测试.xlsx");
    12. XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
    13. XSSFSheet sheet = workbook.getSheetAt(0);//获取表中的第一个sheet
    14. XSSFRow row = sheet.getRow(1);
    15. XSSFCell cell = row.getCell(0);
    16. //姓名的样式
    17. XSSFCellStyle nameStyle = cell.getCellStyle();
    18. System.out.println(cell.getStringCellValue());//字符串用string
    19. //年龄的样式
    20. cell= row.getCell(1);
    21. XSSFCellStyle ageStyle = cell.getCellStyle();
    22. System.out.println(cell.getRawValue());//数字用rawValue
    23. //获取后进行遍历数据库
    24. for (int i = 0; i < jsonArray.size(); i++) {
    25. JSONObject jsonObject = jsonArray.getJSONObject(i);
    26. //新增行
    27. XSSFRow rowNew = sheet.createRow(3+i);//参数代表从第几行新增
    28. //给新增行增加样式
    29. XSSFCell cellName = rowNew.createCell(0);//第1列,代表name的位置
    30. XSSFCell cellAge = rowNew.createCell(1);//第2列,代表age的位置
    31. cellName.setCellStyle(nameStyle);
    32. cellAge.setCellStyle(ageStyle);
    33. cellName.setCellValue(jsonObject.getString("name"));
    34. cellAge.setCellValue(jsonObject.getInteger("age"));
    35. }
    36. workbook.write(new FileOutputStream("C:\\Users\\shiao\\Desktop\\测试结果.xlsx"));
    37. } catch (FileNotFoundException e) {
    38. e.printStackTrace();
    39. } catch (IOException e) {
    40. e.printStackTrace();
    41. }
    42. }

    结果

    但是很明显看到,之前的第五行被覆盖了,如果不让他覆盖怎么办,那就让插入位置的,到最后的其他整体下移动一行

    //先全部下移动1行,这样才能保证不覆盖
    // (参数1是开始,参数2是结束,参数3是正数代表,开始-结束范围内的单元格下移动1行)
    sheet.shiftRows(3+i,sheet.getLastRowNum(),1);

     

    结果

     

  • 相关阅读:
    C 基础语法2 —— 数组
    掌握这个技巧,你也能成为资产管理高手!
    FlinkSQL开发经验分享
    十五管还原炉舟皿自动卸料单元
    协程是如何实现线程切换的
    这种动态规划你见过吗——状态机动态规划之股票问题(下)
    MyBatis 动态 SQL 实践教程
    物联网python开发实践
    ccf 相邻数对解题思路
    git的简单使用
  • 原文地址:https://blog.csdn.net/qq_38403590/article/details/128190752