程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Windows中應用Java生成Excel文件並拔出圖片的辦法

Windows中應用Java生成Excel文件並拔出圖片的辦法

編輯:關於JAVA

Windows中應用Java生成Excel文件並拔出圖片的辦法。本站提示廣大學習愛好者:(Windows中應用Java生成Excel文件並拔出圖片的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是Windows中應用Java生成Excel文件並拔出圖片的辦法正文


生成簡略的Excel文件
 在實際的辦公中,我們經常會有如許一個請求:請求把報表直接用excel翻開。在練習中有如許一個需求。依據所選擇的資本查詢用戶所供給附件的全體信息並生成excel供下載。然則在查詢的時刻我們須要來檢測用戶所供給的附件外面的信息能否有毛病(身份證)。有毛病的生成毛病信息excel。
     Apache的POI項目,是今朝比擬成熟的HSSF接口,用來處置Excel對象。其實POI不只僅只能處置excel,它還可以處置word、PowerPoint、Visio、乃至Outlook。
     這裡我先引見應用POI若何生成excel。
     起首在生成Excel前,我們須要懂得一下Excel文件的組織情勢。在POI中,是如許懂得的:一個Excel文件對應一個workbook,一個workerbook是有若干個sheet構成的。一個sheet有多個row,一個row普通存在多個cell。
     關於下面的四個名詞我們可以鄙人圖懂得

 關於生成Excel,POI供給了以下幾個根本對象:

  •      HSSFWorkbook:excel 的文檔對象
  •      HSSFSheet:excel 的表單
  •      HSSFRow :excel 的行
  •      HSSFCell:excel 的格子單位

     從下面的圖片和Excel的組織構造,我們便可以明確創立Excel的步調。

        1、生成文檔對象HSSHWorkbook。
        2、經由過程HSSFWorkbook生成表單HSSFSheet。
        3、經由過程HSSFSheet生成行HSSFRow
        4、經由過程HSSFRow生成單位格HSSFCell。
     上面是展現代碼:
     身份證毛病Bean(ErrorCondition.java)

public class ErrorCondition { 
  private String name; // 姓名 
  private String idCard; // 身份證 
  private String status; // 毛病狀況 
  private String message; // 毛病信息 
 
  ErrorCondition(String name,String idCard,String status,String message){ 
    this.name = name; 
    this.idCard = idCard; 
    this.status = status; 
    this.message = message; 
  } 
   
  public String getName() { 
    return name; 
  } 
 
  public void setName(String name) { 
    this.name = name; 
  } 
 
  public String getIdCard() { 
    return idCard; 
  } 
 
  public void setIdCard(String idCard) { 
    this.idCard = idCard; 
  } 
 
  public String getStatus() { 
    return status; 
  } 
 
  public void setStatus(String status) { 
    this.status = status; 
  } 
 
  public String getMessage() { 
    return message; 
  } 
 
  public void setMessage(String message) { 
    this.message = message; 
  } 
 
} 

     處置類(ExportErrorExcel.java)

public class ExportErrorExcel { 
  public static void main(String[] args) { 
    //第一步創立workbook 
    HSSFWorkbook wb = new HSSFWorkbook(); 
     
    //第二步創立sheet 
    HSSFSheet sheet = wb.createSheet("身份證毛病信息"); 
     
    //第三步創立行row:添加表頭0行 
    HSSFRow row = sheet.createRow(0); 
    HSSFCellStyle style = wb.createCellStyle();   
    style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //居中 
     
     
    //第四步創立單位格 
    HSSFCell cell = row.createCell(0);     //第一個單位格 
    cell.setCellValue("姓名");         //設定值 
    cell.setCellStyle(style);          //內容居中 
     
    cell = row.createCell(1);          //第二個單位格   
    cell.setCellValue("身份證"); 
    cell.setCellStyle(style); 
     
    cell = row.createCell(2);          //第三個單位格  
    cell.setCellValue("毛病狀況"); 
    cell.setCellStyle(style); 
     
    cell = row.createCell(3);          //第四個單位格  
    cell.setCellValue("毛病信息"); 
    cell.setCellStyle(style); 
     
    //第五步拔出數據 
    List<ErrorCondition> list = ExportErrorExcel.getErrorCondition(); 
    for (int i = 0; i < list.size(); i++) { 
      ErrorCondition errorCondition = list.get(i); 
      //創立行 
      row = sheet.createRow(i+1); 
      //創立單位格而且添加數據 
      row.createCell(0).setCellValue(errorCondition.getName()); 
      row.createCell(1).setCellValue(errorCondition.getIdCard()); 
      row.createCell(2).setCellValue(errorCondition.getStatus()); 
      row.createCell(3).setCellValue(errorCondition.getMessage()); 
    } 
     
    //第六步將生成excel文件保留到指定途徑下 
    try { 
      FileOutputStream fout = new FileOutputStream("D:\\errorCondition.xls"); 
      wb.write(fout); 
      fout.close(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
     
    System.out.println("Excel文件生成勝利..."); 
  } 
   
  public static List<ErrorCondition> getErrorCondition(){ 
    List<ErrorCondition> list = new ArrayList<ErrorCondition>(); 
     
    ErrorCondition r1 = new ErrorCondition("張三", "4306821989021611", "L", "長度毛病"); 
    ErrorCondition r2 = new ErrorCondition("李四", "430682198902191112","X", "校驗毛病"); 
    ErrorCondition r3 = new ErrorCondition("王五", "", "N", "身份證信息為空"); 
     
    list.add(r1); 
    list.add(r2); 
    list.add(r3); 
     
    return list; 
  } 
} 

     經由過程下面六個步調便可以在指定的地位生成Excel文件了。

 java POI完成向Excel中拔出圖片
 做Web開辟免不了要與Excel打交道。明天老邁給我一個義務-導出Excel。開端想的照樣蠻簡略的,不過就是查找,構建Excel,response下載便可。然則有一點分歧,就是要參加圖片,就是這個參加圖片弄了很久。同時收集上確切沒有發明比擬好的材料,所以寫這篇博文記載之,供本身和博友們查詢,參考。
       在POI中有HSSFPatriarch對象,該對象為繪圖的頂級治理器,它的createPicture(anchor, pictureIndex)辦法就可以夠在Excel拔出一張圖片。所以要在Excel中拔出圖片,三步便可以弄定。1、獲得HSSFPatriarch對象,2、new HSSFClientAnchor對象,3、挪用createPicture辦法便可。完成卻是異常輕易完成,假如想把它做好照樣有點兒難度的。這裡我們先拔出一張圖片:

public class ExcelImageTest { 
  public static void main(String[] args) { 
     FileOutputStream fileOut = null;   
     BufferedImage bufferImg = null;   
    //先把讀出去的圖片放到一個ByteArrayOutputStream中,以便發生ByteArray  
    try { 
      ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();   
      bufferImg = ImageIO.read(new File("F:/圖片/照片/無名氏/小昭11.jpg"));   
      ImageIO.write(bufferImg, "jpg", byteArrayOut); 
       
      HSSFWorkbook wb = new HSSFWorkbook();   
      HSSFSheet sheet1 = wb.createSheet("test picture");  
      //繪圖的頂級治理器,一個sheet只能獲得一個(必定要留意這點) 
      HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();   
      //anchor重要用於設置圖片的屬性 
      HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,(short) 1, 1, (short) 5, 8);   
      anchor.setAnchorType(3);   
      //拔出圖片  
      patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));  
      fileOut = new FileOutputStream("D:/測試Excel.xls");   
      // 寫入excel文件   
       wb.write(fileOut);   
       System.out.println("----Excle文件已生成------"); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    }finally{ 
      if(fileOut != null){ 
         try { 
          fileOut.close(); 
        } catch (IOException e) { 
          e.printStackTrace(); 
        } 
      } 
    } 
  } 
} 

      以下為履行後的成果:

  至於為何會是如許的成果,重要是由於HSSFClientAnchor(0, 0, 255, 255,(short) 1, 1, (short) 5, 8)這個結構函數形成的,上面我就來說明這個結構函數:HSSFClientAnchor(int dx1,int dy1,int dx2,int dy2,short col1,int row1,short col2, int row2);各個參數的寄義以下:

  •       dx1:the x coordinate within the first cell。
  •       dy1:the y coordinate within the first cell。
  •       dx2:the x coordinate within the second cell。
  •       dy2:the y coordinate within the second cell。
  •       col1:the column (0 based) of the first cell。
  •       row1:the row (0 based) of the first cell。
  •       col2:the column (0 based) of the second cell。
  •       row2:the row (0 based) of the second cell。

      這裡dx1、dy1界說了該圖片在開端cell的肇端地位,dx2、dy2界說了在終cell的停止地位。col1、row1界說了開端cell、col2、row2界說了卻束cell。

   上面是有兩個分歧的結構函數所創立的,從這幅圖中我們可以清楚看到下面八個參數的寄義和分歧的地方。

下面是拔出一張圖片,那末完成拔出多張圖片呢?其實很簡略,結構多個分歧的HSSFClientAnchor對象,掌握好那八個參數,以下:

HSSFClientAnchor anchor1 = new HSSFClientAnchor(0, 0, 1023,100,(short) 1, 1, (short)5, 8); 
      HSSFClientAnchor anchor2 = new HSSFClientAnchor(0, 0, 1023,100,(short) 1, 9, (short)5, 16); 
      
      //拔出圖片 
      patriarch.createPicture(anchor1, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)); 
      patriarch.createPicture(anchor2, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));

      其他代碼一樣,獲得以下成果:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved