1. 程式人生 > >java 生成和操作Excel

java 生成和操作Excel

JAVA EXCEL API:是一開放原始碼專案,通過它Java開發人員可以讀取Excel檔案的內容、建立新的Excel檔案、更新已經存在的Excel檔案。使用該API非Windows作業系統也可以通過純Java應用來處理Excel資料表。因為它是使用Java編寫的,所以我們在Web應用中可以通過JSP、Servlet來呼叫API實現對Excel資料表的訪問。

下載:

官方網站 http://www.andykhan.com/jexcelapi/ 下載最新版本(本人下的是jexcelapi_2_6_12.tar.gz,解壓後將裡面的jxl.jar複製到WEB-INF/lib目錄下面即可)

Java Excel API的jar包可以通過以下URL獲得:

直接下載地址(迅雷上新建任務即可):

一、JSP生成簡單的Excel檔案

複製程式碼
package beans.excel;

import java.io.IOException;
import java.io.OutputStream;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

public class SimpleExcelWrite {
    
public void createExcel(OutputStream os) throws WriteException,IOException{ //建立工作薄 WritableWorkbook workbook = Workbook.createWorkbook(os); //建立新的一頁 WritableSheet sheet = workbook.createSheet("First Sheet",0); //建立要顯示的內容,建立一個單元格,第一個引數為列座標,第二個引數為行座標,第三個引數為內容 Label xuexiao = new
Label(0,0,"學校"); sheet.addCell(xuexiao); Label zhuanye = new Label(1,0,"專業"); sheet.addCell(zhuanye); Label jingzhengli = new Label(2,0,"專業競爭力"); sheet.addCell(jingzhengli); Label qinghua = new Label(0,1,"清華大學"); sheet.addCell(qinghua); Label jisuanji = new Label(1,1,"計算機專業"); sheet.addCell(jisuanji); Label gao = new Label(2,1,"高"); sheet.addCell(gao); Label beida = new Label(0,2,"北京大學"); sheet.addCell(beida); Label falv = new Label(1,2,"法律專業"); sheet.addCell(falv); Label zhong = new Label(2,2,"中"); sheet.addCell(zhong); Label ligong = new Label(0,3,"北京理工大學"); sheet.addCell(ligong); Label hangkong = new Label(1,3,"航空專業"); sheet.addCell(hangkong); Label di = new Label(2,3,"低"); sheet.addCell(di); //把建立的內容寫入到輸出流中,並關閉輸出流 workbook.write(); workbook.close(); os.close(); } }
複製程式碼

SimpleExcelWrite.jsp

複製程式碼
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import="java.io.*" %>
<%@ page import="beans.excel.*" %>
<% 
    String fname = "學校競爭力情況";
    OutputStream os = response.getOutputStream();//取得輸出流
    response.reset();//清空輸出流
    
    //下面是對中文檔名的處理
    response.setCharacterEncoding("UTF-8");//設定相應內容的編碼格式
    fname = java.net.URLEncoder.encode(fname,"UTF-8");
    response.setHeader("Content-Disposition","attachment;filename="+new String(fname.getBytes("UTF-8"),"GBK")+".xls");
    response.setContentType("application/msexcel");//定義輸出型別
    SimpleExcelWrite sw = new SimpleExcelWrite();
    sw.createExcel(os);

 %>
<html>
  <head>
    
    <title></title>

  </head>
  
  <body>
  </body>
</html>
複製程式碼

 二、生成複雜資料格式Excel檔案

複製程式碼
package beans.excel;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Calendar;
import java.util.Date;

import jxl.Workbook;
import jxl.write.Boolean;
import jxl.write.DateFormats;
import jxl.write.DateTime;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

public class ComplexDataExcelWrite {
    public void createExcel(OutputStream os) throws WriteException,IOException {
        //建立工作薄
        WritableWorkbook workbook = Workbook.createWorkbook(os);
        //建立新的一頁
        WritableSheet sheet = workbook.createSheet("First Sheet", 0);
        //建立要顯示的具體內容
        Label formate = new Label(0,0,"資料格式");
        sheet.addCell(formate);
        Label floats = new Label(1,0,"浮點型");
        sheet.addCell(floats);
        Label integers = new Label(2,0,"整型");
        sheet.addCell(integers);
        Label booleans = new Label(3,0,"布林型");
        sheet.addCell(booleans);
        Label dates = new Label(4,0,"日期格式");
        sheet.addCell(dates);
        
        Label example = new Label(0,1,"資料示例");
        sheet.addCell(example);
        //浮點資料
        Number number = new Number(1,1,3.1415926535);
        sheet.addCell(number);
        //整形資料
        Number ints = new Number(2,1,15042699);
        sheet.addCell(ints);
        Boolean bools = new Boolean(3,1,true);
        sheet.addCell(bools);
        //日期型資料
        Calendar c = Calendar.getInstance();
        Date date = c.getTime();
        WritableCellFormat cf1 = new WritableCellFormat(DateFormats.FORMAT1);
        DateTime dt = new DateTime(4,1,date,cf1);
        sheet.addCell(dt);
        //把建立的內容寫入到輸出流中,並關閉輸出流
        workbook.write();
        workbook.close();
        os.close();
        
    }
}
複製程式碼

 三、生成複雜佈局和樣式的Excel檔案

複製程式碼
package beans.excel;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Calendar;
import java.util.Date;

import jxl.Workbook;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.write.Boolean;
import jxl.write.DateFormats;
import jxl.write.DateTime;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

public class MutiStyleExcelWrite {
    public void createExcel(OutputStream os) throws WriteException,IOException {
        //建立工作薄
        WritableWorkbook workbook = Workbook.createWorkbook(os);
        //建立新的一頁
        WritableSheet sheet = workbook.createSheet("First Sheet", 0);
        //構造表頭
        sheet.mergeCells(0, 0, 4, 0);//新增合併單元格,第一個引數是起始列,第二個引數是起始行,第三個引數是終止列,第四個引數是終止行
        WritableFont bold = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD);//設定字型種類和黑體顯示,字型為Arial,字號大小為10,採用黑體顯示
        WritableCellFormat titleFormate = new WritableCellFormat(bold);//生成一個單元格樣式控制物件
        titleFormate.setAlignment(jxl.format.Alignment.CENTRE);//單元格中的內容水平方向居中
        titleFormate.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);//單元格的內容垂直方向居中
        Label title = new Label(0,0,"JExcelApi支援資料型別詳細說明",titleFormate);
        sheet.setRowView(0, 600, false);//設定第一行的高度
        sheet.addCell(title);
        
        //建立要顯示的具體內容
        WritableFont color = new WritableFont(WritableFont.ARIAL);//選擇字型
        color.setColour(Colour.GOLD);//設定字型顏色為金黃色
        WritableCellFormat colorFormat = new WritableCellFormat(color);
        Label formate = new Label(0,1,"資料格式",colorFormat);
        sheet.addCell(formate);
        Label floats = new Label(1,1,"浮點型");
        sheet.addCell(floats);
        Label integers = new Label(2,1,"整型");
        sheet.addCell(integers);
        Label booleans = new Label(3,1,"布林型");
        sheet.addCell(booleans);
        Label dates = new Label(4,1,"日期格式");
        sheet.addCell(dates);
        
        Label example = new Label(0,2,"資料示例",colorFormat);
        sheet.addCell(example);
        //浮點資料
        //設定下劃線
        WritableFont underline= new WritableFont(WritableFont.ARIAL,WritableFont.DEFAULT_POINT_SIZE,WritableFont.NO_BOLD,false,UnderlineStyle.SINGLE);
        WritableCellFormat greyBackground = new WritableCellFormat(underline);
        greyBackground.setBackground(Colour.GRAY_25);//設定背景顏色為灰色
        Number number = new Number(1,2,3.1415926535,greyBackground);
        sheet.addCell(number);
        //整形資料
        WritableFont boldNumber = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD);//黑體
        WritableCellFormat boldNumberFormate = new WritableCellFormat(boldNumber);
        Number ints = new Number(2,2,15042699,boldNumberFormate);
        sheet.addCell(ints);
        //布林型資料
        Boolean bools = new Boolean(3,2,true);
        sheet.addCell(bools);
        //日期型資料
        //設定黑體和下劃線
        WritableFont boldDate = new WritableFont(WritableFont.ARIAL,WritableFont.DEFAULT_POINT_SIZE,WritableFont.BOLD,false,UnderlineStyle.SINGLE);
        WritableCellFormat boldDateFormate = new WritableCellFormat(boldDate,DateFormats.FORMAT1);
        Calendar c = Calendar.getInstance();
        Date date = c.getTime();
        DateTime dt = new DateTime(4,2,date,boldDateFormate);
        sheet.addCell(dt);
        //把建立的內容寫入到輸出流中,並關閉輸出流
        workbook.write();
        workbook.close();
        os.close();
        
    }
}
複製程式碼

 四、JSP讀取Excel報表

複製程式碼
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import="java.io.File" %>
<%@ page import="jxl.Cell" %>
<%@ page import="jxl.Sheet" %>
<%@ page import="jxl.Workbook" %>
<html>
  <head>
    <title></title>
  </head>
  <body>
    <font size="2">
    <%
        String fileName = "D:/學校競爭力情況.xls";
        File file = new File(fileName);//根據檔名建立一個檔案物件
        Workbook wb = Workbook.getWorkbook(file);//從檔案流中取得Excel工作區物件
        Sheet sheet = wb.getSheet(0);//從工作區中取得頁,取得這個物件的時候既可以用名稱來獲得,也可以用序號。
        String outPut = "";
        
        outPut = outPut + "<b>" + fileName + "</b><br>";
        outPut = outPut + "第一個sheet的名稱為:" + sheet.getName() + "<br>";
        outPut = outPut + "第一個sheet共有:" + sheet.getRows() + "" + sheet.getColumns() + "列<br>";
        outPut = outPut + "具體內容如下:<br>";
        for(int i=0; i < sheet.getRows(); i++){
            for(int j=0; j < sheet.getColumns(); j++){
                Cell cell = sheet.getCell(j,i);
                outPut = outPut + cell.getContents() + " ";
            }
            outPut = outPut + "<br>";
        }
        out.println(outPut);
     %>
     </font>
  </body>
</html>
複製程式碼

示例1:讀取本地Excel檔案F:\紅樓人物.xls

1.       新建Excel檔案F:\紅樓人物.xls

內容如下:

2.       Java通過jexcelapi包操作excel檔案:

  1. //in ExcelOperater   
  2. import java.io.File;   
  3. import java.io.FileInputStream;   
  4. import java.io.InputStream;   
  5. import jxl.Cell;   
  6. import jxl.CellType;   
  7. import jxl.Sheet;   
  8. import jxl.Workbook;   
  9. import jxl.write.Label;   
  10. public class ExcelOperater    
  11. {   
  12.     public static void main(String[] args)    
  13.     {   
  14.         jxl.Workbook readwb = null;   
  15.         try    
  16.         {   
  17.             //構建Workbook物件, 只讀Workbook物件   
  18.             //直接從本地檔案建立Workbook   
  19.             InputStream instream = new FileInputStream("F:/紅樓人物.xls");   
  20.             readwb = Workbook.getWorkbook(instream);   
  21.             //Sheet的下標是從0開始   
  22.             //獲取第一張Sheet表   
  23.             Sheet readsheet = readwb.getSheet(0);   
  24.             //獲取Sheet表中所包含的總列數   
  25.             int rsColumns = readsheet.getColumns();   
  26.             //獲取Sheet表中所包含的總行數   
  27.             int rsRows = readsheet.getRows();   
  28.             //獲取指定單元格的物件引用   
  29.             for (int i = 0; i < rsRows; i++)   
  30.             {   
  31.                 for (int j = 0; j < rsColumns; j++)   
  32.                 {   
  33.                     Cell cell = readsheet.getCell(j, i);   
  34.                     System.out.print(cell.getContents() + " ");   
  35.                 }   
  36.                 System.out.println();   
  37.             }   
  38.             //利用已經建立的Excel工作薄,建立新的可寫入的Excel工作薄   
  39.             jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(   
  40.                     "F:/紅樓人物1.xls"), readwb);   
  41.             //讀取第一張工作表   
  42.             jxl.write.WritableSheet ws = wwb.getSheet(0);   
  43.             //獲得第一個單元格物件   
  44.             jxl.write.WritableCell wc = ws.getWritableCell(0, 0);   
  45.             //判斷單元格的型別, 做出相應的轉化   
  46.             if (wc.getType() == CellType.LABEL)    
  47.             {   
  48.                 Label l = (Label) wc;   
  49.                 l.setString("新姓名");   
  50.             }   
  51.             //寫入Excel物件   
  52.             wwb.write();   
  53.             wwb.close();   
  54.         } catch (Exception e) {   
  55.             e.printStackTrace();   
  56.         } finally {   
  57.             readwb.close();   
  58.         }   
  59. }   
  60. }   

3.       結果:

①     控制檯輸出:

人物 等級 大觀園位置 金陵十二釵

林黛玉 小姐 瀟湘館 正冊

妙玉 世外 櫳翠庵 正冊

晴雯 丫鬟 怡紅院 副冊

香菱 妾 蘅蕪苑 又副冊

②     建立檔案F:\紅樓人物1.xls

4.       程式解析:

所引用的包:

①     Workbook物件,需要jxl.Workbook包;

②     InputStream、FileInputStream物件:需要java.io.FileInputStream和java.io.InputStream包。

③     Sheet物件:jxl.Sheet包;注意excel中sheet表單的行列從0開始計數。

④     Cell物件:jxl.Cell包;對單元進行處理

⑤     Label:選擇jxl.write.label包

⑥     WritableWorkbook、WritableSheet、WritableCelll物件

例項二:3個功能-----從excel檔案F:\紅樓人物.xls讀取資料;生成新的excel檔案F:\紅樓人物2.xls;修改原excel一個單元並輸出為F:\紅樓人物3.xls。

原始檔案:F:\紅樓人物.xls

執行結果:

①     控制檯輸出:

人物 等級 大觀園位置 金陵十二釵

林黛玉 小姐 瀟湘館 正冊

妙玉 世外 櫳翠庵 正冊

晴雯 丫鬟 怡紅院 副冊

香菱 妾 蘅蕪苑 又副冊

②     寫入輸出Excel檔案:F:\紅樓人物2.xls

③     修改輸出檔案 F:\紅樓人物3.xls (加修飾後輸出)

示例程式:

  1. //in ExcelHandle   
  2. import jxl.*;   
  3. import jxl.format.UnderlineStyle;   
  4. import jxl.write.*;   
  5. import jxl.write.Number;   
  6. import jxl.write.Boolean;   
  7. import jxl.Cell;   
  8. import java.io.*;   
  9. 相關推薦

    轉帖 Java生成操作Excel文件

    head instance AC 單元格 content 類型 eid 網站 hang JAVA EXCEL API:是一開放源碼項目,通過它Java開發人員可以讀取Excel文件的內容、創建新的Excel文件、更新已經存在的Excel文件。使用該API非Windows操作

    Java生成操作Excel檔案

    JAVA EXCEL API:是一開放原始碼專案,通過它Java開發人員可以讀取Excel檔案的內容、建立新的Excel檔案、更新已經存在的Excel檔案。使用該API非Windows作業系統也可以通過純Java應用來處理Excel資料表。因為它是使用Java編寫的,所以我們在Web應用中可以通過

    java 生成操作Excel

    JAVA EXCEL API:是一開放原始碼專案,通過它Java開發人員可以讀取Excel檔案的內容、建立新的Excel檔案、更新已經存在的Excel檔案。使用該API非Windows作業系統也可以通過純Java應用來處理Excel資料表。因為它是使用Java編寫的,所以我們在Web應用中可以通過JSP、

    java使用POI操作excel文件,實現批量導出,導入

    tar.gz spa != nts big 應該 關於 override auth 一、POI的定義 JAVA中操作Excel的有兩種比較主流的工具包: JXL 和 POI 。jxl 只能操作Excel 95, 97, 2000也即以.xls為後綴的excel。而po

    Java】使用Apache POI生成解析Excel檔案

    概述   Excel是我們平時工作中比較常用的用於儲存二維表資料的,JAVA也可以直接對Excel進行操作,分別有jxl和poi,2種方式。 程式碼   要使用poi,必須引入poi的jar包,maven依賴如下(最新包可參考mvn資訊): <

    Java圖表繪製操作excel表格

    今天學習了Java中使用JFreeChart,POI,JXL繪製圖表,操作excel表格問題,自己動手了寫了些小demo,不足之處,請大家指正。謝謝。 ^_^ 完整的類檔案在附件中。並附上一張截圖 ====================================

    java 生成解析xml

    img use public set odin 實現 etag system Coding 本文主要使用的是Jdom.jar包(包的下載百度一下)實現了生成xml文件和解析xml文件 下面是生成xml的實現 說明:stuLists集合是一個存放著Student對象的集合

    java生成解析二維碼

    ade ted image def eat tro per buffer could 前言 現在,二維碼的應用已經非常廣泛,在線生成器也是諸多,隨手生成。 所以就和大家分享一個小案例,用zxing來做一個的二維碼生成器,當然這個例子是比較簡單,若是寫的不好請多多包涵。

    R: factor & list 生成操作因子、列表

    shu p s 類型 問題 rac 方便 left 函數 nba ################################################### 問題:生成、操作列表 & 因子 18.4.27 怎麽生成列表 list、因

    python使用xlsxwriter模塊生成處理Excel文檔

    xlsxwriterxlsxwriter使用實例--網站業務流量報表安裝模塊wget https://files.pythonhosted.org/packages/04/c9/d5a8b02561a32bfcbec767a7d094c1ce54874eba9bc6bbaa58dd9ad523e7/XlsxW

    Java使用easyExcel操作Excel案例

      這兩天一直在玩些小工具,今天整了下阿里巴巴的easyExcel,下面是案例: import com.alibaba.excel.ExcelReader; import com.alibaba.excel.ExcelWriter; import com.alibaba.e

    Java連線操作資料庫

    JDBC 1、JDBC是開發資料庫引用的java API,通過JDBC,使用Java設計的程式能夠執行SQL語言、獲取結果、在使用者介面中顯示資料,並且能將所做的改動傳回資料庫,同時JDBC API可用於分散式異型機環境中國多種資料來源之間的互動; 2、一般使用Jav

    Java讀取解析Excel資料:基於Apache POI(二)

    Java讀取和解析Excel資料:基於Apache POI(二) 假設附錄1文章中的test.xls是對員工的考勤記錄表。需要根據這張excel表統計員工的加班時間,那麼需要重點關注第五列的下班時候的打卡記錄時間。我寫一個Java程式,根據附錄1中那樣的excel表中的下班打卡時間統計員工在

    java之poi操作excel-批量匯入匯出

        上一篇博文介紹了poi操作excel的基本讀寫操作後,接下來,介紹一下在專案中的實際用途:批量匯入、批量匯出功能。因為重點知識介紹批量匯入匯出excel功能,故而專案整體的搭建後臺用jdbc與struts2,前端頁面用jquery-easyui實現(其實也可以整合到s

    《MFC如何新增EXCEL操作EXCEL

    EXCEL工作簿、工作表、單元格、行、列 我們在使用EXCEL時,需要搞清楚EXCEL應用程式、工作簿、工作表以及單元格的關係,還有如何設定字型和背景以及邊框的屬性。總之,就是1個工作簿(workbook)中含有很多個工作表(worksheet),工作表(worksheet)由行(cols)

    php使用phpexcel開發庫生成讀取excel

    excel的生成和讀取在日常開發中用的很多,最基本的操作就是把資料庫裡的資料匯出為excel或者讀取excel的資料並插入到資料庫,這兩種需求是比較常見的。像java,C#可以使用POI開發庫,php中也給我們提供了這樣的第三方開發庫phpexcel,這樣php也能生成和讀

    使用JAVA讀取寫入EXCEL檔案

    首先要下載 poi包和jxl包 讀取部分: import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNot

    java匯入匯出excel文件(支援xls,xlsx格式)

    好久沒寫部落格了,寫個簡單的估計也是常用的,歡迎評判指導交流 相關jar包,可以先百度,因為時間問題後續再補上 package main.java; import java.io.File; import java.io.FileInputStream; import

    Java使用POI操作Excel並建立下拉框

    java建立 package poiexcel;   import java.io.FileOutputStream;   import java.util.Date;   import org

    Java 使用POI操作EXCEL及測試框架搭建、測試開發的一些想法

    無論是UI自動化測試還是介面自動化測試都需要進行資料驅動,一般很常見的一種方式就是用excel來管理資料,那麼就涉及到一些程式碼對EXCEL的操作,之前我們介紹過用CSV來處理EXCEL,但是它的功能還不夠強大。比如介面自動化測試框架搭建的時候我們用excel來進行資料驅動,