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獲得:

http://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.6/jexcelapi_2_6_6.zip/download

(包括所有版本):http://sourceforge.net/projects/jexcelapi/files/

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

http://nchc.dl.sourceforge.net/project/jexcelapi/jexcelapi/2.6.6/jexcelapi_2_6_6.zip 

一、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.   
  3. import java.io.File;   
  4.   
  5. import java.io.FileInputStream;   
  6.   
  7. import java.io.InputStream;   
  8.   
  9.     
  10.   
  11. import jxl.Cell;   
  12.   
  13. import jxl.CellType;   
  14.   
  15. import jxl.Sheet;   
  16.   
  17. import jxl.Workbook;   
  18.   
  19. import jxl.write.Label;   
  20.   
  21.     
  22.   
  23. public class ExcelOperater    
  24.   
  25. {   
  26.   
  27.     public static void main(String[] args)    
  28.   
  29.     {   
  30.   
  31.         jxl.Workbook readwb = null;   
  32.   
  33.         try    
  34.   
  35.         {   
  36.   
  37.             //構建Workbook物件, 只讀Workbook物件   
  38.   
  39.             //直接從本地檔案建立Workbook   
  40.   
  41.             InputStream instream = new FileInputStream("F:/紅樓人物.xls");   
  42.   
  43.             readwb = Workbook.getWorkbook(instream);   
  44.   
  45.     
  46.   
  47.             //Sheet的下標是從0開始   
  48.   
  49.             //獲取第一張Sheet表   
  50.   
  51.             Sheet readsheet = readwb.getSheet(0);   
  52.   
  53.             //獲取Sheet表中所包含的總列數   
  54.   
  55.             int rsColumns = readsheet.getColumns();   
  56.   
  57.             //獲取Sheet表中所包含的總行數   
  58.   
  59.             int rsRows = readsheet.getRows();   
  60.   
  61.             //獲取指定單元格的物件引用   
  62.   
  63.             for (int i = 0; i < rsRows; i++)   
  64.   
  65.             {   
  66.   
  67.                 for (int j = 0; j < rsColumns; j++)   
  68.   
  69.                 {   
  70.   
  71.                     Cell cell = readsheet.getCell(j, i);   
  72.   
  73.                     System.out.print(cell.getContents() + " ");   
  74.   
  75.                 }   
  76.   
  77.                 System.out.println();   
  78.   
  79.             }   
  80.   
  81.                
  82.   
  83.             //利用已經建立的Excel工作薄,建立新的可寫入的Excel工作薄   
  84.   
  85.             jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(   
  86.   
  87.                     "F:/紅樓人物1.xls"), readwb);   
  88.   
  89.             //讀取第一張工作表   
  90.   
  91.             jxl.write.WritableSheet ws = wwb.getSheet(0);   
  92.   
  93.             //獲得第一個單元格物件   
  94.   
  95.             jxl.write.WritableCell wc = ws.getWritableCell(0, 0);   
  96.   
  97.             //判斷單元格的型別, 做出相應的轉化   
  98.   
  99.             if (wc.getType() == CellType.LABEL)    
  100.   
  101.             {   
  102.   
  103.                 Label l = (Label) wc;   
  104.   
  105.                 l.setString("新姓名");   
  106.   
  107.             }   
  108.   
  109.             //寫入Excel物件   
  110.   
  111. 相關推薦

    Java生成操作Excel檔案

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

    轉帖 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應用中可以通過JSP、

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

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

    使用JAVA讀取寫入EXCEL檔案

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

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

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

    java後端匯入excel模板匯入excel檔案去讀資料

    模板轉載地址:https://www.cnblogs.com/zhangyangtao/p/9802948.html 直接上程式碼(我是基於ssm寫的demo,匯入檔案目前只能讀取.xls字尾的excel檔案) 1 <!--匯入的核心依賴--> 2 <depende

    Java使用Apache POI操作Excel檔案

    這裡有一篇非常細緻的文章,可供需要時候檢視 Apache POI使用詳解 1. 新建Maven專案,引入POI的依賴 <!-- apache POI for xls --&

    位元組流與字元流,位元組流字元流的使用哪個多? java 讀寫操作檔案 BufferedReaderRandomAccessFile

    一 首先我們要知道 在程式中所有的資料都是以流的方式進行傳輸或儲存的   而流有兩種 位元組流用來處理位元組或二進位制物件 字元流主要用來處理字元或字串,一個字元佔兩個位元組 而上一篇的java 讀寫操作大檔案 BufferedReader和RandomAccessFile Buf

    java - 操作Excel檔案

    <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version></depend

    java工具類之Excel檔案匯入、讀取資料(支援xls、xlsx)

    所需的jar包:poi的jar包儘量保持一致,不然會報版本不一致的錯誤下面是程式碼:package ReadExcel; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.

    JAVA處理Excel檔案---生成簡單的Excel檔案

     在現實的辦公中,我們常常會有這樣一個要求:要求把報表直接用excel開啟。在實習中有這樣一個需求。根據所選擇的資源查詢使用者所提供附件的全部資訊並生成excel供下載。但是在查詢的時候我們需要來檢

    java使用POI讀取excel檔案,相容xlsxlsx

    public List<Double> readExcels(InputStream is)throws Exception{List<Double> xlsxList = new ArrayList<Double>();    try {             if(i

    Java程式設計中操作XML檔案生成方法一:DOM)

    以DOM方式寫入 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); //建立工廠例項 Documen

    利用java操作Excel檔案

    {            //建立一個工作薄            WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));            //待插入的工作表            WritableSh

    Java圖表繪製操作excel表格

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

    Java程式設計中操作XML檔案生成方法三:JDOM)

    以JDOM方式寫入 Document document = new Document(); //建立Document物件 Element rss = new Element(“rss”

    java使用POI實現excel檔案的讀取,相容字尾名xlsxlsx

    首先,引入所需的jar包: 如果是maven管理專案的jar包,只需在pom.xml中加上: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency>

    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來做一個的二維碼生成器,當然這個例子是比較簡單,若是寫的不好請多多包涵。