public void test() {
try{

HSSFWorkbook wb = new HSSFWorkbook();
    HSSFSheet sheet = wb.createSheet("new sheet");

    // Create a row and put some cells in it. Rows are 0 based.
    HSSFRow row = sheet.createRow((short)0);
    // Create a cell and put a value in it.
    HSSFCell cell = row.createCell((short)0);
    cell.setCellValue(1);

    // Or do it on one line.
    row.createCell((short)1).setCellValue(1.2);
    row.createCell((short)2).setCellValue("This is a string");
    row.createCell((short)3).setCellValue(true);
    row.createCell((short)3).setCellValue("这是中文字符");
    

    // Write the output to a file
    FileOutputStream fileOut = new FileOutputStream("c:/workbook.xls");
    wb.write(fileOut);
    fileOut.close();
}catch(Exception ex){

} }
我写的一列row.createCell((short)3).setCellValue("这是中文字符");
这样就出乱码了,请指教

解决方案 »

  1.   

    //先设置编码
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);//设置值 统一为String
    cell.setCellValue(dataValue);
      

  2.   

    谢谢,我现在的操作系统是XP 英文版的。用楼上的方法还是乱码,我是用Eclipse编译的。
      

  3.   

    我也有这个问题,我是2000  
    用// cell.setCellValue("中文");可以
    但用 row.createCell((short)3).setCellValue("这是中文字符");
    就是乱码
      

  4.   

    jxl写excel
    import jxl.Workbook;
    import jxl.read.biff.BiffException;
    import jxl.Sheet;
    import jxl.write.Label;
    import jxl.Cell;
    import jxl.write.WritableWorkbook;
    import jxl.write.WritableSheet;
    import jxl.write.WriteException;public void exportExcelFile(String outputFile, List dataList) throws Exception
    {

    //创建工作表与sheet的引用
    WritableWorkbook wb = null;
    WritableSheet ws = null;
    //直接根据输出的文件创建工作表对象
    try
    {
    wb = Workbook.createWorkbook(new File(outputFile));
    //创建第一页的sheet
    ws = wb.createSheet("sheet1", 0);
    //循环导出数据
    for (int rowId = 0; rowId < dataList.size(); rowId++)
    {
    //得到对应行的数据列表
    List valueList = (List) dataList.get(rowId);
    //循环每一个单元格
    for (int column = 0; column < valueList.size(); column++)
    {
    //得到对应单元格的值
    String value = (String) valueList.get(column);
    //设置值
    Label label = new Label(column, rowId, value);
    //加到sheet上
    ws.addCell(label);
    }
    }
    //输出到文件
    wb.write();
    //关闭文件
    wb.close();
    }
            catch(Exception e)
            {
               
            }
    }
    poi 写excel
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    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.poifs.filesystem.POIFSFileSystem;public List parseExcelFile( InputStream inputStream ) throws PMSBusinessException
    {
    //设置通用对象列表
    List dataList = new ArrayList();
    List valueList = null;
    //以文件流构造workbook
    HSSFWorkbook workbook = null;
    workbook = new HSSFWorkbook(inputStream);
    int sheetNum = workbook.getNumberOfSheets();
    //得到第一个sheet对象
    HSSFSheet templateSheet = workbook.getSheetAt(1);
    HSSFRow templateRow = templateSheet.getRow(0);
    //得到总行数
    int rowNum = templateSheet.getPhysicalNumberOfRows();
    //得到总列数
    int columnNum = templateSheet.getRow(0).getPhysicalNumberOfCells();
    //循环每一行
    for (int rowId = 0; rowId < rowNum; rowId++)
    {
    //得到第rowId行对象
    HSSFRow hsrow = templateSheet.getRow(rowId);
    //创建一个值列表对象 分别存放每一个字段对应的值
    valueList = new ArrayList();
    //循环每一列
    for (int columnId = 0; columnId < columnNum; columnId++)
    {
    String value = null;
    //得到一个单元格
    if(hsrow == null)
    return dataList;

    HSSFCell cell = hsrow.getCell((short) columnId);
    //取模板第一个单元格
    HSSFCell templateCell = templateRow.getCell((short) columnId);
    //取得列名称
    String columnName = templateCell.getStringCellValue().trim();
    //只有单元格中有值时才做类型判断
    if (cell != null)
    {
    //得到类型
    int cellType = cell.getCellType();
    switch (cellType)
    {
    //如果是空串
    case HSSFCell.CELL_TYPE_BLANK :
    value = "";
    break;
    //如果是布尔型
    case HSSFCell.CELL_TYPE_BOOLEAN :
    value = cell.getBooleanCellValue() ? "TRUE" : "FALSE";
    break;
    //如果是错误型
    case HSSFCell.CELL_TYPE_ERROR :
    value = "#ERR" + cell.getErrorCellValue();
    break;
    //如果是公式型
    case HSSFCell.CELL_TYPE_FORMULA :
    value = cell.getCellFormula();
    break;
    //如果是数字型
    case HSSFCell.CELL_TYPE_NUMERIC :
    //判断一下是否是日期类型
    if (HSSFDateUtil.isCellDateFormatted(cell))
    {
    //转为yyyy-MM-dd格式
    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    value = sdf.format(cell.getDateCellValue());
    }
    //否则是数字
    else
    {

    if ( "编号".equals( columnName )
    || "时限".equals( columnName ) )
    {
    //转为整数的字符串
    value =""+(long)cell.getNumericCellValue();
    }
    //其他全部转为小数型字符串
    else
    {
    value = cell.getNumericCellValue() + "";
    }
    }
    break;
    //字符串型
    case HSSFCell.CELL_TYPE_STRING :
    value = cell.getStringCellValue();
    break;
    //其它
    default :
    value = "Unknown Cell Type: " + cell.getCellType();
    }
    }
    //把转化后的值放入List 这里list中可能放入null 代表没有值
    valueList.add(value);
    }
    }
    //返回通用列表全部为String 类型 或 Null
    return dataList;
    }
      

  5.   

    导出有模板文件的excel
    public void exportStyleFile(String inputFile, String outputFile, List dataList) throws PMSBusinessException
    {
    POIFSFileSystem fs  = null;
    HSSFWorkbook templatewb = null;
    //用模板文件构造poi
     try
    {
    fs = new POIFSFileSystem(new FileInputStream(inputFile));
    //创建模板工作表
    templatewb = new HSSFWorkbook(fs);
    }
    catch (FileNotFoundException e)
    {
    e.printStackTrace(System.out);
    }
    catch (IOException e)
    {
    e.printStackTrace(System.out);
    } //直接取模板第一个sheet对象
    HSSFSheet templateSheet = templatewb.getSheetAt(1);
    //得到模板的第一个sheet的第一行对象 为了得到模板样式
    HSSFRow templateRow = templateSheet.getRow(0);
            //取得Excel文件的总列数
    int columns = templateSheet.getRow((short) 0).getPhysicalNumberOfCells();
    //创建样式数组
    HSSFCellStyle styleArray[] = new HSSFCellStyle[columns];
    //一次性创建所有列的样式放在数组里
    for (int s = 0; s < columns; s++)
    {
    //得到数组实例
    styleArray[s] = templatewb.createCellStyle();
    }
    //循环对每一个单元格进行赋值 这里要求模板的列序与list中的值要一一对应
    //定位行
    for (int rowId = 1; rowId <= dataList.size(); rowId++)
    {
    //依次取第rowId行数据 每一个数据是valueList
    List valueList = (List) dataList.get(rowId - 1);
    //定位列
    for (int columnId = 0; columnId < valueList.size(); columnId++)
    {
    //依次取出对应与colunmId列的值
    //每一个单元格的值
    String dataValue = (String) valueList.get(columnId);
    //取出colunmId列的的style
    //模板每一列的样式
    HSSFCellStyle style = styleArray[columnId];
    //取模板第colunmId列的单元格对象
    //模板单元格对象
    HSSFCell templateCell = templateRow.getCell((short) columnId);
    //创建一个新的rowId行 行对象
    //新建的行对象 
    HSSFRow hssfRow = templateSheet.createRow(rowId);
    //创建新的rowId行 columnId列 单元格对象
    //新建的单元格对象
    HSSFCell cell = hssfRow.createCell((short) columnId);
    //如果对应的模板单元格 样式为非锁定
    HSSFFont font = templatewb.createFont();
    String columnName = templateCell.getStringCellValue().trim();
    //如果是不准修改的列则红色显示字体
    if(columnId==0 || columnId==1 ||columnId== 2 || columnId==3 || columnId == 5 || columnId == 7 || columnId== 13|| columnId==15)
    {
    //设置此列style为非锁定
    //style.setLocked(false);
    font.setColor(HSSFFont.COLOR_RED);
    style.setFont(font);
    //设置到新的单元格上
    cell.setCellStyle(style);
    }
    //否则样式为锁定 普通颜色
    else
    {
    //设置此列style为锁定
    //style.setLocked(true);
    font.setColor(HSSFFont.COLOR_NORMAL);
    style.setFont(font);
    //设置到新单元格上
    cell.setCellStyle(style);
    }
    //设置编码
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    //设置值 统一为String
    cell.setCellValue(dataValue);
    }
    }
    //设置输入流
    FileOutputStream fOut = null;;
    try
    {
    fOut = new FileOutputStream(outputFile);
    //将模板的内容写到输出文件上
    templatewb.write(fOut);
    fOut.flush();
    //操作结束,关闭文件
    fOut.close();
    }
    catch (FileNotFoundException e1)
    {
    e1.printStackTrace(System.out);


    }
      

  6.   

    no格式
    public void exportExcelFile(String outputFile, List dataList) 
    //创建工作表
    HSSFWorkbook workbook = new HSSFWorkbook();
    //创建sheet
    HSSFSheet sheet = workbook.createSheet();
    //循环导出
    for (int rowId = 0; rowId < dataList.size(); rowId++)
    {
    //取出对应行的数据列表对象
    List valueList = (List) dataList.get(rowId);
    //从第0行开始创建
    HSSFRow hsrow = sheet.createRow(rowId);
    //依次写入每一个单元格
    for (int columnId = 0; columnId < valueList.size(); columnId++)
    {
    //得到对应单元格的值
    String dataValue = (String) valueList.get(columnId);
    //创建该行的单元格
    HSSFCell cell = hsrow.createCell((short) columnId);
    //设置编码
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    //设置值
    cell.setCellValue(dataValue);
    }
    }
    //写出到文件
    FileOutputStream os;
    try
    {
    os = new FileOutputStream(outputFile);
    workbook.write(os);
    os.flush();
    //关闭文件流
    os.close();
    }
    catch (FileNotFoundException e)
    {
    e.printStackTrace(System.out);
    }
    }