java 操作 Excel 方法,java如何操作excel

java 操作 Excel 最常用的就是JXL(java excel api)和POI,今先看下JXL吧。首先可以到 http://www.andykhan.com/jexcelapi/download.html 下载最新的jxl.jar,里面有它的jar包和API,内有一个小例子,可以参考一下。

 

    JXL 用起来挺简单的,不过相应的其功能也并不是十分强大,对于一般的简单的excel操作还可以,对于太复杂的还是有些吃力,基本的操作也就是以下几项内容。

 

    首先,要创建一个可读写的工作簿(WritableWorkbook):

Java代码 复制代码  收藏代码
  1. WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\test.xls"));  
WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\test.xls"));

 

    如果是想要修改一个已存在的excel工作簿,则需要先获得它的原始工作簿,再创建一个可读写的副本:

Java代码 复制代码  收藏代码
  1. Workbook wb = Workbook.getWorkbook(new File("src\\test\\test.xls")); // 获得原始文档   
  2. WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\test_modified.xls"),wb); // 创建一个可读写的副本  
Workbook wb = Workbook.getWorkbook(new File("src\\test\\test.xls")); // 获得原始文档
WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\test_modified.xls"),wb); // 创建一个可读写的副本

 

    然后,取得我们要操作的sheet,并对其进行相应的操作,如改名、合并单元格、设置列宽、行高等:

Java代码 复制代码  收藏代码
  1. WritableSheet sheet = workbook.getSheet(0);   
  2. sheet.setName("修改后"); // 给sheet页改名   
  3. workbook.removeSheet(2); // 移除多余的标签页   
  4. workbook.removeSheet(3);   
  5.            
  6. sheet.mergeCells(0040); // 合并单元格   
  7. sheet.setRowView(0600); // 设置行的高度   
  8. sheet.setColumnView(030); // 设置列的宽度   
  9. sheet.setColumnView(120); // 设置列的宽度  
WritableSheet sheet = workbook.getSheet(0);
sheet.setName("修改后"); // 给sheet页改名
workbook.removeSheet(2); // 移除多余的标签页
workbook.removeSheet(3);
		
sheet.mergeCells(0, 0, 4, 0); // 合并单元格
sheet.setRowView(0, 600); // 设置行的高度
sheet.setColumnView(0, 30); // 设置列的宽度
sheet.setColumnView(1, 20); // 设置列的宽度

 

    之后,就是对单元格的操作了,可以通过如下方法获取一个单元格,其中两个参数分别为列、行的位置,从0开始计数,如(2,3)就代表单元格C4:

Java代码 复制代码  收藏代码
  1. WritableCell cell = sheet.getWritableCell(2,3);  
WritableCell cell = sheet.getWritableCell(2,3);

 

    通过WritableFont、WritableCellFormat等对象可以设置单元格的字体、样式等外观:

Java代码 复制代码  收藏代码
  1. WritableFont titleWf = new WritableFont(WritableFont.createFont("仿宋_GB2312"),// 字体   
  2.                             20,//WritableFont.DEFAULT_POINT_SIZE,   // 字号   
  3.                             WritableFont.NO_BOLD,                  // 粗体   
  4.                             false,                                 // 斜体   
  5.                             UnderlineStyle.NO_UNDERLINE,            // 下划线   
  6.                             Colour.BLUE2,                       // 字体颜色   
  7.                             ScriptStyle.NORMAL_SCRIPT);   
  8. WritableCellFormat wcf = new WritableCellFormat(titleWf);   
  9. wcf.setBackground(Colour.GRAY_25);// 设置单元格的背景颜色   
  10. wcf.setAlignment(Alignment.CENTRE); // 设置对齐方式   
  11. wcf.setBorder(Border.ALL, BorderLineStyle.THICK); // 添加边框   
  12. cell.setCellFormat(wcf);  
WritableFont titleWf = new WritableFont(WritableFont.createFont("仿宋_GB2312"),// 字体
				 			20,//WritableFont.DEFAULT_POINT_SIZE,   // 字号
				 			WritableFont.NO_BOLD,			       // 粗体
				 			false,							       // 斜体
				 			UnderlineStyle.NO_UNDERLINE,			// 下划线
				 			Colour.BLUE2,						// 字体颜色
				 			ScriptStyle.NORMAL_SCRIPT);
WritableCellFormat wcf = new WritableCellFormat(titleWf);
wcf.setBackground(Colour.GRAY_25);// 设置单元格的背景颜色
wcf.setAlignment(Alignment.CENTRE); // 设置对齐方式
wcf.setBorder(Border.ALL, BorderLineStyle.THICK); // 添加边框
cell.setCellFormat(wcf);

 

    在jxl中,有几种常用的数据类型,根据单元格内数据类型的不同,每个WritableCell可以根据其类型被转换为它的一个子类型,以便对不同类型的数据进行专门的处理,通常可以做这样的转换:

Java代码 复制代码  收藏代码
  1. WritableCell fromCell = sheet0.getWritableCell(j, i);   
  2.   
  3. if (fromCell instanceof jxl.write.Number) {   
  4.     jxl.write.Number num = (jxl.write.Number) fromCell;   
  5. else if (fromCell instanceof jxl.write.Boolean) {   
  6.     jxl.write.Boolean bool = (jxl.write.Boolean) fromCell;   
  7. else if (fromCell instanceof jxl.write.DateTime) {   
  8.     jxl.write.DateTime dt = (jxl.write.DateTime) fromCell;   
  9. else if(fromCell instanceof Label){   
  10.     Label _label = (Label) fromCell;   
  11. }  
WritableCell fromCell = sheet0.getWritableCell(j, i);

if (fromCell instanceof jxl.write.Number) {
	jxl.write.Number num = (jxl.write.Number) fromCell;
} else if (fromCell instanceof jxl.write.Boolean) {
	jxl.write.Boolean bool = (jxl.write.Boolean) fromCell;
} else if (fromCell instanceof jxl.write.DateTime) {
	jxl.write.DateTime dt = (jxl.write.DateTime) fromCell;
} else if(fromCell instanceof Label){
	Label _label = (Label) fromCell;
}

 

    当然,操作完成之后一定不要忘了刷新(或者叫写入?)和关掉工作簿:

Java代码 复制代码  收藏代码
  1. workbook.write();   
  2. workbook.close();  
 workbook.write();
 workbook.close();

 

 

下面是参考jxl api里那个例子写的,把我自己觉得常用的excel操作基本都包含了:

Java代码 复制代码  收藏代码
  1. package test;   
  2.   
  3. import java.io.File;   
  4. import java.io.IOException;   
  5. import java.net.MalformedURLException;   
  6. import java.net.URL;   
  7. import java.util.ArrayList;   
  8. import java.util.Calendar;   
  9. import java.util.Date;   
  10.   
  11. import jxl.CellType;   
  12. import jxl.Workbook;   
  13. import jxl.format.Alignment;   
  14. import jxl.format.Border;   
  15. import jxl.format.BorderLineStyle;   
  16. import jxl.format.Colour;   
  17. import jxl.format.ScriptStyle;   
  18. import jxl.format.UnderlineStyle;   
  19. import jxl.format.VerticalAlignment;   
  20. import jxl.read.biff.BiffException;   
  21. import jxl.write.Blank;   
  22. import jxl.write.DateFormat;   
  23. import jxl.write.DateFormats;   
  24. import jxl.write.DateTime;   
  25. import jxl.write.Formula;   
  26. import jxl.write.Label;   
  27. import jxl.write.Number;   
  28. import jxl.write.NumberFormat;   
  29. import jxl.write.WritableCell;   
  30. import jxl.write.WritableCellFeatures;   
  31. import jxl.write.WritableCellFormat;   
  32. import jxl.write.WritableFont;   
  33. import jxl.write.WritableHyperlink;   
  34. import jxl.write.WritableImage;   
  35. import jxl.write.WritableSheet;   
  36. import jxl.write.WritableWorkbook;   
  37. import jxl.write.WriteException;   
  38.   
  39. /**  
  40.  *   
  41.  * @author why  
  42.  *  
  43.  */  
  44. public class ExcelTest {   
  45.   
  46.     /**  
  47.      * @param args  
  48.      * @throws IOException   
  49.      * @throws BiffException   
  50.      * @throws WriteException   
  51.      */  
  52.     public static void main(String[] args) throws IOException, BiffException, WriteException {   
  53.         Workbook wb = Workbook.getWorkbook(new File("src\\test\\test.xls")); // 获得原始文档   
  54.         WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\test_modified.xls"),wb); // 创建一个可读写的副本   
  55.            
  56.            
  57.         /**  
  58.          * 定义与设置Sheet  
  59.          */  
  60.         WritableSheet sheet = workbook.getSheet(0);   
  61.         sheet.setName("修改后"); // 给sheet页改名   
  62.         workbook.removeSheet(2); // 移除多余的标签页   
  63.         workbook.removeSheet(3);   
  64.            
  65.         sheet.mergeCells(0040); // 合并单元格   
  66.         sheet.setRowView(0600); // 设置行的高度   
  67.         sheet.setColumnView(030); // 设置列的宽度   
  68.         sheet.setColumnView(120); // 设置列的宽度   
  69.            
  70.          WritableCell cell = null;   
  71.          WritableCellFormat wcf = null;   
  72.          Label label = null;   
  73.          WritableCellFeatures wcfeatures = null;   
  74.            
  75.          // 更改标题字体   
  76.          cell = sheet.getWritableCell(0,0);   
  77.          WritableFont titleWf = new WritableFont(WritableFont.createFont("仿宋_GB2312"),// 字体   
  78.                                                  20,//WritableFont.DEFAULT_POINT_SIZE,  // 字号   
  79.                                                  WritableFont.NO_BOLD,                  // 粗体   
  80.                                                  false,                                 // 斜体   
  81.                                                  UnderlineStyle.NO_UNDERLINE,           // 下划线   
  82.                                                  Colour.BLUE2,                          // 字体颜色   
  83.                                                  ScriptStyle.NORMAL_SCRIPT);   
  84.          wcf = new WritableCellFormat(titleWf);   
  85.          wcf.setBackground(Colour.GRAY_25);// 设置单元格的背景颜色   
  86.          wcf.setAlignment(Alignment.CENTRE); // 设置对齐方式   
  87.          wcf.setBorder(Border.ALL, BorderLineStyle.THICK); // 添加边框   
  88.          cell.setCellFormat(wcf);   
  89.            
  90.          // 将B3的字体改为仿宋_GB2312   
  91.          cell = sheet.getWritableCell(1,2);   
  92.          WritableFont fs = new WritableFont(WritableFont.createFont("仿宋_GB2312"),   
  93.                                            11);   
  94.          wcf = new WritableCellFormat(fs);   
  95.          cell.setCellFormat(wcf);   
  96.            
  97.          // 将B4的字号改为20   
  98.          cell = sheet.getWritableCell(1,3);   
  99.          WritableFont size20 = new WritableFont(WritableFont.createFont("宋体"),    
  100.                                                20);   
  101.          wcf = new WritableCellFormat(size20);   
  102.          cell.setCellFormat(wcf);   
  103.            
  104.          // 将B5的字体改为加粗   
  105.          cell = sheet.getWritableCell(1,4);   
  106.          WritableFont bold = new WritableFont(WritableFont.createFont("宋体"),    
  107.                                                11,   
  108.                                                WritableFont.BOLD);   
  109.          wcf = new WritableCellFormat(bold);   
  110.          cell.setCellFormat(wcf);   
  111.            
  112.          // 将B6的字体改为倾斜   
  113.          cell = sheet.getWritableCell(1,5);   
  114.          WritableFont italic = new WritableFont(WritableFont.createFont("宋体"),    
  115.                                                 11,   
  116.                                                 WritableFont.NO_BOLD,   
  117.                                                 true);   
  118.          wcf = new WritableCellFormat(italic);   
  119.          cell.setCellFormat(wcf);   
  120.            
  121.          // 将B7字体加下划线   
  122.          cell = sheet.getWritableCell(1,6);   
  123.          WritableFont underline = new WritableFont(WritableFont.createFont("宋体"),    
  124.                                                    11,   
  125.                                                    WritableFont.NO_BOLD,   
  126.                                                    false,   
  127.                                                    UnderlineStyle.SINGLE);   
  128.          wcf = new WritableCellFormat(underline);   
  129.          cell.setCellFormat(wcf);   
  130.            
  131.          // 将B8的文字改为“待修改文字-已修改”   
  132.          cell = sheet.getWritableCell(1,7);   
  133.          if (cell.getType() == CellType.LABEL)   
  134.          {   
  135.              Label lc = (Label) cell;   
  136.              lc.setString(lc.getString() + " - 已修改");   
  137.          }   
  138.            
  139.          // 将B9文字对齐方式改为垂直居中、右对齐   
  140.          cell = sheet.getWritableCell(1,8);   
  141.          WritableFont align = new WritableFont(WritableFont.createFont("宋体"),    
  142.                                                   11);   
  143.          wcf = new WritableCellFormat(align);   
  144.          wcf.setAlignment(Alignment.RIGHT); // 设置为右对齐   
  145.          wcf.setVerticalAlignment(VerticalAlignment.CENTRE); // 设置为垂直居中   
  146.          cell.setCellFormat(wcf);   
  147.            
  148.          // 将E3文字改为自动换行   
  149.          cell = sheet.getWritableCell(4,2);   
  150.          WritableFont justify = new WritableFont(WritableFont.createFont("宋体"),    
  151.                                                   11);   
  152.          wcf = new WritableCellFormat(justify);   
  153.          wcf.setAlignment(Alignment.JUSTIFY);   
  154.          cell.setCellFormat(wcf);   
  155.            
  156.            
  157.          // 将B12的数字有效位数从5位改为7位   
  158.          cell = sheet.getWritableCell(1,11);   
  159.          NumberFormat sevendps = new NumberFormat("#.0000000");   
  160.          wcf = new WritableCellFormat(sevendps);   
  161.          cell.setCellFormat(wcf);   
  162.            
  163.          // 将B13改为4位科学计数法表示   
  164.          cell = sheet.getWritableCell(1,12);   
  165.          NumberFormat exp4 = new NumberFormat("0.####E0");   
  166.          wcf = new WritableCellFormat(exp4);   
  167.          cell.setCellFormat(wcf);   
  168.            
  169.          // 将B14改为默认数字表示   
  170.          cell = sheet.getWritableCell(1,13);   
  171.          cell.setCellFormat(WritableWorkbook.NORMAL_STYLE);   
  172.            
  173.          // 将B15数字类型的值17改为22   
  174.          cell = sheet.getWritableCell(1,14);   
  175.          if (cell.getType() == CellType.NUMBER)   
  176.          {   
  177.              Number n = (Number) cell;   
  178.              n.setValue(42);   
  179.          }   
  180.            
  181.          // 将B16的值2.71进行加法运算2.71 + 0.1   
  182.          cell = sheet.getWritableCell(1,15);   
  183.          if (cell.getType() == CellType.NUMBER)   
  184.          {   
  185.              Number n = (Number) cell;   
  186.              n.setValue(n.getValue() + 0.1);   
  187.          }   
  188.            
  189.          // 将B19日期格式改为默认   
  190.          cell = sheet.getWritableCell(1,18);   
  191.          wcf = new WritableCellFormat(DateFormats.FORMAT9);   
  192.          cell.setCellFormat(wcf);   
  193.            
  194.          // 将B20日期格式改为dd MMM yyyy HH:mm:ss   
  195.          cell = sheet.getWritableCell(1,19);   
  196.          DateFormat df = new DateFormat("dd MMM yyyy HH:mm:ss");   
  197.          wcf = new WritableCellFormat(df);   
  198.          cell.setCellFormat(wcf);   
  199.            
  200.          // 将B21的日期设置为 2011-6-1 11:18:50   
  201.          cell = sheet.getWritableCell(1,20);   
  202.          if (cell.getType() == CellType.DATE)   
  203.          {   
  204.              DateTime dt = (DateTime) cell;   
  205.              Calendar cal = Calendar.getInstance();   
  206.              cal.set(201151111850);   
  207.              Date d = cal.getTime();   
  208.              dt.setDate(d);   
  209.          }   
  210.            
  211.            
  212.          // 将B24文字添加链接http://www.baidu.com   
  213.          WritableHyperlink link = new WritableHyperlink(123new URL("http://www.baidu.com"));   
  214.          sheet.addHyperlink(link);   
  215.            
  216.          // 更改URL链接   
  217.          WritableHyperlink hyperlinks[] = sheet.getWritableHyperlinks();   
  218.          for (int i = 0; i < hyperlinks.length; i++) {   
  219.              WritableHyperlink wh = hyperlinks[i];   
  220.              if (wh.getColumn() == 1 && wh.getRow() == 24) {   
  221.                  // 将B25文字链接取消   
  222.                  sheet.removeHyperlink(wh,true);//true:保留文字;false:删除文字   
  223.              }else if(wh.getColumn() == 1 && wh.getRow() == 25){   
  224.                  try {   
  225.                      // 将B26链接更改为http://wuhongyu.javaeye.com   
  226.                      wh.setURL(new URL("http://wuhongyu.javaeye.com"));   
  227.                  } catch (MalformedURLException e) {   
  228.                      e.printStackTrace();   
  229.                  }   
  230.              }   
  231.          }   
  232.            
  233.            
  234.          // 利用公式取得B29、B30的值   
  235.          Formula f1 = new Formula(128"SUM(C29:D29)");   
  236.          sheet.addCell(f1);   
  237.          Formula f2 = new Formula(129"AVERAGE(C30:G30)");   
  238.          sheet.addCell(f2);   
  239.            
  240.          // 在B32处添加图片,图片大小占10行3列,只支持png格式   
  241.          File file = new File("d:\\shu05.png");   
  242.          WritableImage image = new WritableImage(131310, file);   
  243.          sheet.addImage(image);   
  244.            
  245.          // 在A44出添加内容"Added drop down validation",并为其添加注释   
  246.          label = new Label(043"Added drop down validation");   
  247.          wcfeatures = new WritableCellFeatures();   
  248.          wcfeatures.setComment("右边列是个下拉列表");   
  249.          label.setCellFeatures(wcfeatures);   
  250.          sheet.addCell(label);   
  251.             
  252.          // 在B44处添加一个下拉列表并添加注释   
  253.          Blank b = new Blank(143);   
  254.          wcfeatures = new WritableCellFeatures();   
  255.          ArrayList al = new ArrayList();   
  256.          al.add("why");   
  257.          al.add("landor");   
  258.          al.add("tjm");   
  259.          wcfeatures.setDataValidationList(al);   
  260.          wcfeatures.setComment("这是一个注释");   
  261.          b.setCellFeatures(wcfeatures);   
  262.          sheet.addCell(b);   
  263.             
  264.          // 为A46添加注释。   
  265.          // 此处比较麻烦,试了多次发现必须将cell强制类型转换、添加CellFeatures再修改注释才可用,不知有没有更好的办法。   
  266.          cell = sheet.getWritableCell(0,45);   
  267.          wcfeatures = new WritableCellFeatures();   
  268.          wcfeatures.setComment("这个注释不会被显示,删了这行还不行,MD");   
  269.          cell.setCellFeatures(wcfeatures);   
  270.             
  271.          label = (Label) cell;   
  272. //       label.setCellFeatures(wcfeatures);// 直接这样写会报一个警告(“注释已存在”),但那个注释仍会被显示。   
  273.          label.addCellFeatures();   
  274.          label.getWritableCellFeatures().setComment("终于加上注释了,哈哈哈哈");   
  275.             
  276.             
  277. //      if (cell instanceof Number) {   
  278. //          Number num = (Number) cell;   
  279. //          num.setCellFeatures(wcfeatures);   
  280. //      } else if (cell instanceof jxl.write.Boolean) {   
  281. //          jxl.write.Boolean bool = (jxl.write.Boolean) cell;   
  282. //          bool.setCellFeatures(wcfeatures);   
  283. //      } else if (cell instanceof jxl.write.DateTime) {   
  284. //          jxl.write.DateTime dt = (jxl.write.DateTime) cell;   
  285. //          dt.setCellFeatures(wcfeatures);   
  286. //      } else {   
  287. //          Label _label = (Label) cell;   
  288. //          _label.setCellFeatures(wcfeatures);   
  289. //      }   
  290.             
  291.          workbook.write();   
  292.          workbook.close();   
  293.          wb.close();   
  294.     }   
  295.   
  296. }  
package test;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

import jxl.CellType;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.ScriptStyle;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.read.biff.BiffException;
import jxl.write.Blank;
import jxl.write.DateFormat;
import jxl.write.DateFormats;
import jxl.write.DateTime;
import jxl.write.Formula;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.NumberFormat;
import jxl.write.WritableCell;
import jxl.write.WritableCellFeatures;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableHyperlink;
import jxl.write.WritableImage;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

/**
 * 
 * @author why
 *
 */
public class ExcelTest {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws BiffException 
	 * @throws WriteException 
	 */
	public static void main(String[] args) throws IOException, BiffException, WriteException {
		Workbook wb = Workbook.getWorkbook(new File("src\\test\\test.xls")); // 获得原始文档
		WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\test_modified.xls"),wb); // 创建一个可读写的副本
		
		
		/**
		 * 定义与设置Sheet
		 */
		WritableSheet sheet = workbook.get
  

你可能感兴趣的:(java,.net,工作,Excel,WCF)