設定底線找了好久。最後找了POI,英語不好啊。。。有試了好幾次才明白。。。。。中國人努力,把技術文檔都變成中文。。。。讓外國人也體驗下咱中文的博大精深。。
這是我項目中想要的結果,不過下面我給了個自己寫的能單獨運行成功的小例子,不懂的可以試試。當然,可以聯絡我。。。
相關代碼:
boolean result=false;// 第一步,建立一個webbook,對應一個Excel檔案HSSFWorkbook wb = new HSSFWorkbook();// 第二步,在webbook中添加一個sheet,對應Excel檔案中的sheetHSSFSheet sheet = wb.createSheet("sheet1");// 設定字型 HSSFFont headfont = wb.createFont(); headfont.setFontName("宋體"); headfont.setFontHeightInPoints((short) 20);// 字型大小 headfont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗 HSSFFont font1 = wb.createFont(); font1.setFontName("宋體"); font1.setFontHeightInPoints((short) 12);// 字型大小 HSSFFont font3 = wb.createFont(); font3.setFontName("宋體"); font3.setFontHeightInPoints((short) 12); font3.setColor(HSSFFont.COLOR_RED); font3.setUnderline((byte)1);//表頭樣式HSSFCellStyle headstyle = wb.createCellStyle(); headstyle.setFont(headfont); headstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右置中 headstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下置中 headstyle.setLocked(true); headstyle.setWrapText(true);// 自動換行 //內文樣式 HSSFCellStyle style = wb.createCellStyle(); style.setFont(font1);HSSFCellStyle style2 = wb.createCellStyle(); style2.setFont(font1); style2.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 建立一個置中格式 style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下邊框 style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左邊框 style2.setBorderRight(HSSFCellStyle.BORDER_THIN);//右邊框 style2.setBorderTop(HSSFCellStyle.BORDER_THIN);//上邊框 // 第三步,在sheet中添加表頭第0行,注意老版本poi對Excel的行數列數有限制short//建立第0行,添加查詢條件sheet.setColumnWidth(0,1000*5);sheet.setColumnWidth(1,1000*5);sheet.setColumnWidth(2,1000*5);sheet.setColumnWidth(3,1000*5);sheet.setColumnWidth(4,1000*5);sheet.setColumnWidth(5,1000*5);sheet.setColumnWidth(6,1000*5);sheet.setColumnWidth(7,1000*5);HSSFRow row = sheet.createRow((int) 0); // 第四步,建立單元格,並設定值表頭 設定表頭置中 List<SssbtzdBean> list1= getSssbtzdById(id); SssbtzdBean bean=list1.get(0); List<SssbtzdmxBean> list=sssbtzdDao.getSssbtzdmxById(bean.getId());row.setHeightInPoints((float)29.25);HSSFCell head=row.createCell((int)0);head.setCellValue(new HSSFRichTextString("傷損裝置通知單("+bean.getId()+")"));head.setCellStyle(headstyle); /** * 合并單元格 * 第一個參數:第一個單元格的行數(從0開始) * 第二個參數:第二個單元格的行數(從0開始) * 第三個參數:第一個單元格的列數(從0開始) * 第四個參數:第二個單元格的列數(從0開始) */ sheet.addMergedRegion(new CellRangeAddress(0,0,0,7)); sheet.addMergedRegion(new CellRangeAddress(1,1,0,7));row = sheet.createRow((int) 2);row.setHeightInPoints((float)19.5);cell = row.createCell((int) 0);string="線別 "+bean.getXb()+" 通知 "+bean.getTzxlcj()+bean.getTzgq();richtext=new HSSFRichTextString(string);richtext.applyFont(0, string.length(), font1);start="線別 ".length();end=start+bean.getXb().length();richtext.applyFont(start, end, font3);start=end+" 通知 ".length();end=start+bean.getTzxlcj().length()+bean.getTzgq().length();richtext.applyFont(start, end, font3);cell.setCellValue(richtext);cell.setCellStyle(style);sheet.addMergedRegion(new CellRangeAddress(2,2,0,7));
這是我自己寫的小例子,匯入個HSSF的jar就能運行
package outExcle;import java.io.FileOutputStream;import java.util.List;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.HSSFRichTextString;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.ss.usermodel.RichTextString;import org.apache.poi.ss.util.CellRangeAddress;public class Outxls {/** * 匯出傷損裝置通知單 * @param id * @return */public static String outExcleSssbtzd (){ boolean result=false;// 第一步,建立一個webbook,對應一個Excel檔案HSSFWorkbook wb = new HSSFWorkbook();// 第二步,在webbook中添加一個sheet,對應Excel檔案中的sheetHSSFSheet sheet = wb.createSheet("sheet1");// 設定字型 HSSFFont headfont = wb.createFont(); headfont.setFontName("宋體"); headfont.setFontHeightInPoints((short) 20);// 字型大小 headfont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗 HSSFFont font1 = wb.createFont(); font1.setFontName("宋體"); font1.setFontHeightInPoints((short) 12);// 字型大小 HSSFFont font3 = wb.createFont(); font3.setFontName("宋體"); font3.setFontHeightInPoints((short) 12); font3.setColor(HSSFFont.COLOR_RED); font3.setUnderline((byte)1);//表頭樣式HSSFCellStyle headstyle = wb.createCellStyle(); headstyle.setFont(headfont); headstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右置中 headstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下置中 headstyle.setLocked(true); headstyle.setWrapText(true);// 自動換行 //內文樣式 HSSFCellStyle style = wb.createCellStyle(); style.setFont(font1);HSSFCellStyle style2 = wb.createCellStyle(); style2.setFont(font1); style2.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 建立一個置中格式 style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下邊框 style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左邊框 style2.setBorderRight(HSSFCellStyle.BORDER_THIN);//右邊框 style2.setBorderTop(HSSFCellStyle.BORDER_THIN);//上邊框 // 第三步,在sheet中添加表頭第0行,注意老版本poi對Excel的行數列數有限制short//建立第0行,添加查詢條件sheet.setColumnWidth(0,1000*5);、//設定寬度sheet.setColumnWidth(1,1000*5);sheet.setColumnWidth(2,1000*5);sheet.setColumnWidth(3,1000*5);sheet.setColumnWidth(4,1000*5);sheet.setColumnWidth(5,1000*5);sheet.setColumnWidth(6,1000*5);sheet.setColumnWidth(7,1000*5);HSSFRow row = sheet.createRow((int) 0); // 第四步,建立單元格,並設定值表頭 設定表頭置中 row.setHeightInPoints((float)29.25);HSSFCell head=row.createCell((int)0);head.setCellValue(new HSSFRichTextString("設定底線"));head.setCellStyle(headstyle); /** * 合并單元格 * 第一個參數:第一個單元格的行數(從0開始) * 第二個參數:第二個單元格的行數(從0開始) * 第三個參數:第一個單元格的列數(從0開始) * 第四個參數:第二個單元格的列數(從0開始) */ sheet.addMergedRegion(new CellRangeAddress(0,0,0,7)); row = sheet.createRow((int) 1);row.setHeightInPoints((float)21);HSSFCell cell = row.createCell((int) 0);String string="內容1:"+"底線1"+"內容2:"+"底線2";HSSFRichTextString richtext = new HSSFRichTextString(string);richtext.applyFont(0, string.length(), font1);//設定統一格式int start="內容1:".length();int end=start+"底線1".length();richtext.applyFont(start, end, font3);//設定“底線”格式start=end+"內容2:".length();end=start+"底線2".length();richtext.applyFont(start, end, font3);cell.setCellValue(richtext);sheet.addMergedRegion(new CellRangeAddress(1,1,0,7));//合并單元格// 第六步,將檔案存到指定位置try{String path;path = ("C:/temp/傷損裝置通知單.xls");FileOutputStream fout = new FileOutputStream(path);wb.write(fout);fout.close();result=true;}catch (Exception e){e.printStackTrace();}if(result) return "成功";return "失敗";}public static void main (String[] args){ System.out.println("匯出C:/temp/傷損裝置通知單.xls------"+outExcleSssbtzd());}}
註:
1.我的例子放在了百度網盤,jar當然也在裡面。。。http://pan.baidu.com/s/1IpXS