在Excel中测试当动态增加记录时,相应图表也发生变化
最近,有一个需求,
就是有不同的Excel模板,而且可以在其中插入图片,并且图表会随着插入数据的变化而变化.
?
以下是我实现此方案的一个思路,大家可以在此基础上进行修改.
?
// 测试当动态增加记录时,相应图表也发生变化
// 这个例子程序挺实用的,大家可以在这个基础上进行修改.
// aa00aa00
package com.together.nms.dt.data.model.hibernate.test;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.hssf.usermodel.*;
//测试当动态增加记录时,相应图表也发生变化
public class testchart {
?/**
? * 插入行
? *
? * @param wb
? *??????????? 工作簿
? * @param sheet
? *??????????? sheet页
? * @param starRow
? *??????????? 开始行,其下面插入
? * @param rows
? *??????????? 插入的行数
? */
?public static void insertRow(HSSFWorkbook wb, HSSFSheet sheet, int starRow,
???int rows) {
??sheet.shiftRows(starRow + 1, sheet.getLastRowNum(), rows);
??starRow = starRow - 1;
??for (int i = 0; i < rows; i++) {
???HSSFRow sourceRow = null;
???HSSFRow targetRow = null;
???HSSFCell sourceCell = null;
???HSSFCell targetCell = null;
???starRow = starRow + 1;
???sourceRow = sheet.getRow(starRow);
???targetRow = sheet.createRow(starRow + 1);
???targetRow.setHeight(sourceRow.getHeight());
???for (int m = sourceRow.getFirstCellNum(); m < sourceRow
?????.getPhysicalNumberOfCells(); m++) {
????sourceCell = sourceRow.getCell(m);
????targetCell = targetRow.createCell(m);
????// targetCell.setEncoding(sourceCell.getEncoding());
????targetCell.setCellStyle(sourceCell.getCellStyle());
????targetCell.setCellType(sourceCell.getCellType());
???}
??}
?}
?/**
? * @param args
? */
?public static void main(String[] args) {
??// TODO Auto-generated method stub
??try {
???POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(
?????"d:\\Book1.xls"));
???HSSFWorkbook wb = new HSSFWorkbook(fs);
???HSSFSheet sheet = wb.getSheetAt(0);
???insertRow(wb, sheet, 3, 20);// 从第四行插入(excel中在第4行后插入),插入五行
???for (int i = 4; i < 23; i++) {
????HSSFRow row0 = sheet.getRow(i);
????for (int j = 0; j < 2; j++) {
?????row0.getCell(j).setCellType(HSSFCell.CELL_TYPE_STRING);
?????row0.getCell(j).setCellValue(i + j);
????}
???}
???FileOutputStream fileOut = new FileOutputStream("d:\\xxxx.xls");
???wb.write(fileOut);
???fileOut.close();
??} catch (Exception e) {
???e.printStackTrace();
??}
?}
}
?
例子使用的jar为poi.3.7
?
最后,把例子代码全部上传,并且带有jar包,也方便大家进行测试,呵呵!!