<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    yxhxj2006

    常用鏈接

    統(tǒng)計(jì)

    最新評(píng)論

    Java對(duì)Excel表格的操作

    Java對(duì)Excel表格的操作

    目前軟件開發(fā)多采用B/S架構(gòu)。正B/S架構(gòu)可以給軟件的開發(fā)部署帶來(lái)很大的便利,但是與此同時(shí)這種架構(gòu)也帶來(lái)了一些問(wèn)題,例如Web報(bào)表的處理等,在B/S架構(gòu)下,客戶端的開發(fā)并沒有豐富的、互動(dòng)性能良好的界面組件供開發(fā)人員調(diào)用,而且調(diào)用客戶端機(jī)器上的設(shè)備也很不方便。這些缺陷將會(huì)導(dǎo)致B/S架構(gòu)的軟件在客戶端的一些功能開發(fā)陷入困境。

           Web報(bào)表的開發(fā)是一個(gè)比較常見的功能,然而在B/S架構(gòu)上實(shí)現(xiàn)這些功能并沒有在C/S架構(gòu)上那么簡(jiǎn)單,針對(duì)這樣的問(wèn)題,在下面的內(nèi)容中將介紹JSPExcel的交互、圖形報(bào)表的制作和基本的Web打印功能,這些功能都不是很難,可以在掌握這些功能的基礎(chǔ)上舉一反三,思考其他新的應(yīng)用。

    1JSP對(duì)Excel報(bào)表的處理

    在應(yīng)用系統(tǒng)開發(fā)的過(guò)程中,很多客戶會(huì)提出把數(shù)據(jù)表格導(dǎo)出為Excel文件的需求,這樣就可以利用Excel的強(qiáng)大功能做一些統(tǒng)計(jì)計(jì)算。Java自帶的API中并沒直接操作Excel文檔的方法,如果要在Java中處理Excel文檔只有借助于第三方的解決方案。在接下來(lái)的章節(jié)中將要介紹的就是利用這些第三方的類庫(kù)處理Excel文檔的具體方法。

    1.1JSP操作Excel工具匯總

    Java處理Excel這個(gè)領(lǐng)域已經(jīng)有很多開源的解決方案,目前在這方面做得比較出色的有ApachePOIJExcelApi(jxl)

    ApachePOIApache基金組織Jakarta項(xiàng)目的子項(xiàng)目。POI包括一系列的API,可以操作多種格式的Microsoft Office文件,通過(guò)這些API可以在Java中很方便地讀寫ExcelWord等文件。POI是比較完整的Java ExcelJava Word解決方案。其子項(xiàng)目包括:POIFSHSSFHDFHPSF。其中HSSFJavaMicrosoft Excel97/2002文件的接口,支持讀寫功能。

    JExcelApi也是一個(gè)Java操作Excel的接口。它也是一個(gè)開源的解決方案,雖然在名氣方面比不上大名鼎鼎的ApachePOI,但是在操作Excel的功能上絲毫不比POI遜色,而且在某些方面做得比POI更出色,例如生成Excel文件時(shí)給合并單元格加邊框的問(wèn)題,在POI中這很難實(shí)現(xiàn)的,POI的官方僅僅承諾在以后的版本中會(huì)添加這個(gè)功能。然而在JExceApi中通過(guò)一個(gè)簡(jiǎn)單的設(shè)置語(yǔ)句就可以實(shí)現(xiàn)。而且總體上JExcelApi使用都是比較簡(jiǎn)單方便的。

    利用Java進(jìn)行開發(fā),尤其當(dāng)使用第三方類的庫(kù)進(jìn)行開發(fā)的時(shí)候,最讓人頭疼的就是中文亂碼問(wèn)題,在這方面就連Apache POI也不例外,在生成Excel文件時(shí)必須經(jīng)過(guò)復(fù)雜的編碼設(shè)置才能看到中文顯示。但是使用JExcelApi就沒有這個(gè)問(wèn)題,只需要簡(jiǎn)單的選擇即可生成漂亮的中文Excel文件,這也是很多開發(fā)人員愿意選擇這個(gè)API的又一個(gè)重要原因。

    采用這兩種工具都可以很方便地操作Excel文件,在這里只介紹JExcelApi的使用方法,其他類似的第三方類庫(kù)在使用方法上都很類似,參考其文檔都是很容易學(xué)習(xí)的。

    1.2JExcelAPi開發(fā)環(huán)境簡(jiǎn)單配置

    JExcelAPi是一個(gè)開源的項(xiàng)目,可以在官方網(wǎng)站下載其最新版本。在JExcelAPi的官方網(wǎng)站上提供各種版本的下載,例如要下載版本為2.4.2JExcelApi,下載下來(lái)的文件為:

    Jexcelapi-2-4-2.tar.gz,直接解壓這個(gè)壓軸文件即可。

    其中docs目錄下是類庫(kù)參考檔案。Src目錄下是整個(gè)JExcelAPi的源代碼,在src目錄下有demo子目錄,里面是例子代碼,demo中的源代碼對(duì)初學(xué)者來(lái)說(shuō)是最好的教材,參考其中的例程可以實(shí)現(xiàn)其絕大部分功能。

    JExcelAPi這個(gè)目錄下面可以看到jx1.jar文件,這個(gè)文件就是JExcelAPi打包的類庫(kù)文件,如果要在項(xiàng)目中使用JExcelAPi只需要把jx1.jar文件的路徑加入classpath中或項(xiàng)目lib目錄下。

    1.3JSP生成Excel報(bào)表

    在接下講解在JSP中使用JExcelApi生成不同格式的Excel文件.WEB應(yīng)用開發(fā)過(guò)程中,可能會(huì)遇到各種各樣的報(bào)表需求,這些報(bào)表不僅布局格式復(fù)雜,而且數(shù)據(jù)類型也是多種多樣,甚至有些報(bào)表需要在指定的位置顯示圖片。當(dāng)這些報(bào)表需要導(dǎo)出為Excel的時(shí)候,相應(yīng)的的問(wèn)題就會(huì)出現(xiàn),而接下來(lái)要闡述的內(nèi)容就是怎樣使用JExcelApi來(lái)解決這些問(wèn)題。解決任何問(wèn)題的時(shí)候都是從簡(jiǎn)單到復(fù)雜,下面幾個(gè)示例也是按照這個(gè)原則組織的。

    在實(shí)際應(yīng)用開發(fā)中,經(jīng)常需要把指定的數(shù)據(jù)生成Excel文件,并且可以下載生成的Excel文件。在本章的示例中。利用JavaBean生成的Excel文件,在JSP頁(yè)面上調(diào)用這個(gè)JavaBean生成的Excel文件,然后提供下載方式。當(dāng)訪問(wèn)這個(gè)JSP頁(yè)面的時(shí)候可以直接下載生成的Excel文件。

    1. JSP生成簡(jiǎn)單的Excel文件

    假設(shè)下面這種情形,要把表中的內(nèi)容導(dǎo)出為Excel文件。

    學(xué)校

    專業(yè)

    專業(yè)競(jìng)爭(zhēng)力

    清華大學(xué)

    計(jì)算機(jī)專業(yè)

    北京大學(xué)

    法律專業(yè)

    北京理工大學(xué)

    航空專業(yè)

    在表中展示的內(nèi)容格式全是字符串。而且這個(gè)表格的格式也是相當(dāng)簡(jiǎn)單,沒有任何合并的單元格,也沒有顏色的設(shè)置。類似這種表格生成對(duì)應(yīng)的Excel文件是非常容易的,實(shí)現(xiàn)這個(gè)功能的JavaBean代碼如下所示。

    package beans.excel;

     

    import java.io.IOException;

    import java.io.OutputStream;

     

    import jxl.Workbook;

    import jxl.write.Label;

    import jxl.write.WritableCellFormat;

    import jxl.write.WritableSheet;

    import jxl.write.WritableWorkbook;

    import jxl.write.WriteException;

    import jxl.write.biff.RowsExceededException;

     

    public class SimpleExcelWrite {

        public void createExcel(OutputStream os) throws WriteException, IOException

        {

           //創(chuàng)建工作薄

           WritableWorkbook workbook = Workbook.createWorkbook(os);

           //創(chuàng)建新的一頁(yè)

           WritableSheet sheet = workbook.createSheet("First Sheet", 0);

            //創(chuàng)建要顯示的具體內(nèi)容

           Label xuexiao = new Label(0, 0, "學(xué)校");

           sheet.addCell(xuexiao);

           Label zhuanye = new Label(1, 0, "專業(yè)");

           sheet.addCell(zhuanye);

           Label jingzhengli = new Label(2, 0, "專業(yè)競(jìng)爭(zhēng)力");

           sheet.addCell(jingzhengli);

          

           Label qinghua = new Label(0, 1, "清華大學(xué)");

           sheet.addCell(qinghua);

           Label jisuanji = new Label(1, 1, "計(jì)算機(jī)專業(yè)");

           sheet.addCell(jisuanji);

           Label gao = new Label(2, 1, "");

           sheet.addCell(gao);

          

           Label beida = new Label(0, 2, "北京大學(xué)");

           sheet.addCell(beida);

           Label falv = new Label(1, 2, "法律專業(yè)");

           sheet.addCell(falv);

           Label zhong = new Label(2, 2, "");

           sheet.addCell(zhong);

          

           Label ligong = new Label(0, 3, "北京理工大學(xué)");

           sheet.addCell(ligong);

           Label hangkong = new Label(1, 3, "航空專業(yè)");

           sheet.addCell(hangkong);

           Label di = new Label(2, 3, "低");

           sheet.addCell(di);

            //把創(chuàng)建的內(nèi)容寫入到輸出流中,并關(guān)閉輸出流

           workbook.write();

           workbook.close();

           os.close();

        }

    }

     

     

    上面這個(gè)JavaBean中的主要代碼解釋如下。

    WritableWorkbook workbook = Workbook.createWorkbook(os);

    上面這行代碼創(chuàng)建一個(gè)Excel工作區(qū)(WorkBook)。在Excel中,所有的頁(yè)(Sheet)只能在工作區(qū)(WorkBook)中創(chuàng)建。

    WritableSheet sheet = workbook.createSheet("First Sheet", 0);

    上面這行代碼在工作區(qū)(WorkBook)中創(chuàng)建新的一頁(yè)(Sheeet)其中新建的頁(yè)(Sheet)名稱為“First sheet”。這一頁(yè)的屬性是可以進(jìn)行寫操作的。在JExcelAPi中也可以創(chuàng)建只讀的頁(yè)。

    Label xuexiao = new Label(0, 0, "學(xué)校");

    sheet.addCell(xuexiao);

    上面這段代碼創(chuàng)建了一個(gè)單元格,并把這個(gè)單元格添加到指定的頁(yè)中,其中這個(gè)單元格的內(nèi)容是“學(xué)校”位置在第一行第一列,其中第1個(gè)參數(shù)是列坐標(biāo),第2個(gè)參數(shù)是行坐標(biāo),而且兩個(gè)坐標(biāo)都是從0開始計(jì)算。

    workbook.write();

    workbook.close();

    os.close();

     

    3行代碼執(zhí)行的操作是把工作區(qū)中的內(nèi)容寫到輸出流中,然后關(guān)閉工作區(qū),最后關(guān)閉輸出流。

    下面來(lái)看如何在JSP頁(yè)面上調(diào)用這個(gè)JavaBean,并且實(shí)現(xiàn)下載的功能。具體的JSP代碼如下所示。

    <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

    <%@ page import="java.io.*" %>

    <%@ page import="beans.excel.*" %>

    <%

        String fname = "學(xué)校專業(yè)競(jìng)爭(zhēng)力情況";

        OutputStream os = response.getOutputStream();//取得輸出流

        response.reset();//清空輸出流

     

        //下面是對(duì)中文文件名的處理

        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>

     <body> 

     </body>

    </html>

     

     

    上面這個(gè)JSP頁(yè)面實(shí)現(xiàn)的功能是調(diào)用JavaBean生成的Excel文件,并且提供下載。

      String fname = "學(xué)校專業(yè)競(jìng)爭(zhēng)力情況";

    上面這行設(shè)置生成Excel文件的文件名。

    OutputStream os = response.getOutputStream();//取得輸出流

    response.reset();//清空輸出流

    上面兩行代碼取得輸出流,并且清空輸出流的男內(nèi)容。提供給后面生成的Excel文件使用。

    response.setCharacterEncoding("UTF-8");

    fname = java.net.URLEncoder.encode(fname, "UTF-8");

    上面兩行代碼進(jìn)行的操作是中文顯示的處理,上面一行設(shè)置整個(gè)Excel的編碼格式,下面一行設(shè)置Excel文件名的編碼格式。這兩處編碼格式如果不進(jìn)行設(shè)置就會(huì)出現(xiàn)中文亂碼的情況。

    response.setHeader("Content-Disposition", "attachment; filename="+ new String(fname.getBytes("UTF-8"), "GBK") + ".xls");

    response.setContentType("application/msexcel");//定義輸出類型

     

    上面這段代碼實(shí)現(xiàn)了下載的功能。

    SimpleExcelWrite sw = new SimpleExcelWrite();

    sw.createExcel(os);

    上面這段代碼調(diào)用SimpleExcelWrite這個(gè)JavaBean生成Excel文件,這里之所以沒有使用〈jsp:useBean〉標(biāo)簽是因?yàn)樵谶@個(gè)JavaBean中并沒有需要設(shè)置的屬性和用來(lái)獲取的屬性,所以用調(diào)用一般類的方法也是可以的,同樣可以調(diào)用到JavaBean中的方法。

    2.JSP生成各種復(fù)雜數(shù)據(jù)格式的Excel文件

    在上面的示例程序中,數(shù)據(jù)格式是非常簡(jiǎn)單的,僅僅只有字符串這一種格式,下面考慮這樣的情形,現(xiàn)在需要把表11.2中的數(shù)據(jù)導(dǎo)出為Excel文件

    JExcelApi支持?jǐn)?shù)據(jù)格式列表

    數(shù)據(jù)格式

    浮點(diǎn)型

    整型

    布爾型

    日期格式

    數(shù)據(jù)示例

    3.1415926535

    15042699

    true

    2007-7-15

    實(shí)現(xiàn)這個(gè)操作比前一個(gè)例子中的要稍微麻煩一些,需要對(duì)各種數(shù)據(jù)類型進(jìn)行單獨(dú)的設(shè)置,不同的數(shù)據(jù)類型需要用不同的單元格的構(gòu)造方式。生成這個(gè)ExcelJavaBean具體代碼如下所示。

    package beans.excel;

     

    import java.io.IOException;

    import java.io.OutputStream;

    import java.text.SimpleDateFormat;

    import java.util.Calendar;

    import java.util.Date;

     

    import jxl.Workbook;

    import jxl.format.Colour;

    import jxl.write.DateFormats;

    import jxl.write.Label;

    import jxl.write.NumberFormats;

    import jxl.write.WritableCellFormat;

    import jxl.write.WritableSheet;

    import jxl.write.WritableWorkbook;

    import jxl.write.WriteException;

    import jxl.write.Number;

    import jxl.write.Boolean;

    import jxl.write.DateTime;

     

    public class ComplexDataExcelWrite {

        public void createExcel(OutputStream os) throws WriteException, IOException {

           //創(chuàng)建工作薄

           WritableWorkbook workbook = Workbook.createWorkbook(os);

           //創(chuàng)建新的一頁(yè)

           WritableSheet sheet = workbook.createSheet("First Sheet", 0);

     

           //創(chuàng)建要顯示的具體內(nèi)容

           Label formate = new Label(0, 0, "數(shù)據(jù)格式");

           sheet.addCell(formate);

           Label floats = new Label(1, 0, "浮點(diǎn)型");

           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, "數(shù)據(jù)示例");

           sheet.addCell(example);

           //浮點(diǎn)數(shù)據(jù)

           Number number = new Number(1, 1, 3.1415926535);

           sheet.addCell(number);

           //整型數(shù)據(jù)

           Number ints = new Number(2, 1, 15042699);

           sheet.addCell(ints);

           //布爾型數(shù)據(jù)

           Boolean bools = new Boolean(3, 1, true);

           sheet.addCell(bools);

           //日期型數(shù)據(jù)

           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);

           //把創(chuàng)建的內(nèi)容寫入到輸出流中,并關(guān)閉輸出流

           workbook.write();

           workbook.close();

           os.close();

        }

    }

     

     

    這個(gè)程序的思路和前一個(gè)例子基本一樣,不同之處在于各種數(shù)據(jù)類型單元格的處理,這個(gè)在程序的注釋中已經(jīng)寫得很清楚了。具體不同數(shù)據(jù)類型的處理請(qǐng)參考上面的程序代碼。

    這個(gè)JavaBean的調(diào)用方法和上一個(gè)例子一樣,只需要稍微改動(dòng)一下上一個(gè)例子中的JSP文件(SimpleExcelWrite.jsp)即可,所需改動(dòng)的僅僅有下面兩個(gè)地方:

    String fname = "學(xué)校專業(yè)競(jìng)爭(zhēng)力情況";

    把上面這句中的“學(xué)校專業(yè)競(jìng)爭(zhēng)力情況”改為“JExcelApi支持?jǐn)?shù)據(jù)格式列表”。

    SimpleExcelWrite sw = new SimpleExcelWrite();

    把上面這行代碼改為ComplexDataExcelWrite sw=newComplexDataExcelWrite()即可。經(jīng)過(guò)這樣的改動(dòng),就可以調(diào)用上面這個(gè)JavaBean

    3.JSP生成復(fù)雜布局和樣式的Excel文件

    上面的示例程序只是展示了JExcelApi支持的各種數(shù)據(jù)類型,接下來(lái)將要展示JExcelApi對(duì)復(fù)雜的布局和樣式的支持。假設(shè)要把表中的數(shù)據(jù)導(dǎo)出為Excel文件

    JExcelApi支持?jǐn)?shù)據(jù)類型詳細(xì)說(shuō)明

    JExcelApi支持?jǐn)?shù)據(jù)類型詳細(xì)說(shuō)明

    數(shù)據(jù)格式

    浮點(diǎn)型

    整型

    布爾型

    日期格式

    數(shù)據(jù)示例

    3.1415926535

    15042699

    true

    2007-7-15

    在表中,表格的布局發(fā)生了變化,表頭占了5列,高度也明顯大于其他各行,同時(shí)各單元格的樣式也有了變化,采用了不同的字體類型、背景顏色。針對(duì)這樣的表格,在生成Excel文件的時(shí)候就要設(shè)置其布局和顯示的屬性。下面就是這個(gè)JavaBean的具體實(shí)現(xiàn)代碼。

    package beans.excel;

     

    import java.io.IOException;

    import java.io.OutputStream;

    import java.text.SimpleDateFormat;

    import java.util.Calendar;

    import java.util.Date;

     

    import jxl.Workbook;

    import jxl.format.Colour;

    import jxl.format.UnderlineStyle;

    import jxl.write.DateFormats;

    import jxl.write.Label;

    import jxl.write.NumberFormats;

    import jxl.write.WritableCellFormat;

    import jxl.write.WritableFont;

    import jxl.write.WritableSheet;

    import jxl.write.WritableWorkbook;

    import jxl.write.WriteException;

    import jxl.write.Number;

    import jxl.write.Boolean;

    import jxl.write.DateTime;

     

    public class MutiStyleExcelWrite {

        public void createExcel(OutputStream os) throws WriteException, IOException {

           //創(chuàng)建工作薄

           WritableWorkbook workbook = Workbook.createWorkbook(os);

           //創(chuàng)建新的一頁(yè)

           WritableSheet sheet = workbook.createSheet("First Sheet", 0);

     

           //構(gòu)造表頭

           sheet.mergeCells(0, 0, 4, 0);//添加合并單元格

           WritableFont bold = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD);//設(shè)置字體種類和黑體顯示

           WritableCellFormat  titleFormate = new WritableCellFormat (bold);

           titleFormate.setAlignment(jxl.format.Alignment.CENTRE);//單元格中的內(nèi)容水平方向居中

            titleFormate.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);//單元格中的內(nèi)容垂直方向居中

           Label title = new Label(0,0,"JExcelApi支持?jǐn)?shù)據(jù)類型詳細(xì)說(shuō)明",titleFormate);

           sheet.setRowView(0,600,false);//設(shè)置第一行的高度

           sheet.addCell(title);

          

           //創(chuàng)建要顯示的具體內(nèi)容

           WritableFont color = new WritableFont(WritableFont.ARIAL);//選擇字體

           color.setColour(Colour.GOLD);//設(shè)置字體顏色為金黃色

            WritableCellFormat colorFormat = new WritableCellFormat(color);

           Label formate = new Label(0, 1, "數(shù)據(jù)格式",colorFormat);

           sheet.addCell(formate);

           Label floats = new Label(1, 1, "浮點(diǎn)型");

           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, "數(shù)據(jù)示例",colorFormat);

           sheet.addCell(example);

           //浮點(diǎn)數(shù)據(jù)

            WritableFont underline = new WritableFont(WritableFont.ARIAL, WritableFont.DEFAULT_POINT_SIZE,

               WritableFont.NO_BOLD,false,UnderlineStyle.SINGLE);//設(shè)置下劃線

           WritableCellFormat greyBackground = new WritableCellFormat(underline);

           greyBackground.setBackground(Colour.GRAY_25);//設(shè)置背景顏色為灰色

           Number number = new Number(1, 2, 3.1415926535,greyBackground);

           sheet.addCell(number);

           //整型數(shù)據(jù)

           WritableFont boldNumber = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD);//設(shè)置黑體

           WritableCellFormat  boldNumberFomate = new WritableCellFormat (boldNumber);

           Number ints = new Number(2, 2, 15042699,boldNumberFomate);

           sheet.addCell(ints);

           //布爾型數(shù)據(jù)

           Boolean bools = new Boolean(3, 2, true);

           sheet.addCell(bools);

           //日期型數(shù)據(jù)

          

           WritableFont boldDate = new WritableFont(WritableFont.ARIAL, WritableFont.DEFAULT_POINT_SIZE,

                      WritableFont.BOLD,false,UnderlineStyle.SINGLE);//設(shè)置黑體和下劃線

           WritableCellFormat  boldDateFomate = new WritableCellFormat (boldDate,DateFormats.FORMAT1);

           Calendar c = Calendar.getInstance();

           Date date = c.getTime();

           DateTime dt = new DateTime(4, 2, date, boldDateFomate);

           sheet.addCell(dt);

           //把創(chuàng)建的內(nèi)容寫入到輸出流中,并關(guān)閉輸出流

           workbook.write();

           workbook.close();

           os.close();

        }

    }

     

     

    從上面的程序中可以看出JExcelApi設(shè)置格式和樣式的思路,如果需要天加合并單元格只需要在Sheet 上面添加mergeCells即可。而對(duì)單元格的樣式進(jìn)行設(shè)置的時(shí)候,只需要構(gòu)造一個(gè) WritableCellFormat即可,在這個(gè)對(duì)象里面可以進(jìn)行除字體外的各種樣式設(shè)置,如果需要設(shè)置字體,在構(gòu)造WritableCellFormat前就需要構(gòu)造 WritableFont,然后把字體設(shè)置完成的WritableFont對(duì)象作為參數(shù)傳給WritableCellFormat即可。

    下面來(lái)解釋這個(gè)Java Bean的關(guān)鍵代碼。

    sheet.mergeCells(0, 0, 4, 0);//添加合并單元格

    上面這行代碼向頁(yè)(Sheet)里面添加一個(gè)合并單元格,這個(gè)合并單元格的區(qū)域是第一行到第五列。其中第一個(gè)參數(shù)是起始行,第三個(gè)參數(shù)是終止列,第四個(gè)參數(shù)是終止行。

    WritableFont bold = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD);

    上面這行代碼構(gòu)造了一個(gè)字體對(duì)象,其中選擇的字體為ARIAL,字號(hào)大小為10,用黑體顯示。

    WritableCellFormat  titleFormate = new WritableCellFormat (bold);

    上面這行代碼利用前面構(gòu)造的字體對(duì)象生成一個(gè)單元格樣式控制對(duì)象。

    titleFormate.setAlignment(jxl.format.Alignment.CENTRE);//單元格中的內(nèi)容水平方向居中

    titleFormate.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);//單元格中的內(nèi)容垂直方向居中

     

    單元格樣式控制對(duì)象創(chuàng)建以后,就可以在這個(gè)對(duì)象上進(jìn)行各種樣式設(shè)置。上面的兩行代碼就是在前面創(chuàng)建的單元格樣式控制對(duì)象上進(jìn)行樣式設(shè)置。

    Label title = new Label(0,0,"JExcelApi支持?jǐn)?shù)據(jù)類型詳細(xì)說(shuō)明",titleFormate);

    在樣式結(jié)束后,只需要在構(gòu)造單元格的時(shí)候選擇這個(gè)單元格樣式控制對(duì)象即可。上面這行代碼中的titleFormate就是前面已經(jīng)構(gòu)造并設(shè)置樣式的單元格樣式控制對(duì)象。

    這個(gè)程序中其他樣式的設(shè)置思路和這個(gè)基本相同,只是選擇的具體參數(shù)不同。讀者可以仔細(xì)揣摩。

    上面這個(gè)Java Bean的調(diào)用方法和前面兩個(gè)Excel文件生成示例的調(diào)用方法相同,只需要把SimpleExcelWrite.jsp這個(gè)JSP頁(yè)面做如下修改即可。

    String fname = "學(xué)校專業(yè)競(jìng)爭(zhēng)力情況";

    把上面這句中的“學(xué)校專業(yè)競(jìng)爭(zhēng)力情況”改為“JExcelApi支持?jǐn)?shù)據(jù)類型詳細(xì)說(shuō)明”

    SimpleExcelWrite sw = new SimpleExcelWrite();

    把上面這行代碼改為MutiStyleExcelWrite sw=newMutiStyleExcelWrite()即可。

    4.JSP生成帶有圖片的Excel文件

            JExcelApi中,生成帶有圖片的Excel文件非常方便,只需構(gòu)造一個(gè)圖片單元格即可。具體構(gòu)造代碼如下所示。

    WritableImage wi = new WritableImage(0,0,5,0,new File(“resource/123.jpg"));

    上面這段代碼構(gòu)造了一個(gè)圖片單元格,其所占區(qū)域?yàn)榈谝恍械牡谝涣械降谖辶校@里第一個(gè)參數(shù)為起始列,第二個(gè)參數(shù)為起始行,第三個(gè)參數(shù)為終止列,第四個(gè)參數(shù)為終止行,第五個(gè)參數(shù)是所要顯示圖片的文件對(duì)象,其中“resource/123.jpg”是文件的目錄。

    添加圖象單元格的過(guò)程和普通的單元格沒有什么區(qū)別,讀者可以把上面這段代碼加入前面的例子中,正確指定顯示區(qū)域和圖片文件的路徑即可顯示。

     

    11.1.4JSP讀取Excel報(bào)表、

    這樣對(duì)所有的單元格都可以使用同一處理方法進(jìn)行處理。針對(duì)讀取Excel的操作沒有很多內(nèi)容,在這里把邏輯代碼放在JSP頁(yè)面進(jìn)行處理,具體的處理過(guò)程可以參考下面的代碼。

    <%@ 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>

      <body>

      <font size="2">

      <%

          String fileName = "E:/Devolop Tool/Tomcat 5.0/webapps/chapt11/學(xué)校專業(yè)競(jìng)爭(zhēng)力情況.xls";   

          File file = new File(fileName);

             Workbook wb = Workbook.getWorkbook(file);

             Sheet sheet = wb.getSheet(0);

       

          String outPut = "";

     

                  outPut = outPut + "<b>" + fileName + "</b><br>";

                  outPut = outPut + "第一個(gè)sheet的名稱為:" + sheet.getName() + "<br>";

            outPut = outPut + "第一個(gè)sheet共有:"+sheet.getRows()+""+sheet.getColumns()+"<br>";

            outPut = outPut + "具體內(nèi)容如下:<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>

    下面來(lái)解釋這段程序的關(guān)鍵代碼.

    File file = new File(fileName);

    上面這行代碼就是一個(gè)簡(jiǎn)單的文件操作,根據(jù)文件名創(chuàng)建一個(gè)文件對(duì)象.

    Workbook wb = Workbook.getWorkbook(file);

    上面這行代碼從文件流中取得Excel工作區(qū)對(duì)象(WorkBook)

    Sheet sheet = wb.getSheet(0);

    上面這行代碼從工作區(qū)中取得頁(yè)(Sheet),取得這個(gè)對(duì)象的時(shí)候既可以用名稱來(lái)獲得,也可以用序號(hào),在這里我們采用序號(hào),取得第一頁(yè)。

    outPut = outPut + "第一個(gè)sheet的名稱為:" + sheet.getName() + "<br>";

    上面這行代碼取出頁(yè)的名稱,并放入字符串,提供給后面進(jìn)行輸出。

    outPut = outPut + "第一個(gè)sheet共有:"+sheet.getRows()+""+sheet.getColumns()+"<br>";

    上面這行代碼取出頁(yè)的行數(shù)和列數(shù),并放入字符串,提供給后面進(jìn)行輸出。

    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>";

                  }

    上面這段代碼一次取出各行各列的內(nèi)容,并放入字符串,提供給后面進(jìn)行輸出。

    posted on 2012-08-09 16:31 奮斗成就男人 閱讀(7052) 評(píng)論(1)  編輯  收藏 所屬分類: java

    評(píng)論

    # re: Java對(duì)Excel表格的操作[未登錄] 2012-11-26 21:38 aa

    ddfdfd  回復(fù)  更多評(píng)論   

    主站蜘蛛池模板: 亚欧日韩毛片在线看免费网站| 亚洲AV无码乱码国产麻豆穿越| 亚洲成AV人影片在线观看| 成年女人喷潮毛片免费播放| youjizz亚洲| 成人毛片免费播放| 亚洲国产午夜精品理论片在线播放 | 亚洲毛片在线观看| 99视频在线免费| 亚洲高清在线mv| 无码人妻精品中文字幕免费东京热| 亚洲成人福利在线| 国产精品无码免费播放| 亚洲欧美日韩中文字幕一区二区三区| 成年人在线免费看视频| 亚洲狠狠婷婷综合久久| 亚洲AV成人精品日韩一区18p| 无码日韩人妻AV一区免费l| 伊人亚洲综合青草青草久热| 在线看片免费人成视频久网下载 | 国产免费人视频在线观看免费| 国产成人久久精品亚洲小说| 亚洲伊人成无码综合网 | 亚洲中文字幕无码爆乳AV| 热99RE久久精品这里都是精品免费| 亚洲视频免费在线观看| 国产91色综合久久免费分享| 亚洲综合无码无在线观看| 国产一级淫片a视频免费观看| 又硬又粗又长又爽免费看 | 免费人成年轻人电影| 国产精品视频全国免费观看| 亚洲成AV人片在线观看WWW| aⅴ免费在线观看| 亚洲人成未满十八禁网站| 免费v片在线观看无遮挡| 中文字幕免费观看视频| 337p日本欧洲亚洲大胆艺术| 女人被弄到高潮的免费视频| 男女猛烈无遮掩视频免费软件 | 少妇太爽了在线观看免费视频|