poi複雜excel的實現,poi複雜excel實現

來源:互聯網
上載者:User

poi複雜excel的實現,poi複雜excel實現

一:前言

  最近幫一個朋友做excel的匯出功能,對於我來說還是挺頭疼,我看了下表格樣式,對於我來說還是挺頭疼的,想當年耗子剛剛出社會的時候做的第一份工作,第一份任務就是把把word轉換為html,在這個過程中,嘗試了太多方式,但是並不能保證所有的都能轉換成功,複雜的word轉換,依然會造成錯亂。excel的匯出我也還沒去做過,設計到儲存格的合并,我去看了看官方文檔,其實也沒看出什麼名堂,然後就在網上尋找了,下面記錄下自己踩的坑吧,其實沒用多久時間,從晚上八點開始做,三個小時完成,但是這之間做了很多實驗。

二:內容

  先說網上搜尋的結果,我搜了"hssfrow 合併儲存格",找到了兩篇文章結合

    (1):http://dacoolbaby.iteye.com/blog/1630957

    (2):http://blog.csdn.net/hehexiaoyou/article/details/37873131

先說我的測試,我把(1)中的代碼弄到本地跑,但是一直報錯,主要是

  

   //表示合并B2,B3              sheet.addMergedRegion(new Region(                          1, //first row (0-based)                           (short)1, //first column  (0-based)                            2, //last row (0-based)                        (short)1  //last column  (0-based)                    ));    

主要是紅色這個類,我查閱了下文檔,並結合了(2)做了修改,貼上代碼

package com.mouse.moon.frepoi;import java.io.FileOutputStream;import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel.HSSFFont;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.hssf.util.HSSFColor;import org.apache.poi.ss.util.CellRangeAddress;//測試複雜的儲存格合并public class TestFreMergedCells {    public static void main(String[] args) throws IOException {                HSSFWorkbook wb = new HSSFWorkbook();                     HSSFSheet sheet = wb.createSheet("new sheet");                     HSSFRow row = sheet.createRow(0);                     HSSFCell cell = row.createCell(0);                  //HSSFRow row = sheet.createRow(0);                     //HSSFCell cell = row.createCell(1);   cell.setCellValue("value");  這個代表設定值為(0,1)第1行第二列                //設定值是(0,0)代表第1行第1列,如果你想到的是我既然合并了第一列的第一行和第二行,我是否可以設定(1,0,                //你可以測試下,這個顯然是不行的                cell.setCellValue("第一行第二行合并,第一列");                  sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0));                                //合并第二列的第一行第二行                sheet.addMergedRegion(new CellRangeAddress(0, 1, 1, 1));                                //1.產生字型對象                  HSSFFont font = wb.createFont();                  font.setFontHeightInPoints((short) 10);                  font.setFontName("新宋體");                  font.setColor(HSSFColor.BLUE.index);                  font.setBoldweight((short) 0.8);                  //2.產生樣式對象                  HSSFCellStyle style = wb.createCellStyle();                  style.setAlignment(HSSFCellStyle.ALIGN_CENTER);                  style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);                  style.setFont(font); //調用字型樣式對象                  style.setWrapText(true);                  //增加表格邊框的樣式 例子                 style.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);                 style.setBorderLeft(HSSFCellStyle.BORDER_DOUBLE);                 style.setTopBorderColor(HSSFColor.GOLD.index);                 style.setLeftBorderColor(HSSFColor.PLUM.index);                                 //3.儲存格應用樣式                  cell.setCellStyle(style);                  //行:合并第一行,第二行,第三行                //列說明:列也是從0開始的,0代表第一列;                //列:合并第五列,第六列,第七列,第八列,第九列                HSSFRow rowOther = sheet.createRow(0);                  HSSFCell cellOther = rowOther.createCell(4);                cellOther.setCellValue("多行多列合并");                sheet.addMergedRegion(new CellRangeAddress(0, 2, 4, 9));                //一下代碼錶示在D4 cell 插入一段字串                  HSSFRow row2 = sheet.createRow(3);                  HSSFCell cell2 = row2.createCell(3);                   cell2.setCellValue("只是一個資料而已");                         // Write the output to a file                      FileOutputStream fileOut = new FileOutputStream("/Mouse/poi/test.xls");                      wb.write(fileOut);                      fileOut.close();                  }         }

做下簡單的說明,其實自己測試也能發現,那麼就是對於合併儲存格設定資料的問題。

 HSSFRow rowOther = sheet.createRow(0);   HSSFCell cellOther = rowOther.createCell(4); cellOther.setCellValue("多行多列合并"); sheet.addMergedRegion(new CellRangeAddress(0, 2, 4, 9));

比如這個建立第1行(0代表第1行),第5(4代表第5列)列,下面合并了第一到第三行,第5列到第19列,那麼我設定值的時候只能設定座標為(0,4)的,如果你改為如下:

HSSFRow rowOther = sheet.createRow(1);  HSSFCell cellOther = rowOther.createCell(4);cellOther.setCellValue("多行多列合并");sheet.addMergedRegion(new CellRangeAddress(0, 2, 4, 9));

此時的賦值是第2行,第五列,其實也是在合并的儲存格內,但是最後生存的表格確是沒資料的。

我做的表頭是動態產生的,行也是動態,最後匯出的example如

三:總結

  其實解決一個問題,只要找到了門路,然後,自己冷靜的去嘗試,去找文檔,很多問題都不是自己想象的那麼困難。好久沒寫部落格了,其實有些,只是一直放在草稿箱的,最近應該會堅持寫完發出來了。努力,這一年努力,多看書,計劃照常進行。GO。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.