java 向已存在的excel中追加数据 .
?
import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; /*** 向d://test.xls中追加內容,(前提是:必須已經存在字段列頭,可以沒有內容)* * 這個是一個案例,根據案例再發揮* @author leiwei 2012-02-09**/ public class TestExceL{ public static void main(String[] args) throws Exception { FileInputStream fs=new FileInputStream("d://test.xls"); //獲取d://test.xlsPOIFSFileSystem ps=new POIFSFileSystem(fs); //使用POI提供的方法得到excel的信息HSSFWorkbook wb=new HSSFWorkbook(ps); HSSFSheet sheet=wb.getSheetAt(0); //獲取到工作表,因為一個excel可能有多個工作表HSSFRow row=sheet.getRow(0); //獲取第一行(excel中的行默認從0開始,所以這就是為什么,一個excel必須有字段列頭),即,字段列頭,便于賦值System.out.println(sheet.getLastRowNum()+" "+row.getLastCellNum()); //分別得到最后一行的行號,和一條記錄的最后一個單元格FileOutputStream out=new FileOutputStream("d://test.xls"); //向d://test.xls中寫數據row=sheet.createRow((short)(sheet.getLastRowNum()+1)); //在現有行號后追加數據row.createCell(0).setCellValue("leilei"); //設置第一個(從0開始)單元格的數據row.createCell(1).setCellValue(24); //設置第二個(從0開始)單元格的數據out.flush();wb.write(out); out.close(); System.out.println(row.getPhysicalNumberOfCells()+" "+row.getLastCellNum()); } }刪除指定行
import java.io.FileInputStream; import java.io.FileOutputStream;import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook;public class DelExcel {public static void main(String[] args) {/*** @param args*/try{FileInputStream is = new FileInputStream("d://test.xls");HSSFWorkbook workbook = new HSSFWorkbook(is);HSSFSheet sheet = workbook.getSheetAt(0);sheet.shiftRows(1, 1, 1); //刪除第4行FileOutputStream os = new FileOutputStream("d://test.xls");workbook.write(os);is.close();os.close();} catch(Exception e) { e.printStackTrace();}} }
?
刪除行
一般情況下,刪除行時會面臨兩種情況:刪除行內容但保留行位置、整行刪除(刪除后下方單元格上移)。對應的刪除方法分別是:removeRow()及shiftRow(startRow,endRow,shiftCount)
示例代碼:
以下代碼是使用removeRow()方法刪除行內容但保留行位置。代碼從d:\test.xls中的第一個sheet中刪除了第一行。需要注意的是,改變是需要在workbook.write之后才生效的。
importorg.apache.poi.hssf.usermodel.*;
importjava.io.*;
public?classtestTools{
?????public?static?voidmain(String[] args){
????????try{
????????????FileInputStream is =?newFileInputStream("d://test.xls");
????????????HSSFWorkbook workbook =?newHSSFWorkbook(is);
????????????HSSFSheet sheet = workbook.getSheetAt(0);
????????????HSSFRow row = sheet.getRow(0);
????????????sheet.removeRow(row);
????????????FileOutputStream os =?newFileOutputStream("d://test.xls");
????????????workbook.write(os);
????????????is.close();
????????????os.close();
????????}?catch(Exception e) {?
????????????e.printStackTrace();
????????}
?????}
}
以下代碼是使用shiftRow實現刪除整行的效果。同樣,也是需要在進行workbook.write后才會生效。
importorg.apache.poi.hssf.usermodel.*;
importjava.io.*;
public?classtestTools{
?????public?static?voidmain(String[] args){
????????try{
????????????FileInputStream is =?newFileInputStream("d://test.xls");
????????????HSSFWorkbook workbook =?newHSSFWorkbook(is);
????????????HSSFSheet sheet = workbook.getSheetAt(0);
????????????sheet.shiftRows(1, 4, -1);
????????????FileOutputStream os =?newFileOutputStream("d://test.xls");
????????????workbook.write(os);
????????????is.close();
????????????os.close();
????????}?catch(Exception e) {?
????????????e.printStackTrace();
????????}
?????}
}
?
其中:
sheet.shiftRows(startRow,endRow,shiftCount)參數說明:
startRow?移動的開始行號,從0開始計算, 如果想要刪除Excel中的第8行(rownum=7),那么starRow設定為7,即設定為你想刪除的那行
endRow?移動的結束行號,從0開始計算。通過startRow和endRow選定移動的范圍。可以用sheet.getLastRowNum 來取得sheet的結尾行號
shiftCount 移動多少行。正數是往下移動的行數,負數是往上移動的行數
(經過vb.net 2008 + NPOI 1.3的測試,負數只能是-1,如果需要往上移動多行,那么只有循環了)
?
總結
以上是生活随笔為你收集整理的java 向已存在的excel中追加数据 .的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手动修改Win7开机欢迎界面背景图片
- 下一篇: 解读STM32标准库的程序架构 - 以G