用POI写Excel文件, 发现字体都变成Arial了。 而在中文环境下,默认字体应该是宋体。 我的问题是:POI能否在文件级或sheet级设置自己想要的默认字体。

解决方案 »

  1.   

    应该可以的
    http://poi.apache.org/spreadsheet/quick-guide.html
      

  2.   

    response.setContentType("charset=GBK");
      

  3.   


    下面是用POI HSSF操作Excel文件的方法简述:一, 建立Excel工作薄
    HSSFWorkbook wb = new HSSFWorkbook();二, 建立Excel工作表,每个工作表对应的是Excel界面左下角的一个标签sheet1,sheet2 …
    HSSFSheet sheet1 = wb.createSheet("new sheet");三, 在工作表中建立单元格//首先,建立行对像,行号作为参数传给createRow方法,第一行由0开始计算。
    HSSFRow row = sheet.createRow((short)0);//建单元格
    HSSFCell cell = row.createCell((short)0);//给单元格赋值
    cell.setCellValue(1);//也可同一行内完成建立单元格和赋值
    row.createCell((short)1).setCellValue(1.2);
    row.createCell((short)2).setCellValue("This is a string");
    row.createCell((short)3).setCellValue(true);//数据格式可通过创建单元格值时默认如上面所视
    //也可以创建单元格后调用setCellType指定
    cell.setCellType(CELL_TYPE_NUMERIC);四, 向单元格插入日期值
    HSSFWorkbook wb = new HSSFWorkbook();
    HSSFSheet sheet = wb.createSheet("new sheet");// 可通过Sheet.setSheetName(sheetindex,"SheetName",encoding)设定工作表名// 创建新行并向其加入单元格,行号由0开始。
    HSSFRow row = sheet.createRow((short)0);// 创建一个单元格并向其输入一日期值,但这第一个单元格并非是日期格式。
    HSSFCell cell = row.createCell((short)0);
    cell.setCellValue(new Date());// 我们将这第二个单元格改成日期格式,这需要从工作薄创建一个新的单元格格式,这可// 以只影响当前建立的一个单元格。
    HSSFCellStyle cellStyle = wb.createCellStyle();
    cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
    cell = row.createCell((short)1);
    cell.setCellValue(new Date());
    cell.setCellStyle(cellStyle);五, 各种单元格样式
    HSSFCellStyle cellStyle = wb.createCellStyle();
    //对齐
    cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//带边框
    cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//颜色与填充样式
    cellStyle.setFillBackgroundColor(HSSFColor.AQUA.index);
    cellStyle.setFillPattern(HSSFCellStyle.BIG_SPOTS);
    cellStyle.setFillForegroundColor(HSSFColor.ORANGE.index);
    cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);六, 行高,列宽。
    HSSFWorkbook wb = new HSSFWorkbook();
    HSSFSheet sheet = wb.createSheet("new sheet");
    HSSFRow row = sheet.createRow((short)0);//2是行高值
    row.setRowHeight(2);//3是列号,4是列宽值
    sheet.setColumnWidth(3, 4);貌似是标红这句
      

  4.   

    感谢bobo364的回答,但是它设设置中文文件名乱码问题的。
      

  5.   

    确定可以改!
    这个问题我碰到过:
    HSSFWorkbook hw = new HSSFWorkbook();
    HSSFFont font = hw.getFontAt((short) 0);
    font.setCharSet(HSSFFont.DEFAULT_CHARSET);
    font.setFontHeightInPoints(20);//更改默认字体大小
    font.setFontName("宋体");//
    这段代码满足你要求了不?
      

  6.   

    yucdy,谢谢啊,好使了。非常感谢。
      

  7.   


    这个得通过
    CellStyle style = wb.createCellStyle();
    style.setFont(font);Cell cell1 = row.createCell(0);
    cell1.setCellStyle(style);
    来调用吧?如何在不用调用的情况下(即默认情况下)输出为自己想要的格式呢?
    我现在输出的字体大小为10,如何使之为11呢?