JAVA操作EXCEL

POI

POI 是针对微软OFFICE操作的一款JAVA API可以操作Word,Excel,PPT.
HSSF提供读写Microsoft Excel XLS格式档案的功能。
HWPF提供读写Microsoft Word DOC格式档案的功能。
HSLF提供读写Microsoft PowerPoint格式档案的功能。
POI读取Excel

//读取EXCEL文件
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filePath));
//加载EXCEL文件
HSSFWorkbook wb = new HSSFWorkbook(fs);
//获取指定的Sheet
HSSFSheet sheet = wb.getSheetAt(0);
//HSSFSheet sheet = wb.getSheet("sheet1");
//获取指定的行
HSSFRow row = sheet.getRow(0);
//获取指定的列
HSSFCell cell = row.getCell(0);
//获取列中的值
String message = cell.getStringCellValue();

POI写入EXCEL

//创建Workbook
HSSFWorkbook wb = new HSSFWorkbook();
//创建sheet
HSSFSheet sheet= wb.createSheet('sheet1');

/**
 *创建摘要
*/
wb.createInformationProperties();//创建文档信息
DocumentSummaryInformation dsi=wb.getDocumentSummaryInformation();//摘要信息
dsi.setCategory("***");
dsi.setManager("***");
dsi.setCompany("***");
SummaryInformation si = wb.getSummaryInformation();//摘要信息
si.setSubject("---");//主题
si.setTitle("---");//标题
si.setAuthor("---");//作者
si.setComments("---");//备注
/**
 *创建行
*/
//创建第一行
Row row= wb.createRow((short)0);
//创建的一行的第一列
Cell cell= row.createCell(0);
//给第一行的第一列赋值
cell.setCellValue("hello");

/**
 *创建批注
*/
HSSFPatriarch patr = sheet.createDrawingPatriarch();
HSSFClientAnchor anchor = patr.createAnchor(0, 0, 0, 0, 5, 1, 8,3);//创建批注位置
HSSFComment comment = patr.createCellComment(anchor);//创建批注
comment.setString(new HSSFRichTextString("-----"));//设置批注内容
comment.setAuthor("---");//设置批注作者
comment.setVisible(true);//设置批注默认显示
cell.setCellComment(comment);//把批注赋值给单元格

/**
 *设置页眉和页脚
*/
HSSFHeader header =sheet.getHeader();//得到页眉
header.setLeft("---");
header.setRight("---");
header.setCenter("---");
HSSFFooter footer =sheet.getFooter();//得到页脚
footer.setLeft("---");
footer.setRight("---");
footer.setCenter("---");

/**
 *设置列样式
*/
CellStyle style = wb.createCellStyle();
//设置日期样式
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
//style.setDataFormat(wb.createDataFormat().getFormat("0.00%"));//自定义样式
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
style.setWrapText(true);//自动换行
style.setIndention((short)5);//缩进
style.setRotation((short)60);//文本旋转,这里的取值是从-90到90,而不是0-180度。
style.setBorderTop(HSSFCellStyle.BORDER_DOTTED);//上边框
style.setBorderBottom(HSSFCellStyle.BORDER_THICK);//下边框
style.setBorderLeft(HSSFCellStyle.BORDER_DOUBLE);//左边框
style.setBorderRight(HSSFCellStyle.BORDER_SLANTED_DASH_DOT);//右边框
style.setTopBorderColor(HSSFColor.RED.index);//上边框颜色
style.setBottomBorderColor(HSSFColor.BLUE.index);//下边框颜色
style.setLeftBorderColor(HSSFColor.GREEN.index);//左边框颜色
style.setRightBorderColor(HSSFColor.PINK.index);//右边框颜色
style.setFillForegroundColor(HSSFColor.GREEN.index);//设置图案颜色
style.setFillBackgroundColor(HSSFColor.RED.index);//设置图案背景色
style.setFillPattern(HSSFCellStyle.SQUARES);//设置图案样式

/**
 *设置字体
 */
 HSSFFont font = wb.createFont();
font.setFontName("华文行楷");//设置字体名称
font.setFontHeightInPoints((short)28);//设置字号
font.setColor(HSSFColor.RED.index);//设置字体颜色
font.setUnderline(FontFormatting.U_SINGLE);//设置下划线
font.setTypeOffset(FontFormatting.SS_SUPER);//设置上标下标
font.setStrikeout(true);//设置删除线
style.setFont(font);
/**
 *合并单元格
 */
 CellRangeAddress region=new CellRangeAddress(firstRow, lastRow, firstCol, lastCol);
 sheet.addMergedRegion(region);
/**
  设置sheet的属性
*/
sheet.setColumnWidth(1, 31 * 256);//设置第一列的宽度是31个字符宽度
row.setHeightInPoints(50);//设置行的高度是50个点
wb.setActiveSheet(0);//设置默认工作表
wb.setSheetName(0, "sheet1");//重命名工作表
sheet.setZoom(1,2);//50%显示比例
sheet.setDisplayGridlines(false);//隐藏Excel网格线,默认值为true
sheet.setGridsPrinted(true);//打印时显示网格线,默认值为false

/**
 *生成下拉菜单
 */
CellRangeAddressList regions = new CellRangeAddressList(0, 65535,0, 0);//在第一列生成下拉菜单
DVConstraint constraint =DVConstraint.createExplicitListConstraint(new String[] { "C++","Java", "C#" });
HSSFDataValidation dataValidate = new HSSFDataValidation(regions,constraint);
sheet.addValidationData(dataValidate);

/**
 *生成超链接
 */
 CreationHelper createHelper = workbook.getCreationHelper();
Hyperlink link =createHelper.createHyperlink(Hyperlink.LINK_URL);
link.setAddress("http://poi.apache.org/");
cell.setHyperlink(link);
FileOutputStream fos = new FileOutputStream(filePath);
wb.write(fos);
fos.close();

JXL

JXL是一个专门针对Excel的API,并不支持对Word和PPT的操作。它是在POI基础上进一不包装,从性能上来说JXL更好。
JXL读取EXCEL

//选取Excel文件得到工作薄Workbook
Workbook workbook = Workbook.getWorkbook(new File(filePath));
//读取第一个sheet
Sheet sheet = workbook.getSheet(0);
//获取指定的单元格 单获取的列不存在时会抛出空指针异常
Cell cell = sheet.getCell(0,0);
//把单元格中的信息以字符的形式读取出来
String str = cell.getContents();
//字符单元格
if (cell.getType() == CellType. LABEL) 
{ 
   LabelCell lc = (LabelCell) cell; 
   String str = lc. getString();
}
if (cell.getType() == CellType. DATE) 
{ 
   DateCell dc = (DateCell) cell; 
   Date date= dc. getDate();
}

if (cell.getType() == CellType.NUMBER) 
{ 
   NumberCell nc = (NumberCell) cell; 
   double num= nc.getValue();
}
workbook.close();

JXL写EXCEL

//方法一
//创建可写入的Excel工作薄
WritableWorkbook wwb = Workbook.createWorkbook(new File(filePath));
//方法二
//将WritableWorkbook直接写入到输出流
OutputStream os = new FileOutputStream(filePath);
WritableWorkbook wwb = Workbook.createWorkbook(os);
WritableSheet ws = wwb.createSheet("sheet1", 0);//创建sheet
//添加文本类单元格
Label label = new Label(0, 0, "---");
ws.addCell(label);
//添加设置样式了的文本
WritableFont wf = new WritableFont(WritableFont.TIMES, 16, WritableFont.BOLD, true);
//设置文本的颜色
//WritableFont wfc = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD, //false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED);
WritableCellFormat wcf = new WritableCellFormat(wf);
label1 = new Label(0, 1, "---", wcf);
ws.addCell(label1);

//添加数字
NumberFormat nf = new NumberFormat("#.##");
WritableCellFormat wcfn = new WritableCellFormat(nf);
Number numC = new Number(0, 2, 0.0002, wcfn);
ws.addCell(numC);

/添加日期
DateFormat df = new DateFormat("dd MM yyyy hh:mm:ss");
WritableCellFormat wcfd = new WritableCellFormat(df);
DateTime labelD = new DateTime(0, 3, new Date(), wcfd);
ws.addCell(labelD);
//表示将从第x+1列,y+1行到m+1列,n+1行合并
ws.mergeCells(int x,int y,int m,int n);

//添加单元格样式
WritableFont wfont = new WritableFont(WritableFont.createFont("楷书"), 20);
WritableCellFormat wc = new WritableCellFormat(wfont);
wc.setAlignment(Alignment.CENTRE); // 设置居中
wc.setBorder(Border.ALL, BorderLineStyle.THIN); // 设置边框线
wc.setBackground(jxl.format.Colour.RED); // 设置单元格的背景颜色
labelS = new Label(0, 4, "---", wc);
ws.addCell(labelS);
wwb.write();
wwb.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值