用Java讀取excel文件並改寫內容

工做時遇到這種狀況:產品臨時給一個表,表有六個sheet頁,對應六個表,都是關於一些學生的信息啊,咱們要用到這些數據,那麼必須本身倒騰,把這些數據插到數據庫,還好如今一些鏈接數據庫的客戶端便捷,咱們能夠直接導入excel,我用的Navicat Premium,將表導入成功,中間出了一些版本問題,貌似只能讀取97-03  xls格式的Excel,總之注意文檔的版本。由於給的表的字段名都是中文,通常我們字段名用英文,因此就要改一下,最方便的估計就是寫個工具將中文名字改爲對應的首位字母拼起來的名字,如博客園變成bky。因而便有了以下代碼:java

package com.iflytek.excel;

import java.io.File;    
import java.io.FileInputStream;
import java.io.IOException;  
import java.io.InputStream;
import org.junit.Test;
import net.sourceforge.pinyin4j.PinyinHelper; 
import jxl.Workbook;  
import jxl.read.biff.BiffException;  
import jxl.write.WritableCell;
import jxl.write.WritableSheet;
import jxl.write.WriteException;

    public class ReadExcel {
        
        @Test
        public  void operate() throws BiffException, IOException {
            ReadExcel obj = new ReadExcel(); 
            //建立Excel路徑
            File file = new File("C:"+ File.separator +"Users"+ File.separator +"Administrator"+
                          File.separator +"Desktop"+ File.separator +"學生報告樣本數據@0421.xls");
            obj.readExcel(file);
        }
            
        // 讀Excel的方法readExcel,該方法的參數爲一個File對象
        public void readExcel(File file) throws BiffException, IOException {
            try {
                jxl.Workbook wb =null;                                 //建立一個workbook對象
                String excelpath = file.getAbsolutePath();
                
                InputStream is = new FileInputStream(excelpath);      //建立一個文件流,讀入Excel文件
                wb = Workbook.getWorkbook(is);                        //將文件流寫入到workbook對象
                                
                //jxl.Workbook 對象是隻讀的,因此若是要修改Excel,須要建立一個可讀的副本,副本指向原Excel文件
                jxl.write.WritableWorkbook wbe= Workbook.createWorkbook(new File(excelpath), wb);//建立workbook的副本
                int sheet_size=wbe.getNumberOfSheets();
                
                
                for (int index = 0; index < sheet_size; index++) {
                    // 每一個頁籤建立一個Sheet對象
                    WritableSheet sheet  = wbe.getSheet(index);        //獲取sheet
                    // sheet.getColumns()返回該頁的總列數
                    int column_total = sheet.getColumns();
                    for (int j = 0; j < column_total; j++) {
                        String cellinfo = sheet.getCell(j, 0).getContents();
                        WritableCell cell =sheet.getWritableCell(j, 0); //獲取第一行的全部單元格
                        jxl.format.CellFormat cf = cell.getCellFormat();//獲取第一個單元格的格式
                        jxl.write.Label lbl = new jxl.write.Label(j, 0, getPinYinHeadChar(cellinfo));//修改後的值
                        lbl.setCellFormat(cf);                          //將修改後的單元格的格式設定成跟原來同樣
                        sheet.addCell(lbl);                             //將改過的單元格保存到sheet
                    }
                }
                wbe.write();                                            //將修改保存到workbook
                wbe.close();                                            //關閉workbook,釋放內存 
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (WriteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

         
        // 返回中文的首字母  
         public static String getPinYinHeadChar(String str) {  
            String convert = "";  
            for (int j = 0; j < str.length(); j++) {  
               char word = str.charAt(j);  
                String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);  
                if (pinyinArray != null) {  
                    convert += pinyinArray[0].charAt(0);  
               } else {  
                     convert += word;  
                }  
            }  
            System.out.println(convert);
            return convert;              
         }  

}


第一次使用Jxl,經過它,Java能夠很方便的操做微軟的Excel文檔。除了Jxl以外,還有Apache的一個POI項目,也能夠操做Excel。數據庫

相關文章
相關標籤/搜索