2012-04-21 80 views
3

如何在不將java數據庫視爲數據庫並且不使用任何其他外部API的情況下讀取一個Excel表格。在Java中讀取Excel文件(簡單JSP和Servlet)

+1

在Java中沒有直接的方式來處理Excel工作表。您應該使用[Apache POI](http://poi.apache.org/download.html)Java API。 – Lion 2012-04-21 09:23:32

+0

爲什麼你不能添加外部庫? – 2012-11-14 08:49:44

+0

你可以閱讀csv的核心Java,這個鏈接可能有助於http://www.daniweb。java/threads/17262/read-in-a-.csv-file-and-load-the-data-into-an-array謝謝 Abhi – abhi 2012-04-21 09:28:13

回答

1

您可以轉換XLS文件CSV文件。 Java API支持csv文件。 您可以使用standrt I/O庫來讀取csv文件。

+0

哪個標準的Java SE或EE API支持讀取CSV文件? – 2012-04-21 09:21:35

+0

BufferedReader + StringTokenizer – Ilya 2012-04-21 09:24:03

+0

這些有點方法通常不建議使用... – abhi 2012-04-21 09:45:08

1

你不行。

Java SE和EE API不支持讀取Excel電子表格。 (嗯,我想你可以花幾個月閱讀Excel規範並從頭開發自己的電子表格閱讀器,但是這樣做會浪費我的努力,只是使用你拒絕的替代方案之一)。


回覆:電子表格轉換爲CSV和讀取的方法:

  • 這是不讀的電子表格。
  • 它需要一個外部應用程序(例如Excel)來執行從電子表格到CSV的轉換。
  • 這是有損。您只能閱讀電子表格的簡單數據內容。其他一切都消失了。
0

試試這個

import java.io.File; 
    import java.io.IOException; 

    import jxl.Cell; 
    import jxl.CellType; 
    import jxl.Sheet; 
    import jxl.Workbook; 
    import jxl.read.biff.BiffException; 

    public class ReadExcel { 

    private String inputFile; 

    public void setInputFile(String inputFile) { 
    this.inputFile = inputFile; 
     } 

    public void read() throws IOException { 
    File inputWorkbook = new File(inputFile); 
    Workbook w; 
try { 
w = Workbook.getWorkbook(inputWorkbook); 
// Get the first sheet 
Sheet sheet = w.getSheet(0); 
// Loop over first 10 column and lines 
for (int j = 0; j < sheet.getColumns(); j++) { 
for (int i = 0; i < sheet.getRows(); i++) { 
Cell cell = sheet.getCell(j, i); 
CellType type = cell.getType(); 
if (cell.getType() == CellType.LABEL) { 
System.out.println("I got a label " 
        + cell.getContents()); 
} 
    if (cell.getType() == CellType.NUMBER) { 
System.out.println("I got a number " 
        + cell.getContents()); 
} 
} 
} 
} catch (BiffException e) { 
e.printStackTrace(); 
} 
} 

public static void main(String[] args) throws IOException { 
ReadExcel test = new ReadExcel(); 
test.setInputFile("c:/temp/lars.xls"); 
test.read(); 
     } 

    } 
+0

這可以在不使用任何外部庫的情況下完成,那麼'xlsx'怎麼辦? – Lion 2012-04-21 09:35:04

+0

我使用library.you可以從這裏下載http://jexcelapi.sourceforge.net/ – 2012-04-21 09:38:09

+0

我相信它不支持'xlsx'格式。它支持嗎? – Lion 2012-04-21 09:40:17

1

你必須使用Apache POI讀取XLS和XLSX文件

您可以根據您的memeory限制使用HSSF,XSSF,SXSSF ....

4

有沒有直接的方式來處理Java中的Excel工作表。您應該使用Apache POI Java API。

Apache POI是一個Java庫,用於基於OLE2和OOXML(如XLS和DOCX)讀取和寫入各種Microsoft文件格式,尤其是與Office相關的文件格式。

我們來看一個閱讀Excel工作表的例子。它支持xlsxlsx文件格式。

import org.apache.poi.ss.usermodel.Sheet; 
import org.apache.poi.ss.usermodel.Workbook; 
import org.apache.poi.ss.usermodel.WorkbookFactory; 
import org.apache.poi.xssf.usermodel.XSSFCell; 
import org.apache.poi.xssf.usermodel.XSSFRow; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

private Vector importExcelSheet(String fileName) 
{ 
    Vector cellVectorHolder = new Vector(); 
    try 
    { 
     Workbook workBook = WorkbookFactory.create(new FileInputStream(fileName)); 
     Sheet sheet = workBook.getSheetAt(0); 
     Iterator rowIter = sheet.rowIterator(); 

     while(rowIter.hasNext()) 
     { 
      XSSFRow row = (XSSFRow) rowIter.next(); 
      Iterator cellIter = row.cellIterator(); 
      Vector cellStoreVector=new Vector(); 

      while(cellIter.hasNext()) 
      { 
       XSSFCell cell = (XSSFCell) cellIter.next(); 
       cellStoreVector.addElement(cell); 
      } 
      cellVectorHolder.addElement(cellStoreVector); 
     } 
    } 
    catch (Exception e) 
    { 
     System.out.println(e.getMessage()); 
    } 
    return cellVectorHolder; 
} 

調用上面的方法,返回Vector如下。

Vector dataHolder=importExcelSheet("Excel_file.xlsx"); 

注:這裏使用的Vector僅僅是一個示範。一個人不應該使用它,因爲它在Java中已經過時了。使用Java Collection框架中提供的其他類型的集合。