java如何从excel模板读取数据,然后再动态写入数据输出到另外一个excel文件呢?请高手指教,最好有代码例子,谢谢啦:)

解决方案 »

  1.   

    package jxml;import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;import jxl.Cell;
    import jxl.Sheet;
    import jxl.Workbook;
    import jxl.read.biff.BiffException;
    import jxl.write.Label;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;
    import jxl.write.WriteException;
    import jxl.write.biff.RowsExceededException;import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;public class Myjxml { /**
     * @param args
     */
    static SAXBuilder sab = new SAXBuilder(false);
    public static void main(String[] args) throws JDOMException, IOException {
    // TODO Auto-generated method stub
    Document doc=sab.build("D:\\uaapConsole\\javalx\\src\\jxml\\testxml.xml");
      Element root=doc.getRootElement();//获得根节点
      //Document root1=doc.getDocument();
      //System.out.println(root.getChild("usertest"));
      //System.out.println(root.getValue());//输出子节点的值
      //System.out.println(root.getChildren().isEmpty());//是否为空
      List alist=(List) root.getChildren("usertest");
      //NodeList students = root.get
      String xls="D:\\uaapConsole\\javalx\\src\\jxml\\";
      String xls1=null;
      for(int i=0;i<alist.size();i++)
      {  //System.out.println(i);
      Element item=(Element)alist.get(i);////取得节点实例
      //(Element)booklist.get(i)
      String name=item.getChild("name").getText();

      String name1=item.getChild("pass").getText();
      boolean a=item.getChildren().isEmpty();
      System.out.println(a);

      xls1=xls+name;
      }
     
      System.out.println(xls1+"文件所在的路径!!");
      
      File f=new File(xls1);
      if(f.exists())
      { System.out.println("文件已经存在!!");}
      else{
      f.createNewFile();
      }
      String s=f.getPath();
      System.out.println(s);
      System.out.println(f.getParentFile());//所在位置
      
      
      jxl.Workbook rwb = null;

         try {
          InputStream is = new FileInputStream(xls1);
        System.out.println(is);
         // Sheet rs = rwb.getSheet(0);
    //rwb = Workbook.getWorkbook(is);
     rwb = Workbook.getWorkbook(is);
    Sheet sh=rwb.getSheet(0);

    int a=sh.getColumns();
    int b=sh.getRows();
    System.out.println(a+"--"+b);

    for (int i=0;i<a;i++)
    {
    for(int c=0;c<b;c++)
    {
    Cell cell=sh.getCell(i, c);
    System.out.println(cell.getContents());
    }
    }

    String xls2="D:\\uaapConsole\\javalx\\src\\jxml\\xls2.xls";

    File ff=new File(xls2);
    if(!ff.exists())
    {ff.createNewFile();}

    jxl.write.WritableWorkbook workbook=null;
    try {  
    workbook = Workbook.createWorkbook(new File(xls2));
         } catch (IOException e) {    
                e.printStackTrace();    
            }  

    jxl.write.WritableSheet ws=null;
    if(!(workbook==null)){
    ws= workbook.createSheet("sheet1", 0);  
    }
     for(int i=0;i<=15;i++){
     for(int c=0;c<=15;c++)
     {

     Label labelC = new Label(i, c, "这是第"+(i+1)+"行,第"+(c+1)+"列");
     try { 
     System.out.print(c);
                         //将生成的单元格添加到工作表中    
                         ws.addCell(labelC);    
                     } catch (RowsExceededException e) {    
                         e.printStackTrace();    
                     } catch (WriteException e) {    
                         e.printStackTrace();    
                     }
     }
     }
      try {    
                    //从内存中写入文件中    
     workbook.write();
      //Workbook.write();    
                    //关闭资源,释放内存    
     workbook.close(); 
                } catch (IOException e) {    
                    e.printStackTrace();    
                }



    // WritableSheet ws = wwb.createSheet("sheet1", 0); 
    } catch (BiffException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
      
      
      
    }}
      

  2.   

    我也希望用poi,哪些大侠有poi的例子啦?网上搜的,都没有读模板啊,而且输出文件也都是原文件的。
      

  3.   

    import java.io.*; 
    import jxl.*; 
    import jxl.write.*; public class UpdateXLS 

    public static void main(String args[]) 

    try 

    //Excel获得文件 
    Workbook wb=Workbook.getWorkbook(new File(“模板.xls”)); //打开一个文件的副本,并且指定数据写回到原文件 
    WritableWorkbook book= 
    Workbook.createWorkbook(new File(“输出.xls”),wb); //添加一个工作表 
    WritableSheet sheet=book.createSheet(“第二页”,1); sheet.addCell(new Label(0,0,”第二页的测试数据”)); book.write(); 
    book.close(); 
    }catch(Exception e) 

    System.out.println(e); 


    } 昨天看到一个模板的jxl,就是上面这种形式的,但网址我实在是忘了
      

  4.   

    import java.io.FileInputStream;
    import java.io.FileOutputStream;import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    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.hssf.util.HSSFColor;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;public class CreatExl {


    //创建Excel
    public static String outFile = "D:/bb2.xls";

    public static void main(String[] args){
    try{
    POIFSFileSystem fs =new POIFSFileSystem(new FileInputStream("D:/bb.xls")); 
    HSSFWorkbook workbook =  new HSSFWorkbook(fs);
    HSSFSheet sheet = workbook.getSheetAt(0);
    for(short i=3;i<13;i++){
    HSSFRow row = sheet.createRow(i);  //在索引0的位置开始创建行(最顶端的行)
    for(short j=0;j<5;j++){
    HSSFCell cell = row.createCell(j); //在索引0的位置开始创建单元格(左上端)
    cell.setCellType(HSSFCell.CELL_TYPE_STRING); //设置单元格的类型为字符串;
    cell.setCellValue(j); //在单元格输入一些内容;
    }
    }
    FileOutputStream out = new FileOutputStream(outFile); //创建文件输出流
    workbook.write(out);
    out.flush();
    out.close();
    System.out.println("文件生成...");

    }catch(Exception e){
    System.out.println("已运行 xlCreate():"+e);
    }
    }}
    看下这个,假如D:/bb.xls里面原来有固定格式的表头占3行,数据20行。我现在要取D:/bb.xls的表头3行,然后再动态写入10行数据。生成一张3行表头,10行数据的新报到到D:/bb2.xls。但是上面的代码虽然更新了前10行的数据,但是原来报表模板的后10行数据还在那。这个怎么处理?难道是要先把D:/bb.xls中除了表头之外的的行列都清空,然后再往里面写数据?请高手指教!!
      

  5.   

    我搞错了,这个代码已经实现了,
    import java.io.FileInputStream; 
    import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFCell; 
    import org.apache.poi.hssf.usermodel.HSSFCellStyle; 
    import org.apache.poi.hssf.usermodel.HSSFFont; 
    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.hssf.util.HSSFColor; 
    import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class CreatExl { 
    //创建Excel 
    public static String outFile = "D:/bb2.xls"; public static void main(String[] args){ 
    try{ 
    POIFSFileSystem fs =new POIFSFileSystem(new FileInputStream("D:/bb.xls")); 
    HSSFWorkbook workbook =  new HSSFWorkbook(fs); 
    HSSFSheet sheet = workbook.getSheetAt(0); 
    for(short i=3;i <13;i++){ 
    HSSFRow row = sheet.createRow(i);  //在索引0的位置开始创建行(最顶端的行) 
    for(short j=0;j <5;j++){ 
    HSSFCell cell = row.createCell(j); //在索引0的位置开始创建单元格(左上端) 
    cell.setCellType(HSSFCell.CELL_TYPE_STRING); //设置单元格的类型为字符串; 
    cell.setCellValue(j); //在单元格输入一些内容; 


    FileOutputStream out = new FileOutputStream(outFile); //创建文件输出流 
    workbook.write(out); 
    out.flush(); 
    out.close(); 
    System.out.println("文件生成..."); }catch(Exception e){ 
    System.out.println("已运行 xlCreate():"+e); 

    } } 
    呵呵,谢谢大家的支持:)