POI操作Excel

来源:http://www.cnblogs.com/pdzbokey/archive/2016/12/17/6178911.html
-Advertisement-
Play Games

POI和Excel簡介 JAVA中操作Excel的有兩種比較主流的工具包: JXL 和 POI 。jxl 只能操作Excel 95, 97, 2000也即以.xls為尾碼的excel。而poi可以操作Excel 95及以後的版本,即可操作尾碼為 .xls(03版)和.xlsx(07版)兩種格式的ex ...


POI和Excel簡介

  JAVA中操作Excel的有兩種比較主流的工具包: JXL 和 POI 。jxl 只能操作Excel 95, 97, 2000也即以.xls為尾碼的excel。而poi可以操作Excel 95及以後的版本,即可操作尾碼為 .xls(03版)和.xlsx(07版)兩種格式的excel。所以, 如果你的項目中需要導入導出Excel, 那麼就可能需要POI. 講解之前瞭解一下Excel的幾個概念, 這也是POI操作的基礎. 一個excel文件就是一個工作簿workbook,一個工作簿中可以創建多張工作表sheet,而一個工作表中包含多個單元格Cell,這些單元格都是由列(Column)行(Row)組成.

我用到的jar包

  poi-ooxml-3.10.1-20140818.jarpoi-ooxml-schemas-3.10.1-20140818.jar,以及ooxml-lib目錄下的xmlbeans-2.6.0.jardom4j-1.6.1.jar。

基本案例

  我的準則是動手操作. 看過的聽過的永遠都是"我好像會了", 只有真正自己動手才是"我會了". 所以話不多說, 下麵一個寫入03Excel和寫入07Excel的例子你操作一遍就會體會POI的基本寫入操作

  寫入03Excel

    public void testWrite03Excel() throws Exception{
            //創建03版工作薄(workbook)
            HSSFWorkbook workbook = new HSSFWorkbook();
            //創建名稱為hello的工作表(sheet)
            HSSFSheet sheet = workbook.createSheet("hello");
            //創建第3行
            HSSFRow row = sheet.createRow(2);
            //創建第3列
            HSSFCell cell = row.createCell(2);
            //設置單元格的值
            cell.setCellValue("hello world");
            //創建輸出流用來寫入到硬碟
            FileOutputStream outputStream = new FileOutputStream("F:/my/tempTest/測試.xls");
            //寫入
            workbook.write(outputStream);
            //關閉流
            outputStream.close();
            workbook.close();
    }
View Code

 

  寫入07Excel

    public void testWrite07Excel() throws Exception{
        //創建07版工作薄(workbook)
        XSSFWorkbook workbook = new XSSFWorkbook();
        //創建工作表(sheet)
        XSSFSheet sheet = workbook.createSheet("hello");
        //創建第3行
        XSSFRow row = sheet.createRow(2);
        //創建第3列
        XSSFCell cell = row.createCell(2);
        //設置值
        cell.setCellValue("hello world");
        //創建輸出流用來寫入
        FileOutputStream outputStream = new FileOutputStream("F:/my/tempTest/測試.xlsx");
        workbook.write(outputStream);
        outputStream.close();
        workbook.close();
    }
View Code

  從這兩個可以看出, 生成文件的尾碼不同, 操作他們的類也不相同, 操作03版的都是Hxx, 操作07版的是Xxx, 那麼你也許想問, 有沒有相同的類或介面來操作他們, 答案是有的, 不過在new 工作薄(workbook)的時候要區分一下, 因為他們都只是實現公共的介面, 在下麵讀取的時候講解.

 

  讀取03和07Excel

    //這個應該是把Excel作為一個參數傳入, 為了測試方便, 就不傳參了
    @Test
    public void testRead03And07Excel() throws Exception{
        String fileName = "F:/my/tempTest/測試.xls";
        FileInputStream inputStream = new FileInputStream(fileName);
        Workbook workbook = null;
        //讀取工作薄(workbook), 根據尾碼判斷工作薄的版本
        if(fileName.endsWith(".xls"))
            workbook = new HSSFWorkbook(inputStream);
        else if(fileName.endsWith(".xlsx"))
            workbook = new XSSFWorkbook(inputStream);
        //讀取第1個工作表(sheet)
        Sheet sheet = workbook.getSheetAt(0);
        //讀取第3行
        Row row = sheet.getRow(2);
        //讀取第3列
        Cell cell = row.getCell(2);
        //讀取值
        String value = cell.getStringCellValue();
        System.out.println("第3行第3列的值是" + value);
        workbook.close();
        inputStream.close();
    }
View Code

  接收Excel時判斷其版本, 然後用不同的workbook接收, 接下來的操作都用他們的共同介面表示, 這樣實現了一個方法讀取不同版本的Excel. 我這裡讀取的一行數據, 在實際導入Excel的時候肯定不止一行數據, 到時候需要註意迴圈讀取, 讀取的起始行以及讀取數據的類型等.

添加樣式後的案例

    public void testExcelStyle() throws Exception {
        //創建工作薄
         HSSFWorkbook workbook = new HSSFWorkbook();
         //創建單元格樣式, 樣式屬於工作薄, 運用於單元格
         HSSFCellStyle cellStyle = workbook.createCellStyle();
         //水平居中
         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
         //垂直居中
         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
         //創建字體, 字體屬於工作薄, 應用於單元格
         HSSFFont font = workbook.createFont();
         //字體大小
         font.setFontHeightInPoints((short) 16);
         //字體顏色
         font.setColor(HSSFFont.COLOR_RED);
         //加粗
         font.setBold(true);
         //運用字體
         cellStyle.setFont(font);
         //背景色需要設置前景色、背景色和填充模式,否則可能沒有效果
         //設置前景色
         cellStyle.setFillForegroundColor(HSSFColor.BLUE_GREY.index);
         //設置背景色
         cellStyle.setFillBackgroundColor(HSSFColor.YELLOW.index);
         //設置填充模式, 以前景色為準, 也可以設置其他的填充模式, 得到的結果就是前景色背景色交相輝映
         cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
         
         //創建合併單元格對象
         //合併單元格, 屬於工作薄, 運用於工作表
         //構造方法的4個參數分別是firstRow, lastRow, firstCol, lastCol
         CellRangeAddress rangeAddress = new CellRangeAddress(2, 2, 2, 3);
         //創建名稱為hello的工作表
         HSSFSheet sheet = workbook.createSheet("hello");
         //sheet運用合併單元格對象
         sheet.addMergedRegion(rangeAddress);
         //設置第3列的寬度
         //sheet.setColumnWidth(2, 12000);
        //創建第3行
         HSSFRow row = sheet.createRow(2);
         //row.setHeightInPoints((short) 80);//設置行高
         //創建第3列
         HSSFCell cell = row.createCell(2);
         //設置值
         cell.setCellValue("hello world");
         //運用樣式
         cell.setCellStyle(cellStyle);
         
         //創建輸出流用來寫入
         FileOutputStream outputStream = new FileOutputStream("F:/my/tempTest/測試Style.xls");
         workbook.write(outputStream);
         outputStream.close();
         workbook.close();         
    }
View Code

  POI操作Excel的基本操作就這麼多了, 再結合文件的上傳下載就可以實現Excel的導入導出了.

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ...
  • <mvc:annotation-driven/> 這個便簽會註冊2個自定義攔截器,所以導致請求過來就會自己去走註冊的這2個攔截器和定義的一堆bean 但是這個便簽是必須得定義的 直接貼代碼吧 通過自定義攔截器來過濾掉靜態資源 這個問題困擾了我2天,整整熬了2天,翻遍了博客員和百度,各種瞎扯淡,也反思 ...
  • MyGraphicsView.h MyGraphicsView.cpp 三種繪製方法效果圖: ...
  • 一、model 到目前為止,當我們的程式涉及到資料庫相關操作時,我們一般都會這麼搞: 創建資料庫,設計表結構和欄位 使用 MySQLdb 來連接資料庫,並編寫數據訪問層代碼 業務邏輯層去調用數據訪問層執行資料庫操作 django為使用一種新的方式,即:關係對象映射(Object Relational ...
  • 一、前言 發下牢騷,這段時間要做項目,又要學框架,搞得都沒時間寫筆記,但是覺得這知識學過還是要記錄下。進入主題了 1.1、Hibernate簡介 什麼是Hibernate?Hibernate有什麼用? Hibernate是開放源代碼的對象關係映射框架,用來把java的對象映射到資料庫中的關係數據中, ...
  • JVM是按照運行時數據的存儲結構來劃分記憶體結構的。JVM在運行Java程式時,將他們劃分成不同格式的數據,分別存儲在不同的區域,這些數據就是運行時數據。運行時數據區域包括堆,方法區,運行時常量池,程式計數器,虛擬機棧,本地方法棧。 ...
  • 概述: Apache Solr是一個用JAVA語言構建在Apache Lucene項目上的開源的企業級搜索平臺。主要特性包含:全文搜索、命中高亮、片段式搜索、實時索引、動態集群、資料庫集成、NoSQL特性和富文本處理。提供分散式搜索和索引複製,設計時便充分考慮了擴展和容錯能力。Solr目前是第二流行 ...
  • 1、節選自Python Documentation 3.5.2的部分解釋 Objects are Python’s abstraction for data. All data in a Python program is represented by objects or by relations ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...