站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题POI写EXCEL时中文乱码

POI写EXCEL时中文乱码

摘要: POI写EXCEL时中文乱码


public void test() {
try{

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet(-#34;new sheet-#34;);

// 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(-#34;This is a string-#34;);
row.createCell((short)3).setCellValue(true);
row.createCell((short)3).setCellValue(-#34;这是中文字符-#34;);


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

}

}


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


//先设置编码
cell.setEncoding(HSSFCell.ENCODING_UTF_16);

//设置值 统一为String
cell.setCellValue(dataValue);


谢谢,我现在的操作系统是XP 英文版的。

用楼上的方法还是乱码,我是用Eclipse编译的。


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


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(-#34;sheet1-#34;, 0);
//循环导出数据
for (int rowId = 0; rowId -#60; dataList.size(); rowId++)
{
//得到对应行的数据列表
List valueList = (List) dataList.get(rowId);
//循环每一个单元格
for (int column = 0; column -#60; 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 -#60; rowNum; rowId++)
{
//得到第rowId行对象
HSSFRow hsrow = templateSheet.getRow(rowId);
//创建一个值列表对象 分别存放每一个字段对应的值
valueList = new ArrayList();
//循环每一列
for (int columnId = 0; columnId -#60; 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 = -#34;-#34;;
break;
//如果是布尔型
case HSSFCell.CELL_TYPE_BOOLEAN :
value = cell.getBooleanCellValue() ? -#34;TRUE-#34; : -#34;FALSE-#34;;
break;
//如果是错误型
case HSSFCell.CELL_TYPE_ERROR :
value = -#34;#ERR-#34; + 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(-#34;yyyy-MM-dd-#34;);
value = sdf.format(cell.getDateCellValue());
}
//否则是数字
else
{

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



导出有模板文件的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 -#60; columns; s++)
{
//得到数组实例
styleArray[s] = templatewb.createCellStyle();
}
//循环对每一个单元格进行赋值 这里要求模板的列序与list中的值要一一对应
//定位行
for (int rowId = 1; rowId -#60;= dataList.size(); rowId++)
{
//依次取第rowId行数据 每一个数据是valueList
List valueList = (List) dataList.get(rowId - 1);
//定位列
for (int columnId = 0; columnId -#60; 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);

}
}


no格式
public void exportExcelFile(String outputFile, List dataList)
//创建工作表
HSSFWorkbook workbook = new HSSFWorkbook();
//创建sheet
HSSFSheet sheet = workbook.createSheet();
//循环导出
for (int rowId = 0; rowId -#60; dataList.size(); rowId++)
{
//取出对应行的数据列表对象
List valueList = (List) dataList.get(rowId);
//从第0行开始创建
HSSFRow hsrow = sheet.createRow(rowId);
//依次写入每一个单元格
for (int columnId = 0; columnId -#60; 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);
}
}


↑返回目录
前一篇: java 编写的判别素数的代码,但是不知道开根的函数
后一篇: java新手,有一问题搞不定,晕啊!