java生成 excel,動態向excel追加資料
阿新 • • 發佈:2020-12-13
public class ExcelFile {
//第一次寫入
public static void createExcel(Map<String, Object>map,OutputStream os) throws WriteException,IOException{
int n = 0;
int m = 0;
//建立工作薄
WritableWorkbook workbook = Workbook.createWorkbook(os);
//建立新的一頁
WritableSheet sheet = workbook.createSheet("First Sheet",0);
//建立要顯示的內容,建立一個單元格,第一個引數為列座標,第二個引數為行座標,第三個引數為內容
for (String key : map.keySet()) {
Label dk = new Label(n,0,key);
sheet.addCell(dk);
n++;
}
for (Object value : map.values()) {
Label dk = new Label(m,1,value.toString());
sheet.addCell(dk);
m++;
}
//把建立的內容寫入到輸出流中,並關閉輸出流
workbook.write();
workbook.close();
os.close();
}
//向excel中追加資料[email protected]:excel所在路徑,list:資料集合.(第2,3,4,5,6.....次寫入
public static void addExcel(String excelPath,List< Object> list ) throws IOException{
FileInputStream fs = new FileInputStream(excelPath);//獲取excel
POIFSFileSystem ps = new POIFSFileSystem(fs);//獲取excel資訊
HSSFWorkbook wb = new HSSFWorkbook(ps);
HSSFSheet sheet = wb.getSheetAt(0);//獲取工作表
HSSFRow row = sheet.getRow(0);//獲取第一行(即:欄位列頭,便於賦值)
System.out.println(sheet.getLastRowNum()+"空"+row.getLastCellNum());//分別得到最後一行行號,和一條記錄的最後一個單元格
FileOutputStream out = new FileOutputStream(excelPath);//向excel中新增資料
row = sheet.createRow(sheet.getLastRowNum()+1);//在現有行號後追加資料
for (int i = 0; i < list.size(); i++) {
String str = String.valueOf(list.get(i));
row.createCell(i).setCellValue(str);//設定單元格的資料
}
out.flush();
wb.write(out);
wb.close();
}
)
}