Java_excel文件(三)单元格操作
Java 操作 excel 文件 api 微软 windows 换行 单元格长度 单元格最大字符数
?
单元格操作
Excel中很重要的一部分是对单元格的操作,比如行高、列宽、单元格合并等,所幸jExcelAPI
提供了这些支持。这些操作相对比较简单,下面只介绍一下相关的API。
?
1、 合并单元格
Java代码
WritableSheet.mergeCells( int m, int n, int p, int q);???
// 作用是从(m,n)到(p,q)的单元格全部合并,比如:???
WritableSheet sheet = book.createSheet(“第一页”, 0 );??
// 合并第一列第一行到第六列第一行的所有单元格???
sheet.mergeCells( 0 , 0 , 5 , 0 );??
WritableSheet.mergeCells( int m, int n, int p, int q);
// 作用是从(m,n)到(p,q)的单元格全部合并,比如:
WritableSheet sheet = book.createSheet(“第一页”, 0 );
// 合并第一列第一行到第六列第一行的所有单元格
sheet.mergeCells( 0 , 0 , 5 , 0 );
合并既可以是横向的,也可以是纵向的。合并后的单元格不能再次进行合并,否则会触发异常。
?
2、 行高和列宽
Java代码
WritableSheet.setRowView( int i, int height);??
// 作用是指定第i+1行的高度,比如:??
// 将第一行的高度设为200???
sheet.setRowView( 0 , 200 );??
WritableSheet.setColumnView( int i, int width);??
// 作用是指定第i+1列的宽度,比如:??
// 将第一列的宽度设为30???
sheet.setColumnView( 0 , 30 );??
???
??
WritableSheet.setRowView( int i, int height);
// 作用是指定第i+1行的高度,比如:
// 将第一行的高度设为200
sheet.setRowView( 0 , 200 );
WritableSheet.setColumnView( int i, int width);
// 作用是指定第i+1列的宽度,比如:
// 将第一列的宽度设为30
sheet.setColumnView( 0 , 30 );
jExcelAPI还有其他的一些功能,比如插入图片等,这里就不再一一介绍,读者可以自己探索。
?
?
其中:如果读一个excel,需要知道它有多少行和多少列,如下操作:
Java代码
Workbook book = Workbook.getWorkbook( new File( " 测试1.xls " ));??
??????? // 获得第一个工作表对象???
??????? Sheet sheet = book.getSheet( 0 );??
??????? // 得到第一列第一行的单元格???
???????? int columnum = sheet.getColumns(); // 得到列数???
???????? int rownum = sheet.getRows(); // 得到行数???
??????? System.out.println(columnum);??
?????? System.out.println(rownum);??
??????? for ( int i =?? 0 ; i < rownum; i ++ ) // 循环进行读写???
?????????? {??
??????????? for ( int j =?? 0 ; j < columnum; j ++ )?? {??
?????????????? Cell cell1 = sheet.getCell(j, i);??
?????????????? String result = cell1.getContents();??
?????????????? System.out.print(result);??
?????????????? System.out.print( " \t " );??
?????????? }???
?????????? System.out.println();??
?????? }???
?????? book.close();??
Workbook book = Workbook.getWorkbook( new File( " 测试1.xls " ));
???????? // 获得第一个工作表对象
???????? Sheet sheet = book.getSheet( 0 );
???????? // 得到第一列第一行的单元格
????????? int columnum = sheet.getColumns(); // 得到列数
????????? int rownum = sheet.getRows(); // 得到行数
???????? System.out.println(columnum);
??????? System.out.println(rownum);
???????? for ( int i =?? 0 ; i < rownum; i ++ ) // 循环进行读写
??????????? {
???????????? for ( int j =?? 0 ; j < columnum; j ++ )?? {
??????????????? Cell cell1 = sheet.getCell(j, i);
??????????????? String result = cell1.getContents();
??????????????? System.out.print(result);
??????????????? System.out.print( " \t " );
??????????? }
??????????? System.out.println();
??????? }
??????? book.close();
?
?
下面是一个完成代码
import? jxl.*; ?
import? jxl.write.*; ?
import? java.io.*;?
public static void main(String[] args){
?? ??? ?String targetfile = "d:/out.xls " ; //输出的excel文件名? ?
?? ??? ?String worksheet = "List" ; //输出的excel文件工作表名? ?
?? ??? ?String[] title = {"ID\012ID2" , "NAME" , "DESCRIB" }; //excel工作表的标题? ?
?? ??? ?WritableWorkbook workbook; ?
?? ??? ?try? ?
?? ??? ?{ ?
?? ??? ??? ?//创建可写入的Excel工作薄,运行生成的文件在tomcat/bin下? ?
?? ??? ??? ?//workbook = Workbook.createWorkbook(new File("output.xls"));?? ?
?? ??? ??? ?System.out.println("begin" ); ?
?? ??? ??? ?
?? ??? ??? ?OutputStream os = new FileOutputStream(targetfile);? ?
?? ??? ??? ?workbook = Workbook.createWorkbook(os);? ?
?? ??? ??? ?WritableSheet sheet = workbook.createSheet(worksheet, 0 );? //添加第一个工作表? ?
?? ??? ??? ?//WritableSheet sheet1 = workbook.createSheet("MySheet1", 1); //可添加第二个工作? ?
?? ??? ??? ?/*
?? ??? ??? ?jxl.write.Label label = new jxl.write.Label(0, 2, "A label record"); //put a label in cell A3, Label(column,row) ?
?? ??? ??? ?sheet.addCell(label);? ?
?? ??? ??? ?*/
?? ??? ??? ?jxl.write.Label label; ?
?? ??? ??? ?for( int? i= 0 ; i< title.length; i++){ ?
?? ??? ??? ??? ?//Label(列号,行号 ,内容 )
?? ??? ??? ??? ?label = new jxl.write.Label(i,? 0 , title[i]);? //put the title in row1?? ?
?? ??? ??? ??? ?sheet.addCell(label);? ?
?? ??? ??? ?} ?
?? ??? ??? ?
?? ??? ??? ?
?? ??? ??? ?WritableCellFormat wrappedText = new WritableCellFormat(WritableWorkbook.ARIAL_10_PT);
?? ??? ??? ?wrappedText.setWrap(true);// 可换行的label样式
?? ??? ??? ?Label label2 = new Label(4, 0, "测试再长一点了呵呵,\012测试。。。", wrappedText); // "\012"强制换行
?? ??? ??? ?sheet.addCell(label2);
?? ??? ?
?? ??? ??? ?
?? ??? ??? ?//下列添加的对字体等的设置均调试通过,可作参考用? ?
?? ??? ??? ?
?? ??? ??? ?//添加数字?? ?
?? ??? ??? ?jxl.write.Number number = new? jxl.write.Number( 3 ,? 4 ,? 3.14159 );? //put the number 3.14159 in cell D5? ?
?? ??? ??? ?sheet.addCell(number); ?
?? ??? ??? ?
?? ??? ??? ?//添加带有字型Formatting的对象?? ?
?? ??? ??? ?jxl.write.WritableFont wf = new? jxl.write.WritableFont(WritableFont.TIMES, 10 ,WritableFont.BOLD, true );? ?
?? ??? ??? ?jxl.write.WritableCellFormat wcfF = new? jxl.write.WritableCellFormat(wf);? ?
?? ??? ??? ?jxl.write.Label labelCF = new? jxl.write.Label( 4 , 4 , "文本" ,wcfF);? ?
?? ??? ??? ?sheet.addCell(labelCF);? ?
?? ??? ??? ?
?? ??? ??? ?//添加带有字体颜色,带背景颜色 Formatting的对象?? ?
?? ??? ??? ?jxl.write.WritableFont wfc = new? jxl.write.WritableFont(WritableFont.ARIAL, 10 ,WritableFont.BOLD, false ,jxl.format.UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED);? ?
?? ??? ??? ?jxl.write.WritableCellFormat wcfFC = new? jxl.write.WritableCellFormat(wfc);? ?
?? ??? ??? ?wcfFC.setBackground(jxl.format.Colour.BLUE); ?
?? ??? ??? ?jxl.write.Label labelCFC = new? jxl.write.Label( 1 , 5 , "带颜色" ,wcfFC);? ?
?? ??? ??? ?sheet.addCell(labelCFC);? ?
?? ??? ??? ?
?? ??? ??? ?//添加带有formatting的Number对象??? ?
?? ??? ??? ?jxl.write.NumberFormat nf = new? jxl.write.NumberFormat( "#.##" );? ?
?? ??? ??? ?jxl.write.WritableCellFormat wcfN = new? jxl.write.WritableCellFormat(nf);? ?
?? ??? ??? ?jxl.write.Number labelNF = new? jxl.write.Number( 1 , 1 , 3.1415926 ,wcfN);? ?
?? ??? ??? ?sheet.addCell(labelNF);? ?
?? ??? ??? ?
?? ??? ??? ?//3.添加Boolean对象?? ?
?? ??? ??? ?jxl.write.Boolean labelB = new? jxl.write.Boolean( 0 , 2 , false );? ?
?? ??? ??? ?sheet.addCell(labelB);? ?
?? ??? ??? ?
?? ??? ??? ?//4.添加DateTime对象?? ?
?? ??? ??? ?jxl.write.DateTime labelDT = new? jxl.write.DateTime( 0 , 3 , new? java.util.Date());? ?
?? ??? ??? ?sheet.addCell(labelDT);? ?
?? ??? ??? ?
?? ??? ??? ?//添加带有formatting的DateFormat对象?? ?
?? ??? ??? ?jxl.write.DateFormat df = new? jxl.write.DateFormat( "ddMMyyyyhh:mm:ss" );? ?
?? ??? ??? ?jxl.write.WritableCellFormat wcfDF = new? jxl.write.WritableCellFormat(df);? ?
?? ??? ??? ?jxl.write.DateTime labelDTF = new? jxl.write.DateTime( 1 , 3 , new? java.util.Date(),wcfDF);? ?
?? ??? ??? ?sheet.addCell(labelDTF);? ?
?? ??? ??? ?
?? ??? ??? ?//和宾单元格? ?
?? ??? ??? ?//sheet.mergeCells(int col1,int row1,int col2,int row2);//左上角到右下角? ?
?? ??? ??? ?sheet.mergeCells(4 , 5 , 8 , 10 ); //左上角到右下角? ?
?? ??? ??? ?wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 40 ,WritableFont.BOLD, false ,jxl.format.UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.GREEN);? ?
?? ??? ??? ?jxl.write.WritableCellFormat wchB = new jxl.write.WritableCellFormat(wfc);? ?
?? ??? ??? ?wchB.setAlignment(jxl.format.Alignment.CENTRE); ?
?? ??? ??? ?labelCFC = new? jxl.write.Label( 4 , 5 , "单元合并" ,wchB);? ?
?? ??? ??? ?sheet.addCell(labelCFC); //? ?
?? ??? ??? ?
?? ??? ??? ?
?? ??? ??? ?//设置边框? ?
?? ??? ??? ?jxl.write.WritableCellFormat wcsB = new? jxl.write.WritableCellFormat();? ?
?? ??? ??? ?wcsB.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THICK); ?
?? ??? ??? ?labelCFC = new? jxl.write.Label( 0 , 6 , "边框设置" ,wcsB);? ?
?? ??? ??? ?sheet.addCell(labelCFC);? ?
?? ??? ??? ?workbook.write();? ?
?? ??? ??? ?workbook.close(); ?
?? ??? ?}catch (Exception e)? ?
?? ??? ?{? ?
?? ??? ??? ?e.printStackTrace();? ?
?? ??? ?}? ?
?? ??? ?System.out.println("end" ); ?
?? ??? ?Runtime r = Runtime.getRuntime();? ?
?? ??? ?Process p = null ;? ?
?? ??? ?//String cmd[]={"notepad","exec.java"};??? ?
?? ??? ?String cmd[] = {"C:\\Program Files\\Microsoft Office\\Office\\EXCEL.EXE" , "out.xls" };? ?
?? ??? ?try {? ?
?? ??? ??? ?p = r.exec(cmd);? ?
?? ??? ?}? ?
?? ??? ?catch (Exception e){? ?
?? ??? ??? ?System.out.println("error executing: " +cmd[ 0 ]);? ?
?? ??? ?} ?
?? ?}?
?
?
参考:一篇好文章
?
?
?
o
o
o
o
o
o
?