1. 程式人生 > >POI實戰-java開發excel詳解之複雜寫入

POI實戰-java開發excel詳解之複雜寫入

3.複雜寫入

3.1 複雜寫入

POI複雜寫出主要是同複雜讀取一樣,在實際開發中,從資料庫中讀取字元、數字、日期各種型別資料,並通過相應的計算公式寫出到Excel中。

這次寫出的Excel,不重新建立,而採用Excel模板(圖12)形式,將資料從資料庫(圖13)中讀出,並通過公式方式計算每個學生的總成績、平均分,最後寫入模板。


圖12

 

圖13

程式碼片段:

  1. publicstatic HSSFWorkbook write(InputStream inputStream) throws IOException, ClassNotFoundException{  
  2.         Class clazz = Class.forName(Student.class.getName());  
  3.         Field[] fields = clazz.getDeclaredFields();  
  4.         //初始一個workbook
  5.         HSSFWorkbook workbook = new HSSFWorkbook(inputStream);  
  6.         List<Student> list = Conn.getData();  
  7.         //建立一個sheet
  8.         HSSFSheet sheet = workbook.getSheetAt(0
    );  
  9.             //建立多行,從列名下一行開始建立
  10.             for(int rowIndex = 1; rowIndex <= list.size(); rowIndex++){  
  11.                 HSSFRow row = sheet.getRow(rowIndex);  
  12.                 if(row == null){  
  13.                     row = sheet.createRow(rowIndex);  
  14.                 }  
  15.                 Student student = list.get(rowIndex-1
    );  
  16.                 //建立多列(不包括ID列)
  17.                 for(int cellnum = 0; cellnum < fields.length-1; cellnum++){  
  18.                     HSSFCell cell = row.getCell(cellnum);  
  19.                     if(cell == null){  
  20.                         cell = row.createCell(cellnum);  
  21.                     }  
  22.                     switch (cellnum) {  
  23.                     case0:  
  24.                         cell.setCellValue(new HSSFRichTextString(student.getName()));  
  25.                         break;  
  26.                     case1:  
  27.                         cell.setCellValue(new HSSFRichTextString(student.getNo()));  
  28.                         break;  
  29.                     case2:  
  30.                         cell.setCellValue(new HSSFRichTextString(student.getNativePlace()));  
  31.                         break;  
  32.                     case3:  
  33.                         cell.setCellValue(new HSSFRichTextString(student.getEdu()));  
  34.                         break;  
  35.                     case4:  
  36.                         cell.setCellValue(student.getYear());  
  37.                         break;  
  38.                     case5:  
  39.                         cell.setCellValue(student.getMath());  
  40.                         break;  
  41.                     case6:  
  42.                         cell.setCellValue(student.getChinese());  
  43.                         break;  
  44.                     case7:  
  45.                         cell.setCellValue(student.getEnglish());  
  46.                         break;  
  47.                     case8:  
  48.                         cell.setCellValue(student.getScience());  
  49.                         break;  
  50.                     case9:  
  51.                         cell.setCellFormula("F"+(rowIndex+1)+"+G"+(rowIndex+1)+"+H"+(rowIndex+1)+"+I"+(rowIndex+1));//寫入總成績公式
  52.                         break;  
  53.                     case10:  
  54.                         cell.setCellFormula("AVERAGE(F"+(rowIndex+1)+":I"+(rowIndex+1)+")"); //寫入平均成績公式
  55.                         break;  
  56.                     case11:  
  57.                         cell.setCellValue(student.isCity());  
  58.                         break;  
  59.                     case12:  
  60.                         cell.setCellValue(new HSSFRichTextString(formatDate(student.getSchoolDate())));  
  61.                         break;  
  62.                     case13:  
  63.                         cell.setCellValue(new HSSFRichTextString(formatDate(student.getBirth())));  
  64.                         break;  
  65.                     }  
  66.                 }  
  67.             }  
  68.         return workbook;  
  69.     }  
  70.     publicstatic String formatDate(Date date){  
  71.         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  72.         return dateFormat.format(date);  
  73.     }  
  74. Main方法修改部分:  
  75. publicstaticvoid main(String[] args) {  
  76.         OutputStream outputStream = null;  
  77.         try {  
  78.             //讀取模板
  79.             InputStream inputStream = new FileInputStream(new File("E:\\helloPOI.xls"));  
  80.             HSSFWorkbook workbook = write(inputStream);  
  81.             outputStream = new FileOutputStream(new File("E:\\helloPOI.xls"));  
  82.             workbook.write(outputStream);  
  83. 略.........  



依賴類修改部分:
  1. publicstatic List<Student> getData(){  
  2.         List<Student> list = new ArrayList<Student>();  
  3.         Connection conn = getConn();  
  4.         String sql = "SELECT * FROM tpoi_vintage t";  
  5.         try {  
  6.             conn.setAutoCommit(false);  
  7.             PreparedStatement ps = conn.prepareStatement(sql);  
  8.             ResultSet rs = ps.executeQuery();  
  9.             while(rs.next()){  
  10.                 Integer id = rs.getInt("id");  
  11.                 String name = rs.getString("name");  
  12.                 String no = rs.getString("no");  
  13. 相關推薦

    POI實戰-java開發excel複雜寫入

    3.複雜寫入 3.1 複雜寫入 POI複雜寫出主要是同複雜讀取一樣,在實際開發中,從資料庫中讀取字元、數字、日期各種型別資料,並通過相應的計算公式寫出到Excel中。 這次寫出的Excel,不重新建立,而採用Excel模板(圖12)形式,將資料從資料

    ssm Dubbo分散式系統架構實戰入門,良心作二

    前言:Dubbo (https://github.com/alibaba/dubbo)是阿里巴巴開源的分散式服務化治理框架(微服務框架),歷經阿里巴巴電商平臺的大規模複雜業務的高併發考驗,到目前為止Dubbo仍然是開源界中體系最完善的服務化治理框架,因此Dubbo被國內大量

    Android開發例項IMF(輸入法)(Android SDK Sample—SoftKeyboard)

          本博前面的文章介紹了開發環境的搭建和模擬器的常用操作。本次,將以Android Sample中經典的SoftKeyboard專案為例,詳細解析Android上一個小型專案的開發過程和注意事項。   從SDK 1.5版本以後,Android就開放它的IMF(

    Java集合框架繼承map介面

    趁著最近比較閒,靜下心來準備把關於集合框架的東西好好整理一下,邊學邊整理。近階段先是整理整體的知識點,一些介面,一些繼承類以及它們的特性,用法,後續還會有一些常用的,比較重要的類的jdk原始碼剖析。 map介面: Map 提供 Key 到 Value

    Java程式設計師從笨鳥到菜鳥(一百一十)一步一步學習webservice(四)Axis2開發webservice

            Axis2是Apache提供的一款第三方Web Services引擎,與其前身Apache Axis相比,axis2更加高效、模組化,也更面向於XML的組織。經過精心的設計,axis2提供了更加便利的模組新增功能。  基於新的體系結構進行了全新編寫,而且沒有采用 Axis 1.x 的常用程式碼

    Java開發】設計模式單例

    單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例類的特殊類。通過單例模式可以保證應用中一個單例類只有且只有一個例項而且該例項易於外界訪問,從而方便對例項個數的控制並提供全域性訪問點。 1. 實現單例三要素 教科書中的示例是很

    POI操作Excel,讀取xls和xlsx格式的文件

    shee xss split 類型 後綴 .sh lan xls lin package org.ian.webutil; import java.io.File; import java.io.FileInputStream; import java.io.FileN

    JVMJava虛擬機

    oot 垃圾回收器 組成 string 類 ref hot tof target 就是 這篇文章解釋了Java 虛擬機(JVM)的內部架構。下圖顯示了遵守 Java SE 7 規範的典型的 JVM 核心內部組件。 上圖顯示的組件分兩個章節解釋。第一章討論針對每個線程創

    JAVA 圖形界面開發基礎

    .so 積木 並且 init 中間 ram stat 字符 tle /*文章中用到的代碼只是一部分,需要源碼的可通過郵箱聯系我 [email protected]*/ 與C的win32一樣,JAVA也有自己的圖形界面開發,將在此篇博客中對基礎部分進行講解。 1.Java提供

    大數據學習系列三 ----- HBase Java Api 圖文

    工具 itl 進行 圖片 置配 動態數據 sync ase tac 引言 在上一篇中大數據學習系列之二 ----- HBase環境搭建(單機) 中,成功搭建了Hadoop+HBase的環境,本文則主要講述使用Java 對HBase的一些操作。 一、事前準備 1.確認hado

    Java定時任務工具Timer篇

    java 定時任務 定時 任務調度 什麽 出身 需要 bsp 機制 Java定時任務調度工具詳解 什麽是定時任務調度? ◆ 基於給定的時間點,給定的時間間隔或者給定的執行次數自動執行的任務。 在Java中的定時調度工具? ◆ Timer ◆Quartz Time

    spring-dataspring-data-jpa:簡單三步快速上手spring-data-jpa開發

    事務管理 out don 前言 map lns xid public lease 前言: 基於spring framework 4.x或spring boot 1.x開發環境 務必註意以下版本問題:Spring framework4.x(Spring boot1.x)對應s

    ZCU106開發VIVADO開發環境的安裝

    感謝大家漫長的等待!! 我們團隊從去年底拿到ZCU106後就一直在進行相關研發,由於手頭上的活比較多就把ZCU106開發詳解的釋出給延遲了。 從本週開始我們團隊開始對我們在ZCU106開發過程中遇到的問題和解決辦法跟大家進行分享。我們的QQ群是836535064。希望跟大家一起玩好這一個牛逼的晶片。

    Android開發onTouch和onClick

    分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

    Java原始碼FileOutputStream

    Java原始碼詳解之FileOutputStream類 1.類定義 A file output stream is an output stream for writing data to a File or to a FileDescriptor. Whether or

    [轉]javaCV開發5:錄製音訊(錄製麥克風)到本地檔案/流媒體伺服器(基於javax.sound、javaCV-FFMPEG)

    本文轉載自部落格:https://blog.csdn.net/eguid_1/article/details/52702385 ------------------------------------------------------------------------------------

    POI操作Excel,HSSF和XSSF兩種方式

    HSSF方式: package com.tools.poi.lesson1; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; impor

    Java佇列 LinkedList 類

    Java佇列詳解之 LinkedList 類 1. 類簡介 類釋義 A collection designed for holding elements prior to processing. Besides basic Collection oper

    iOS藍芽開發—CoreBluetooth

    CoreBluetooth的API是基於BLE4.0的標準的。這個框架涵蓋了BLE標準的所有細節。僅僅只有新的iOS裝置和Mac是和BLE標準相容.在CoreBluetooth框架中,有兩個主要的角色:周邊和中央(Peripheral and Central) ,整個框架

    MyGUI3.2.0+Ogre1.8.1開發第一個MyGUI程式

      mygui是一款簡單、易用的開源圖形介面開發庫,主要面向物件是遊戲的3D介面,下面是它的官方介紹 MyGUI是為遊戲和3D應用程式建立圖形使用者介面(GUI)的一個庫。 mygui的主要目標是:速度,靈活性和易用性。(出自MyGUI官網) 官方網站:http