功能:写入/读取Excle,设置打印样式排版,锁定列与行,设置打印标题,给Excle加密。
JXL的打印设置在jxl.SheetSettings这个类中,我们可以通过方法Sheet(或者WritableSheet)#getSettings()获取。
1.页面
1.1方向
SheetSetting#setOrientation(PageOrientation po);
参数: PageOrientation#LANDSCAPE 横向打印
PageOrientation# PORTRAIT 纵向打印
1.2缩放
1.2.1缩放比例(A) SheetSetting #setScaleFactor (int);百分比形式
1.2.2调整(F)
页宽 SheetSetting #setFitWidth(int);
页高 SheetSetting #setFitHeight(int);
1.3纸张大小(Z) SheetSetting #setPaperSize (PaperSize);
纸张大小的定义说明参见PaperSize类中的常量。
1.4起始页码(R) SheetSetting #setPageStrart(int);[默认状态]
2页面距
2.1上(T) SheetSetting # setTopMargin (double);
2.2下(B) SheetSetting # setBottomMargin (double);
2.3左(L) SheetSetting # setLeftMargin (double);
2.4右(R) SheetSetting # setRightMargin (double);
2.5页眉(A) SheetSetting #setHeaderMargin(double);
2.6页脚(F) SheetSetting #setFooterMargin(double);
2.7居中方式
2.7.1水平(Z) SheetSetting # setHorizontalCentre (boolean);
2.7.2垂直(V) SheetSetting #setVerticallyCenter(boolean);
3页眉/页脚
3.1页眉SheetSetting # setHeader(HeaderFooter);
说明:
对于HeaderFooter的设置,首先确定页眉的位置(左、中、右),通过HeaderFooter#getCentre()(或者getLeft()、getRight())方法获取HeaderFooter.Contents类,之后对这个类的属性进行操作。
下面简单介绍几个常用方法:
设置字号:Contents#setFontSize(int)
设置字体:Contents#setFontName(String)
设置内容:Contents# append(String),还有appendDate()当前日期等等,具体参考Contents类说明
3.2页脚SheetSetting # setFooter(HeaderFooter);
说明同上
4工作表
4.1打印区域
SheetSettings #setPrintArea(firstCol, firstRow, lastCol, lastRow)
4.2打印标题
SheetSettings#setPrintTitles (firstRow,lastRow,firstCol,lastCol);
SheetSettings#setPrintTitlesCol(firstCol,lastCol)
SheetSettings#setPrintTitlesRow(firstRow,lastRow)
======================================= 引用来自互联网 end ===============================================
======================================= 自己写的Demo ========================================
DEMO
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
package
finance.barcode;
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
import
static
jxl.format.PaperSize.getPaperSize;
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
import
include.nseer_db.nseer_db;
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.InputStream;
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
import
jxl.CellView;
import
jxl.HeaderFooter;
import
jxl.Workbook;
import
jxl.format.Alignment;
import
jxl.format.Border;
import
jxl.format.BorderLineStyle;
import
jxl.format.Colour;
import
jxl.format.PageOrientation;
import
jxl.format.PaperSize;
import
jxl.format.VerticalAlignment;
import
jxl.write.Label;
import
jxl.write.NumberFormats;
import
jxl.write.WritableCellFormat;
import
jxl.write.WritableFont;
import
jxl.write.WritableSheet;
import
jxl.write.WritableWorkbook;
import
jxl.write.WriteException;
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
/** */
/**
*
* @author Solitary
* @author xing5156@gmail.com
*
*/
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
public
class
BarToExcle
extends
nseer_db
{
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
/** *//** *********创建字体**************** */
public WritableFont BlodFont ; // 粗体
public WritableFont NormalFont ; // 普通字体
public WritableFont BarCodeFont ; // 条形码字体
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
/** *//** ************以下设置几种格式的单元格属性************ */
public WritableCellFormat wcf_header ; // 标题样式
public WritableCellFormat wcf_left ; // 用于正文左
public WritableCellFormat wcf_barcode ; // 用于条形码格式
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
public BarToExcle(String db)
{
super(db) ;
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
/** *//** ********* 初始化字体 **************** */
BlodFont = new WritableFont(WritableFont.ARIAL, 20, WritableFont.BOLD ) ;
NormalFont = new WritableFont(WritableFont.ARIAL, 15);
BarCodeFont = new WritableFont(WritableFont.ARIAL, 15, WritableFont.BOLD);
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
try
{
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
/** *//** ********* 初始化单元格属性 **************** */
// 初始化标题样式
wcf_header = new WritableCellFormat(BlodFont, NumberFormats.TEXT) ; // 实例化单元格格式对象(标题、居中)
wcf_header.setBorder(Border.ALL, BorderLineStyle.THIN) ; // 线条
wcf_header.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcf_header.setAlignment(Alignment.CENTRE); // 水平对齐
wcf_header.setBackground(Colour.GRAY_25) ; // 背景颜色
wcf_header.setWrap(true); // 是否换行
// 用于正文左
wcf_left = new WritableCellFormat(NormalFont); // 实例化单元格格式对象(正文、左对齐)
wcf_left.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
wcf_left.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcf_left.setAlignment(Alignment.LEFT);
wcf_left.setLocked(false) ; // 设置锁定,还得设置SheetSettings启用保护和设置密码
wcf_left.setWrap(true); // 是否换行
// 用于条形码格式
wcf_barcode = new WritableCellFormat(BarCodeFont); // 实例化单元格格式对象(第一列、条形码)
wcf_barcode.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
wcf_barcode.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcf_barcode.setAlignment(Alignment.CENTRE);
wcf_barcode.setLocked(true) ; // 设置锁定,还得设置SheetSettings启用保护和设置密码
wcf_barcode.setWrap(true); // 是否换行
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
} catch (WriteException e)
{
e.printStackTrace();
}
}
// 创建Excle及工作表
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
public int createExcle(StringBuffer buf)
{
String barCodes[] = null ;
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
try
{
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
/** *//** ********** 创建工作薄 ********** **/
WritableWorkbook workbook = Workbook.createWorkbook(new File("d:" + File.separator + "barcode.xls")) ;
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
/** *//** ********** 创建工作表 ********** **/
WritableSheet sheet = workbook.createSheet("条形码", 0) ;
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
/** *//** ********* 打印属性 **************** */
sheet.getSettings().setOrientation(PageOrientation.LANDSCAPE) ; // 设置为横向打印
sheet.getSettings().setPaperSize(PaperSize.A4) ; // 设置纸张
sheet.getSettings().setFitHeight(297) ; // 打印区高度
sheet.getSettings().setFitWidth(210) ; // 打印区宽度
// 设置列宽
sheet.setColumnView(0, 10); // 第1列
sheet.setColumnView(1, 30); // 第2列
sheet.setColumnView(2, 15);
sheet.setColumnView(3, 15);
sheet.setColumnView(4, 30);
sheet.setColumnView(5, 40);
// 设置边距
sheet.getSettings().setTopMargin(0.5) ;
sheet.getSettings().setBottomMargin(0.3) ;
sheet.getSettings().setLeftMargin(0.1) ;
sheet.getSettings().setRightMargin(0.1) ;
// 设置页脚
sheet.getSettings().getFooter().getCentre().appendPageNumber() ; // 为页脚添加页数
sheet.getSettings().setFooterMargin(0.07) ; // 设置页脚边距(下)
// 设置保护,并加密码 锁定的Cell才会起作用
sheet.getSettings().setProtected(true) ; // 启用保护
sheet.getSettings().setPassword("xing5156") ; // 设置保护密码
// 设置打印标题行
sheet.getSettings().setPrintHeaders(true) ; // 启用打印头信息
sheet.getSettings().setPrintTitlesRow(0, 0) ; // 设置标题行
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
/** *//** *********插入标题内容**************** */
sheet.addCell(new Label(0, 0, "条码", this.wcf_header));
sheet.addCell(new Label(1, 0, "公司", this.wcf_header));
sheet.addCell(new Label(2, 0, "部门", this.wcf_header));
sheet.addCell(new Label(3, 0, "姓名", this.wcf_header));
sheet.addCell(new Label(4, 0, "类型", this.wcf_header));
sheet.addCell(new Label(5, 0, "描述", this.wcf_header));
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
barCodes = buf.toString().split("◎") ;
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
for(int i = 0, y = 1; i < barCodes.length; i++, y++)
{
sheet.setRowView(y, 400) ;
sheet.addCell(new Label(0, y, barCodes[i], this.wcf_barcode)) ;
sheet.addCell(new Label(1, y, "", this.wcf_left)) ;
sheet.addCell(new Label(2, y, "", this.wcf_left)) ;
sheet.addCell(new Label(3, y, "", this.wcf_left)) ;
sheet.addCell(new Label(4, y, "", this.wcf_left)) ;
sheet.addCell(new Label(5, y, "", this.wcf_left)) ;
}
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
/** *//** **********以上所写的内容都是写在缓存中的,下一句将缓存的内容写到文件中******** */
workbook.write();
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
/** *//** *********关闭文件************* */
workbook.close();
System.out.println("导出成功");
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
} catch (Exception e)
{
System.out.println("在输出到EXCEL的过程中出现错误,错误原因:" + e.toString());
}
return barCodes.length ;
}
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
/** *//**
* 构建Workbook对象, 将内容读取到内存中再更新到原来文件中
* 最后关闭写入操作来完成文件更新
* @param buf 该对象中包含(11AA◎55BC◎523A)类似的数据,以◎拆分
* @return 返回本次更新条数
*/
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
public int updateExcle(StringBuffer buf) throws Exception
{ // 更新Excle
File file = new File("d:" + File.separator + "barcode.xls") ;
Workbook wb = null;
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
if(file.exists())
{
wb = Workbook.getWorkbook(file);
WritableWorkbook wwb = Workbook.createWorkbook(file, wb);
// 读取第一张工作表
WritableSheet sheet = wwb.getSheet(0) ;
int count = sheet.getRows() ;
String barCodes[] = buf.toString().split("◎") ;
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
for(int i = count , y = 0; y < barCodes.length; y++ , i++)
{
sheet.setRowView(i, 400) ;
sheet.addCell(new Label(0, i, barCodes[y], this.wcf_barcode)) ;
sheet.addCell(new Label(1, i, "", this.wcf_left)) ;
sheet.addCell(new Label(2, i, "", this.wcf_left)) ;
sheet.addCell(new Label(3, i, "", this.wcf_left)) ;
sheet.addCell(new Label(4, i, "", this.wcf_left)) ;
sheet.addCell(new Label(5, i, "", this.wcf_left)) ;
}
wwb.write() ;
wwb.close() ;
wb.close() ;
System.out.println("更新完成!") ;
return barCodes.length ;
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
} else
{
return createExcle(buf) ;
}
}
// 测试
// public static void main(String args[]) {
// StringBuffer buf = new StringBuffer() ; // 测试数据
// buf.append("56KF").append("◎").append("12AA").append("◎").append("23GH").append("◎").append("55JJ") ;
// try {
// BarToExcle bte = new BarToExcle() ;
// bte.updateExcle(buf) ;
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
}
参考地址:http://www.blogjava.net/xing5156/archive/2011/11/18/364221.html