posts - 78,  comments - 48,  trackbacks - 0
          原作者:SonyMusic
          在Java中讀取Excel文件的內容
          在這里,我使用的是一個叫Java Excel API的東西,類似的還有jakarta的POI,不過感覺那個
          太復雜了點兒。而且jxl對中文的支持相當的好,至少我在用的過程中一點問題沒出。

          一、下載地址
          http://www.andykhan.com/jexcelapi/

          二、特性
          可以讀取Excel 95, 97, 2000文件
          可以讀或寫Excel 97及其以后版本的的公式(不過我發現好像有bug)
          生成Excel 97格式的電子表格
          支持字體、數字和日期格式化
          支持單元格的顏色和陰影
          可以編輯現有的文件

          三、讀文件
          //聲明一下,記得后面要關閉哦。。
          Workbook workbook = null;

          try {
             workbook = Workbook.getWorkbook(new File("d:\\temp\\TestRead.xls"));
          } catch (Exception e) {
             throw new Exception("file to import not found!");
          }

          Sheet sheet = workbook.getSheet(0);
          Cell cell = null;

          int columnCount=3;
          int rowCount=sheet.getRows();
          for (int i = 0; i <rowCount; i++) {
             for (int j = 0; j <columnCount; j++) {
                 //注意,這里的兩個參數,第一個是表示列的,第二才表示行
                 cell=sheet.getCell(j, i);
                 //要根據單元格的類型分別做處理,否則格式化過的內容可能會不正確
                 if(cell.getType()==CellType.NUMBER){
                     System.out.print(((NumberCell)cell).getValue());
                 }
                 else if(cell.getType()==CellType.DATE){
                     System.out.print(((DateCell)cell).getDate());
                 }
                 else{
                     System.out.print(cell.getContents());
                 }
                
                 //System.out.print(cell.getContents());
                 System.out.print("\t");
             }
             System.out.print("\n");
          }
          //關閉它,否則會有內存泄露
          workbook.close();


          寫:wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
          在Java中向Excel文件寫入內容


          四、導出數據到Excel文件中
          下面的例子,設置了數字、日期的格式,還有字體,顏色等。

          File tempFile=new File("d:/temp/output.xls");
          WritableWorkbook workbook = Workbook.createWorkbook(tempFile);
          WritableSheet sheet = workbook.createSheet("TestCreateExcel", 0);

          //一些臨時變量,用于寫到excel中
          Label l=null;
          jxl.write.Number n=null;
          jxl.write.DateTime d=null;

          //預定義的一些字體和格式,同一個Excel中最好不要有太多格式
          WritableFont headerFont = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.BLUE);
          WritableCellFormat headerFormat = new WritableCellFormat (headerFont);

          WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.RED);
          WritableCellFormat titleFormat = new WritableCellFormat (titleFont);

          WritableFont detFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.BLACK);
          WritableCellFormat detFormat = new WritableCellFormat (detFont);

          NumberFormat nf=new NumberFormat("0.00000");  //用于Number的格式
          WritableCellFormat priceFormat = new WritableCellFormat (detFont, nf);

          DateFormat df=new DateFormat("yyyy-MM-dd");//用于日期的
          WritableCellFormat dateFormat = new WritableCellFormat (detFont, df);

          //剩下的事情,就是用上面的內容和格式創建一些單元格,再加到sheet中
          l=new Label(0, 0, "用于測試的Excel文件", headerFormat);
          sheet.addCell(l);

          //add Title
          int column=0;
          l=new Label(column++, 2, "標題", titleFormat);
          sheet.addCell(l);
          l=new Label(column++, 2, "日期", titleFormat);
          sheet.addCell(l);
          l=new Label(column++, 2, "貨幣", titleFormat);
          sheet.addCell(l);
          l=new Label(column++, 2, "價格", titleFormat);
          sheet.addCell(l);

          //add detail
          int i=0;
          column=0;
          l=new Label(column++, i+3, "標題 "+i, detFormat);
          sheet.addCell(l);
          d=new DateTime(column++, i+3, new java.util.Date(), dateFormat);
          sheet.addCell(d);
          l=new Label(column++, i+3, "CNY", detFormat);
          sheet.addCell(l);
          n=new jxl.write.Number(column++, i+3, 5.678, priceFormat);
          sheet.addCell(n);

          i++;
          column=0;
          l=new Label(column++, i+3, "標題 "+i, detFormat);
          sheet.addCell(l);
          d=new DateTime(column++, i+3, new java.util.Date(), dateFormat);
          sheet.addCell(d);
          l=new Label(column++, i+3, "SGD", detFormat);
          sheet.addCell(l);
          n=new jxl.write.Number(column++, i+3, 98832, priceFormat);
          sheet.addCell(n);

          //設置列的寬度
          column=0;
          sheet.setColumnView(column++, 20);
          sheet.setColumnView(column++, 20);
          sheet.setColumnView(column++, 10);
          sheet.setColumnView(column++, 20);

          workbook.write();
          workbook.close();


          要往xls文件里面寫入數據的時候需要注意的是第一要新建一個xls文件
          OutputStream os=new FileOutputStream("c:\\excel2.xls");

          再建完這個文件的時候再建立工作文件
          jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(os));

          如果這個文件已經存在,那么我們可以在這個文件里面加入一個sheet為了和以前的數據進行分開;
          jxl.write.WritableSheet ws = wwb.createSheet("Test Sheet 1", 0);
          在createSheet方法里前面的參數是sheet名,后面是要操作的sheet號

          接下來就可以往這個文件里面寫入數據了


          寫入數據的時候注意的格式


          (1)添加的字體樣式
          jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);
          WritableFont()方法里參數說明:
          這個方法算是一個容器,可以放進去好多屬性
          第一個: TIMES是字體大小,他寫的是18
          第二個: BOLD是判斷是否為斜體,選擇true時為斜體
          第三個: ARIAL
          第四個: UnderlineStyle.NO_UNDERLINE 下劃線
          第五個: jxl.format.Colour.RED 字體顏色是紅色的

          jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);

          jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell",wcfF);
          ws.addCell(labelC);
          在Label()方法里面有三個參數
          第一個是代表列數,
          第二是代表行數,
          第三個代表要寫入的內容
          第四個是可選項,是輸入這個label里面的樣式
          然后通過寫sheet的方法addCell()把內容寫進sheet里面。

          (2)添加帶有formatting的Number對象
          jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");


          (3)添加Number對象
          (3.1)顯示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);
          ws.addCell(labelNF);
          Number()方法參數說明:
          前兩上表示輸入的位置
          第三個表示輸入的內容


          (4)添加Boolean對象
          jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false);
          ws.addCell(labelB);


          (5)添加DateTime對象
          jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());
          ws.addCell(labelDT);
          DateTime()方法的參數說明
          前兩個表示輸入的位置
          第三個表示輸入的當前時間


          (6)添加帶有formatting的DateFormat對象
          這個顯示當前時間的所有信息,包括年月日小時分秒
          jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh: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);
          ws.addCell(labelDTF);

          (7)添加帶有字體顏色Formatting的對象
          jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false,UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);
          jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);

          import="jxl.format.*
          jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL,20,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.GREEN);

          (8)設置單元格樣式

          jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
          wcfFC.setBackGround(jxl.format.Colour.RED);//設置單元格的顏色為紅色
          wcfFC = new jxl.write.Label(6,0,"i love china",wcfFC);

          利用JExcelApi來動態生成excel文檔

          首先,請到http://www.andykhan.com/jexcelapi/index.html下載java excel api,主頁上同時有比較詳細的介紹。最新版本為2.4.3,同時也可以到:http://www.andykhan.com/jexcelapi/jexcelapi_2_4_3.tar.gz下載到該最新版的API,由于該項目是開源的,所以下載的文件中已經包含了源代碼,同樣的,文件中也有javadoc,大家在開發中可以參考javadoc。

          下載完畢后,我們需要把文件中的jxl.jar加入到你的開發classpath中。
          下圖是現在要生產的excel截圖:
          http://blog.csdn.net/beming/gallery/image/3437.aspx

          代碼如下:

             File excel = new File("d:/aming.xls");
             if(!excel.exists()){
              excel.createNewFile();
             }   
             WritableWorkbook wwb = Workbook.createWorkbook(excel);
             WritableSheet ws = wwb.createSheet("testexcel",0);
             Label lable = null;
             
             //對中文的支持非常好
             lable = new Label(0,0,"我的中國心");
             ws.addCell(lable);
             
             //可以定義模板格式化你的cell
             WritableFont wf = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
             WritableCellFormat wcf = new WritableCellFormat(wf);
             wcf.setBackground(Colour.WHITE);
             lable = new Label(0,1,"fdsl",wcf);
             ws.addCell(lable);
             
             wf = new WritableFont(WritableFont.TIMES,18,WritableFont.BOLD,true);
             wcf = new WritableCellFormat(wf);
             lable = new Label(0,2,"aming",wcf);
             ws.addCell(lable);
             
             //cell的類型同樣可以定義為數字類型
             Number nb = new Number(0,3,21.4321321);
             ws.addCell(nb);
             
             //支持格式化你的數字串
             NumberFormat nf = new NumberFormat("#.###");
             wcf = new WritableCellFormat(nf);
             nb = new Number(0,4,21.43254354354354,wcf);
             ws.addCell(nb);

             //cell的類型可以為boolean類型
             Boolean bl = new Boolean(0,5,true);
             ws.addCell(bl);

             //cell的類型同樣可以為日期,時間
             DateTime dt = new DateTime(0,6,new Date());
             ws.addCell(dt);

             //并且可以很好格式化你的日期格式
             DateFormat df = new DateFormat("MM dd yyyy hh:mm:ss");
             wcf = new WritableCellFormat(df);
             dt = new DateTime(0,7,new Date(),wcf);
             ws.addCell(dt);
             
             //開始寫文件了
             wwb.write();
             wwb.close();

          posted on 2006-01-16 15:34 黑咖啡 閱讀(2590) 評論(0)  編輯  收藏 所屬分類: tec

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          留言簿(2)

          隨筆分類(67)

          文章分類(43)

          Good Article

          Good Blogs

          Open Source

          最新隨筆

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 庆元县| 文化| 晋江市| 静安区| 开远市| 阿克| 纳雍县| 潞西市| 石门县| 广丰县| 庄河市| 黔南| 南岸区| 开化县| 米脂县| 浙江省| 普洱| 安福县| 仁布县| 抚顺市| 大悟县| 聂拉木县| 诸城市| 望谟县| 凤翔县| 隆林| 务川| 社会| 九台市| 如东县| 彭泽县| 东莞市| 泸西县| 长宁县| 思南县| 虞城县| 普定县| 泰安市| 定南县| 巴马| 仪陇县|