方法一:
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.Label;
//创建工作簿
WritableWorkbook book=
Workbook.createWorkbook();
WritableSheet
sheet=book.createSheet("sheet名称",0);//创建第一个sheet
//创建单元格
Label labelC = new Label(x, y,
"单元格内容");//x,y为单元格位置
sheet.addCell(labelC);
//合并单元格
sheet.mergeCells(x1,y1,x2,y2);//合并从(x1,y1)到(x2,y2)的单元格
// 写入Exel工作表
book.write();
// 关闭Excel工作薄对象
book.close();
方法二:
import
org.apache.poi.hssf.usermodel.*;
import
org.apache.poi.hssf.util.Region;
//创建工作簿
HSSFWorkbook book = new
HSSFWorkbook();
//创建工作簿
HSSFSheet sheet =
book.createSheet("sheetName"); //如果是英文名称,不需要下行代码
book.setSheetName(0, "sheet名称",
HSSFWorkbook.ENCODING_UTF_16 );
//打印页面设置
HSSFPrintSetup ps =
sheet.getPrintSetup();
sheet.setMargin(HSSFSheet.BottomMargin,( double ) 0.5 );// 页边距
sheet.setMargin(HSSFSheet.LeftMargin,(
double ) 0.1 );
sheet.setMargin(HSSFSheet.RightMargin,(
double ) 0.1 );
sheet.setMargin(HSSFSheet.TopMargin,(
double ) 0.5 );
ps.setLandscape(true); //
打印方向,true:横向,false:纵向
ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE); //纸张
//设置列宽
sheet.setColumnWidth((short)column,(short)width);
//column为列号,width为宽度
//设置字体
HSSFFont cellFont =
book.createFont();
cellFont.secellFontHeightInPoints((short) 24); //字号
cellFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //加粗
//设置单元格格式
HSSFCellStyle cellStyle =
book.createCellStyle();
cellStyle.secellFont(cellFont);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//左右居中
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//上下居中
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
//左边框
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
//右边框
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); //上边框
cellStyle.setWrapText(true);//自动换行
//创建行
HSSFRow rowx = sheet.createRow(x);
rowx.setHeight((short)height);
//设置行高
//创建单元格
HSSFCell cellx_y =
rowx.createCell((short) y);
cellx_y.setEncoding(HSSFCell.ENCODING_UTF_16); //设置单元格字符
cellx_y.setCellValue("单元格内容"); //单元格内容
cellx_y.setCellStyle(cellStyle);
//单元格格式
//合并单元格
sheet.addMergedRegion(new
Region(rowfrom,colfrom,rowto,colto));
//写入Exel工作表
book.write(java.io.OutputStream
stream);
三 乱码:
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);
}
}
Tips:
1.个人认为jxl比poi好用,jxl直接可直接创建单元格,制定位置就行,而poi需先创建行,再建该行中的列,即单元格;
2.网上看到有人问单元格合并后设定的边框怎么就没有了?我也遇到了此问题,原因是合并的单元格没有创建
如cell1(x1,y1)和cell2(x2,y2)合并,我们习惯只创建cell1,并只指定其格式,这样是不对的,需要把与其合并的所有单元格都创建,不要怕麻烦哈,写个循环就行了。