设置下划线找了好久。最后找了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