利用Apache POI在已有的Excel文件中插入一行新的数据

2024-05-25 23:38

本文主要是介绍利用Apache POI在已有的Excel文件中插入一行新的数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在POI的第一节入门中,我们提供了两个简单的例子,一个是如何用Apache POI新建一个工作薄,另外一个例子是,如果用Apache POI新建一个工作表。那么在这个章节里面,我将会给大家演示一下,如何用Apache POI在已有的Excel文件中插入一行新的数据。具体代码,请看下面的例子。

[java] view plain copy
print ?
  1. import java.io.File;  
  2. import java.io.FileInputStream;  
  3. import java.io.FileNotFoundException;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6.   
  7. import org.apache.poi.xssf.usermodel.XSSFCell;  
  8. import org.apache.poi.xssf.usermodel.XSSFRow;  
  9. import org.apache.poi.xssf.usermodel.XSSFSheet;  
  10. import org.apache.poi.xssf.usermodel.XSSFWorkbook;  
  11.   
  12. public class CreatRowTest {  
  13.     //当前文件已经存在  
  14.     private String excelPath = “D:\\exceltest\\comments.xlsx”;  
  15.     //从第几行插入进去  
  16.     private int insertStartPointer = 3;  
  17.     //在当前工作薄的那个工作表单中插入这行数据   
  18.     private String sheetName = “Sheet1”;  
  19.   
  20.     /** 
  21.      * 总的入口方法 
  22.      */  
  23.     public static void main(String[] args) {  
  24.         CreatRowTest crt = new CreatRowTest();  
  25.         crt.insertRows();  
  26.     }  
  27.     /** 
  28.      * 在已有的Excel文件中插入一行新的数据的入口方法 
  29.      */  
  30.     public void insertRows() {  
  31.         XSSFWorkbook wb = returnWorkBookGivenFileHandle();  
  32.         XSSFSheet sheet1 = wb.getSheet(sheetName);  
  33.         XSSFRow row = createRow(sheet1, insertStartPointer);  
  34.         createCell(row);  
  35.         saveExcel(wb);  
  36.   
  37.     }  
  38.     /** 
  39.      * 保存工作薄 
  40.      * @param wb 
  41.      */  
  42.     private void saveExcel(XSSFWorkbook wb) {  
  43.         FileOutputStream fileOut;  
  44.         try {  
  45.             fileOut = new FileOutputStream(excelPath);  
  46.             wb.write(fileOut);  
  47.             fileOut.close();  
  48.         } catch (FileNotFoundException e) {  
  49.             e.printStackTrace();  
  50.         } catch (IOException e) {  
  51.             e.printStackTrace();  
  52.         }  
  53.   
  54.     }  
  55.     /** 
  56.      * 创建要出入的行中单元格 
  57.      * @param row 
  58.      * @return 
  59.      */  
  60.     private XSSFCell createCell(XSSFRow row) {  
  61.         XSSFCell cell = row.createCell((short0);  
  62.         cell.setCellValue(999999);  
  63.         row.createCell(1).setCellValue(1.2);  
  64.         row.createCell(2).setCellValue(“This is a string cell”);  
  65.         return cell;  
  66.     }  
  67.    /** 
  68.     * 得到一个已有的工作薄的POI对象 
  69.     * @return 
  70.     */  
  71.     private XSSFWorkbook returnWorkBookGivenFileHandle() {  
  72.         XSSFWorkbook wb = null;  
  73.         FileInputStream fis = null;  
  74.         File f = new File(excelPath);  
  75.         try {  
  76.             if (f != null) {  
  77.                 fis = new FileInputStream(f);  
  78.                 wb = new XSSFWorkbook(fis);  
  79.             }  
  80.         } catch (Exception e) {  
  81.             return null;  
  82.         } finally {  
  83.             if (fis != null) {  
  84.                 try {  
  85.                     fis.close();  
  86.                 } catch (IOException e) {  
  87.                     e.printStackTrace();  
  88.                 }  
  89.             }  
  90.         }  
  91.         return wb;  
  92.     }  
  93.    /** 
  94.     * 找到需要插入的行数,并新建一个POI的row对象 
  95.     * @param sheet 
  96.     * @param rowIndex 
  97.     * @return 
  98.     */  
  99.     private XSSFRow createRow(XSSFSheet sheet, Integer rowIndex) {  
  100.         XSSFRow row = null;  
  101.         if (sheet.getRow(rowIndex) != null) {  
  102.             int lastRowNo = sheet.getLastRowNum();  
  103.             sheet.shiftRows(rowIndex, lastRowNo, 1);  
  104.         }  
  105.         row = sheet.createRow(rowIndex);  
  106.         return row;  
  107.     }  
  108.   
  109.       
  110.   
  111. }  
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class CreatRowTest {//当前文件已经存在private String excelPath = "D:\\exceltest\\comments.xlsx";//从第几行插入进去private int insertStartPointer = 3;//在当前工作薄的那个工作表单中插入这行数据 private String sheetName = "Sheet1";/*** 总的入口方法*/public static void main(String[] args) {CreatRowTest crt = new CreatRowTest();crt.insertRows();}/*** 在已有的Excel文件中插入一行新的数据的入口方法*/public void insertRows() {XSSFWorkbook wb = returnWorkBookGivenFileHandle();XSSFSheet sheet1 = wb.getSheet(sheetName);XSSFRow row = createRow(sheet1, insertStartPointer);createCell(row);saveExcel(wb);}/*** 保存工作薄* @param wb*/private void saveExcel(XSSFWorkbook wb) {FileOutputStream fileOut;try {fileOut = new FileOutputStream(excelPath);wb.write(fileOut);fileOut.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/*** 创建要出入的行中单元格* @param row* @return*/private XSSFCell createCell(XSSFRow row) {XSSFCell cell = row.createCell((short) 0);cell.setCellValue(999999);row.createCell(1).setCellValue(1.2);row.createCell(2).setCellValue("This is a string cell");return cell;}/*** 得到一个已有的工作薄的POI对象* @return*/private XSSFWorkbook returnWorkBookGivenFileHandle() {XSSFWorkbook wb = null;FileInputStream fis = null;File f = new File(excelPath);try {if (f != null) {fis = new FileInputStream(f);wb = new XSSFWorkbook(fis);}} catch (Exception e) {return null;} finally {if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}return wb;}/*** 找到需要插入的行数,并新建一个POI的row对象* @param sheet* @param rowIndex* @return*/private XSSFRow createRow(XSSFSheet sheet, Integer rowIndex) {XSSFRow row = null;if (sheet.getRow(rowIndex) != null) {int lastRowNo = sheet.getLastRowNum();sheet.shiftRows(rowIndex, lastRowNo, 1);}row = sheet.createRow(rowIndex);return row;}}


                </div>

这篇关于利用Apache POI在已有的Excel文件中插入一行新的数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1002940

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

C#利用Free Spire.XLS for .NET复制Excel工作表

《C#利用FreeSpire.XLSfor.NET复制Excel工作表》在日常的.NET开发中,我们经常需要操作Excel文件,本文将详细介绍C#如何使用FreeSpire.XLSfor.NET... 目录1. 环境准备2. 核心功能3. android示例代码3.1 在同一工作簿内复制工作表3.2 在不同

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

java读取excel文件为base64实现方式

《java读取excel文件为base64实现方式》文章介绍使用ApachePOI和EasyExcel处理Excel文件并转换为Base64的方法,强调EasyExcel适合大文件且内存占用低,需注意... 目录使用 Apache POI 读取 Excel 并转换为 Base64使用 EasyExcel 处

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

Python Excel 通用筛选函数的实现

《PythonExcel通用筛选函数的实现》本文主要介绍了PythonExcel通用筛选函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录案例目的示例数据假定数据来源是字典优化:通用CSV数据处理函数使用说明使用示例注意事项案例目的第一

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池