HSSF 字体下划线

设置下划线找了好久。最后找了POI,英语不好啊。。。有试了好几次才明白。。。。。中国人努力,把技术文档都变成中文。。。。让外国人也体验下咱中文的博大精深。。大笑

这是我项目中想要的结果,不过下面我给了个自己写的能单独运行成功的小例子,不懂的可以试试。当然,可以联系我。。。


相关代码:

boolean result=false;
		// 第一步,创建一个webbook,对应一个Excel文件
		HSSFWorkbook wb = new HSSFWorkbook();
		// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
		HSSFSheet 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));
	  
		row = sheet.createRow((int) 1);//设置下划线代码部分
		row.setHeightInPoints((float)21);
		HSSFCell cell = row.createCell((int) 0);
		String string="班组 "+bean.getBz()+"   仪器串号  "+bean.getYqch()+"   发现人 "+bean.getFxr()+"   复核人 "+bean.getFhr()+".";
		HSSFRichTextString richtext = new HSSFRichTextString(string);
		richtext.applyFont(0, string.length(), font1);
		int start="班组 ".length();
		int end=start+bean.getBz().length();
		richtext.applyFont(start, end, font3);
		
		start=end+"   仪器串号  ".length();
		end=start+bean.getYqch().length();
		richtext.applyFont(start, end, font3);
		
		start=end+"   发现人 ".length();
		end=start+bean.getFxr().length();
		richtext.applyFont(start, end, font3);
		
		start=end+"   复核人 ".length();
		end=start+bean.getFhr().length();
		richtext.applyFont(start, end, font3);
		cell.setCellValue(richtext);
		cell.setCellStyle(style);
		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文件中的sheet
		HSSFSheet 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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值