乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > java操作<em>poi</em>的excel表格的线条怎么变为黑色?-poi excel报表

java操作<em>poi</em>的excel表格的线条怎么变为黑色?-poi excel报表

作者:乔山办公网日期:

返回目录:excel表格制作


通过poi导出excel的过程大致是这样的:
     规定单元格的格式
        ↓
      创建单元格
        ↓
     设置单元格的格式
        ↓
     设置数e799bee5baa6e79fa5e98193e59b9ee7ad94362据的格式
        ↓
    把数据存放到单元格中
        ↓
      通过IO流输出

背景POI导出Excel时设置单元格类型为数值类型
  要想存放数值的单元格以数值类型导出,其中最关键的步骤就是上面加粗的两步,设置单元格的格式和向单元格中存放数据。
  核心代码如下:
/**
* 导出Excel-胡玉洋-2015年11月11日
*
*@param outPutParam Excel数据实体,包括要导出的excel标头、列标题、数据等
* */
private void createContentRows(ExcelParam outPutParam) {
HSSFWorkbook workbook=new HSSFWorkbook(); //创建一个Excel文件
// 遍历集合数据,产生数据行
for (int i = 0; i < outPutParam.getContent().size(); i++) {
int rowIndex = i + 2;
HSSFRow contentRow = sheet.createRow(rowIndex);
Map<String, Object> rowDate = outPutParam.getContent().get(i);
//遍历列
for (int j = 0; j < outPutParam.getTitleList().size(); j++) {
Title headTitle = outPutParam.getTitleList().get(j);//获取第i行第j列列标题
String headerName = headTitle.getName();//获取第j列列标识
Object data = rowDate.get(headerName);//获取第i行第j列所放数据
HSSFCellStyle contextstyle =workbook.createCellStyle();
HSSFCell contentCell = contentRow.createCell(j);
Boolean isNum = false;//data是否为数值型
Boolean isInteger=false;//data是否为整数
Boolean isPercent=false;//data是否为百分数
if (data != null || "".equals(data)) {
//判断data是否为数值型
isNum = data.toString().matches("^(-?\\d+)(\\.\\d+)?$");
//判断data是否为整数(小数部分是否为0)
isInteger=data.toString().matches("^[-\\+]?[\\d]*$");
//判断data是否为百分数(是否包含“%”)
isPercent=data.toString().contains("%");
}

//如果单元格内容是数值类型,涉及到金钱(金额、本、利),则设置cell的类型为数值型,设置data的类型为数值类型
if (isNum && !isPercent) {
HSSFDataFormat df = workbook.createDataFormat(); // 此处设置数据格式
if (isInteger) {
contextstyle.setDataFormat(df.getBuiltinFormat("#,#0"));//数据格式只显示整数
}else{
contextstyle.setDataFormat(df.getBuiltinFormat("#,##0.00"));//保留两位小数点
}
// 设置单元格格式
contentCell.setCellStyle(contextstyle);
// 设置单元格内容为double类型
contentCell.setCellValue(Double.parseDouble(data.toString()));
} else {
contentCell.setCellStyle(contextstyle);
// 设置单元格内容为字符型
contentCell.setCellValue(data.toString());
}
}
}
}12345678910111281920212223242526272829303373839404142434445464748495051

  如上,有两个比较重要的点:
  1、先用正则表达式判断数据是否为数值型,如果为数值型,则设置单元格格式为整数或者小数;
  2、然后往单元格中存放数据的时候要设置数据的格式为double类型,如果查看poi的源码HSSFCell.java会发现设置数据的方法如下,所以用setCellValue(double)方法即可。
   

优化
  到了这里,您可能以为万事大吉啊了,其实上面的代码有个陷阱,如果不经过大数据量的测试是发觉不出来的哦~~
  如果数据量大的话,系统可能会报错“The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xls workbook”,原因是style创建的次数太多了,解决这个问题的方法很简单,在循环体外面创建单元格格式contextstyle(即把它当成一个“全局”变量),不要在循环内部创建。
  正确的代码如下:
/**
* 导出Excel-胡玉洋-2015年11月11日
*
*@param outPutParam Excel数据实体,包括要导出的excel标头、列标题、数据等
* */
private void createContentRows(ExcelParam outPutParam) {
HSSFWorkbook workbook=new HSSFWorkbook(); //创建一个Excel文件
HSSFCellStyle contextstyle =workbook.createCellStyle();
// 遍历集合数据,产生数据行
for (int i = 0; i < outPutParam.getContent().size(); i++) {
int rowIndex = i + 2;
HSSFRow contentRow = sheet.createRow(rowIndex);
Map<String, Object> rowDate = outPutParam.getContent().get(i);
//遍历列
for (int j = 0; j < outPutParam.getTitleList().size(); j++) {
Title headTitle = outPutParam.getTitleList().get(j);//获取第i行第j列列标题
String headerName = headTitle.getName();//获取第j列列标识
Object data = rowDate.get(headerName);//获取第i行第j列所放数据
HSSFCell contentCell = contentRow.createCell(j);
Boolean isNum = false;//data是否为数值型
Boolean isInteger=false;//data是否为整数
Boolean isPercent=false;//data是否为百分数
if (data != null || "".equals(data)) {
//判断data是否为数值型
isNum = data.toString().matches("^(-?\\d+)(\\.\\d+)?$");
//判断data是否为整数(小数部分是否为0)
isInteger=data.toString().matches("^[-\\+]?[\\d]*$");
//判断data是否为百分数(是否包含“%”)
isPercent=data.toString().contains("%");
}

//如果单元格内容是数值类型,涉及到金钱(金额、本、利),则设置cell的类型为数值型,设置data的类型为数值类型
if (isNum && !isPercent) {
HSSFDataFormat df = workbook.createDataFormat(); // 此处设置数据格式
if (isInteger) {
contextstyle.setDataFormat(df.getBuiltinFormat("#,#0"));//数据格式只显示整数
}else{
contextstyle.setDataFormat(df.getBuiltinFormat("#,##0.00"));//保留两位小数点
}
// 设置单元格格式
contentCell.setCellStyle(contextstyle);
// 设置单元格内容为double类型
contentCell.setCellValue(Double.parseDouble(data.toString()));
} else {
contentCell.setCellStyle(contextstyle);
// 设置单元格内容为字符型
contentCell.setCellValue(data.toString());
}
}
}
}12345678910111281920212223242526272829303373839404142434445464748495051

Java中设置表格边线颜色:

  1. import com.spire.xls.*;

  2. import java.awt.*;

  3.  

  4. public class AddBorders {

  5.     public static void main(String[] args){

  6.         //Create a workbook instance

  7.         Workbook workbook = new Workbook();

  8.         //Load the Excel file

  9.         workbook.loadFromFile("Sample-SetBorder.xlsx");

  10.  

  11.         //Get the first worksheet

  12.         Worksheet sheet = workbook.getWorksheets().get(0);

  13.  

  14.         //Get the cell range that you want to apply border style

  15.         CellRange cr = sheet.getCellRange(sheet.getFirstRow(), sheet.getFirstColumn(), sheet.getLastRow(), sheet.getLastColumn());

  16.  

  17.         //Apply border style

  18.         cr.getBorders().setLineStyle(LineStyleType.Double);

  19.         cr.getBorders().getByBordersLineType(BordersLineType.DiagonalDown).setLineStyle(LineStyleType.None);

  20.         cr.getBorders().getByBordersLineType(BordersLineType.DiagonalUp).setLineStyle(LineStyleType.None);

  21.         cr.getBorders().setColor(Color.BLUE);

  22.  

  23.         //Save the resultant file

  24.         workbook.saveToFile("SetBorder.xlsx", ExcelVersion.Version2010);

  25.     }

  26. }

参考自e68a84e8a2ad7a686964616f332:网页链接


在POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理。正确的处理方法是先判断单元格的类型是否则NUMERIC类型,然后再判断单元格是否为日期格式,如果是的话,创建一个日期格式,再将单元格的内容以这个日期格式显示出来。如果单元格不是日期格式,那么则直接得到NUMERIC的值就行了。具体代码如下:
if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType()) {
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date d = cell.getDateCellValue();
DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");

给表格指定宽度,然后在样式里面设置文本内容自动换行

style.setWrapText(true);
关于一行拆分几行,什么意思?那不就是把几行合并成一行么,单元格的合并?
这样可以么?

相关阅读

  • 关于java <em>poi</em>导出<em>excel</em>弹

  • 乔山办公网excel表格制作
  • Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档e799bee5baa6e997aee7ad94e78988e69d83330案读和写的功能。这里的方法支持导出excel至项目所在服务器,或导出
关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网